实战医学统计迎来了第一个粉丝投稿,作者 “生生R语(知识星球同ID)”,昵称“小狐狸”。她是个阳光漂亮的艺术专业硕士(是的,你没看错!),毕业后自己捣鼓SCI绘图,自学了9门统计相关软件,涵盖SCI科研绘图生信分析(是的,你没看错!)。近期手绘作品如下,图如其人。想认识她的小伙伴可以入群加她好友
。本公众号群暂时为7天开放状态,二维码见文末。
以下是本文正篇:
在阅读基于统计分析的文献时,总会看到样本基线信息三线表、单因素/多因素二元Logistic(逻辑)回归分析三线表或森林图的身影。由于前者往往是队列研究(cohort study)论文的正文中出现的第一个表格,因此也被称作“Table 1”。下列两张表格的整理,应当说是科研人的“必备技能”。
注:变量如为分类变量,行名“vs.”之后的组别表示reference参照组。
回想之前,为了整理这两张表格,我们是不是使用SPSS软件对每个变量逐个分析,再用excel或word进行汇总?这样不仅耗费时间,还很容易出错。那么,有没有什么简便的方法,能够实现对上述统计分析结果的高效汇总与输出呢?借助R语言这款完全免费的统计软件,不仅省时省力,还能将Logistic回归结果可视化,升级为森林图!假设我们现在需要进行一项 “结肠癌患者队列研究(retrospective/historical cohort study)”,使用Visio Studio 2019软件绘制本次的流程图,明确本次统计分析的思路。
基于包的自带数据,小编只用四步,带领同学们用R语言/Rstudio快速实现“三线表+森林图自由”。除去前期数据准备工作,样本基线信息三线表(Table 1)整理、Logistic回归OR(odds ratio,比值比/优势比)三线表整理、森林图绘制,每个步骤的代码不会超过5行,有效控制了工作量,对R语言新手可以说是十分地友好。
在学习R语言技能之前,我们先来学习一下基本的统计学知识。
Table1 各个变量类型对应的统计方法参照
注释:a M-W U检验和Wilcoxon秩和检验输出的p value完全一致,二选一即可。两者的区别仅在于输出统计量的不同,前者统计量为U,后者统计量为W。b 在方法的选择上:1) 总样本数n < 40,或存在理论频数(期望计数)T < 1的单元格,或Pearson’s卡方检验得到的P在0.05上下,选择Fisher’s精确检验,Fisher’s精确检验没有统计量;2) 总样本数n ≥ 40,且存在1 < T < 5的单元格,选择连续性校正卡方检验;3) 其他情况选择Pearson’s卡方检验。
选择连续变量的组间差异比较的方法时,需要特别注意变量是否服从正态分布。服从正态的显示为“均值 ± 标准差 (mean ± sd)”,使用独立样本t检验(二分组)或ANOVA(单因素方差分析)(多分组);不服从正态分布的显示格式为“中位数 [25%四分位数 (Q1), 75%四分位数 (Q3)]”,采用Mann-Whitney U检验(p value 同Wilcoxon秩和检验)(二分组)或K-W(Kruskal-Wallis) H检验(多分组)。使用“autoReg包”只需对“gaze”函数的参数进行设置,即可对连续变量进行Shapiro-Wilks检验(S-W检验)(适合样本量在5000以下的数据集)。
Logistic回归模型
构建多元线性回归模型是常见的统计分析方法。假设研究自变量x1,x2,x3,...,xn对因变量y的影响,不考虑时间的作用因素,且y为二分类变量时(一般编码为“0”或“1”(例如患者的生存或死亡),“1”表示事件的发生(例如死亡)),在这种情况下一般使用广义线性模型(generalized linear regression, GLM)中的二元Logistic回归分析。Logistic回归的应用领域十分广泛,许多临床、生物信息方面的论文都会用到Logistic回归模型。此外,这种统计学方法也可用于分析问卷数据。
本次教程主要使用的autoReg包,由韩国心内科医师Keon-Woong Moon开发。由于“gaze”函数直接整合了对连续变量进行正态分布检验的步骤,因此比“tableone”包的“svyCreateTableOne”的函数在操作流程上更加简便。此外,“gaze”函数是3种常用table 1制作函数(第三个为“compareGroups包”的“descrTable”的函数)中,唯一一个以“mean ± SD”格式输出t检验或ANOVA结果的函数。因此更加推荐R初学者使用“gaze”函数。除了生成Table 1,“autoReg包”能够在各种常见回归模型中自动选择解释变量,直接生成可以用于插入论文的回归分析结果汇总表及对数据进行可视化,支持包括线性模型、广义线性模型、Cox HR(hazard ratio,风险比)回归模型在内的多种模型。
因考虑到部分读者刚刚开始接触R语言,对于复杂代码难以理解和学习,因此本教程的代码以精简为主,并在关键地方添加备注进行说明。更多详细的功能可参考各个R包的帮助文档或其他R语言教程。接下来,我们就一起打开R/Rstudio,用“survival”包自带的“colon(结肠癌)”数据集,完成Logistic回归分析的“四步走”吧!担心只看图文稿学不会的小伙伴,可戳视频号“上官海棠小狐狸”:
Logistic回归分析所需的原始数据表,每一列对应一个变量(如年龄),每一行对应一个样本。在正式开始数据分析之前,我们需要完成R包的安装及加载,对数据进行整理与清洗(data cleansing)。如有需要还可对样本进行随机抽样,生成训练集和验证集。
第二步,使用5行代码完成对患者基线信息及分组差异检验整理,输出Table 1。这个步骤要特别注意根据变量的情况选择适合的统计学方法。
下表是小编将Excel文档内容整理而成的Word三线表。尽管“gaze”函数对于小数点位数方面没有“tableone”函数(“tableone”函数可针对mean ± SD/median [IQR]、占比、P value保留的小数位数分别进行设置)灵活,但是可以在输出为word文档后进行调整与修改,或考虑与“tableone”函数输出的结果进行组合,得到最优结果。
第三步,仅用四行代码构建结肠癌患者生存结局的二元Logistic回归模型。单因素分析显著性小于0.05的变量(如变量为多分类变量,有一个哑变量显著即视为分类变量整体存在显著意义)会被函数自动纳入多因素分析。
表格解读:每一个分类变量的第一个哑变量为reference,OR = 1(默认输出的表中未显示),不存在显著性。对于向后消除逐步回归(backward stepwise)多因素Logistic回归分析阳性的结果再次进行多因素Logistic回归。OR final 列结果显示,Lev+5FU治疗是有利于患者生存的因素(保护因素)(P < 0.001),而结肠癌造成肠梗阻的发生(P < 0.05)和转移的淋巴结数量(P < 0.001)则是危险因素。
采用批量循环单因素logistic的代码(我的代码保留了更多小数点之后有效位数),对“autoReg包”的单因素建模结果进行核实,发现完全一致。
四行代码完成logistic回归结果的可视化。
图片解读:森林图的解读与Logistic回归三线表的结果大体相同。森林图方框(box)所对应的x坐标即为OR数值,误差棒(error bar)表示95%置信区间的下限(lower bound)与上限(upper bound)。x=1为森林图的无效线(no effect line)。Box压在这根基线之上或十分靠近的,是reference,或对患者生存结局无明显影响的因素;在基准线右侧的因素(OR > 1)是危险因素;在基准线左侧的因素是(OR < 1)保护因素。
只需四步走,即可完成本次癌症患者队列研究多项主要统计结果的输出哦!是不是很方便呢!本次讲解着重于带领大家初步熟悉使用R语言的语法和操作。想进一步深入了解R语言的同学,还可尝试使用“tableone”包、“compareGroups包”输出Table 1,并比较三种方法的优缺点。除了“autoReg”包,“forestplot”包和“ggplot2”包也可完成Logistic回归或Cox回归森林图的绘制。下期R语言教程将会为大家介绍如何输出带显著性标记的Pearson’s或Spearman相关性分析矩阵(表格形式)以及可视化。如果大家在学习R语言或统计分析的过程中遇到了什么疑惑,也欢迎给小编“上官海棠”留言哦!小编将优先解答提问频次较高的问题。
如需相关软件或本教程中的R代码,可通过公众号信息界面回复
一啖气table1
提供的网盘链接下载安装或进本公众号小伙伴群,找“上官海棠”索取。
为了更好的高效交流,本公众号建立了学术交流群,现在开放自由入群有效期7天。注意,本群仅供SCI学术交流,代码讨论,拒绝广告水文,拒绝潜水。由于人数有限,需要实名制,入群请备注说明:姓名-学校(单位)-专业。
reference: