Xianxiong Ma
2020年3月16日
第一种思路:先做单因素分析,P值显著的变量(比如P<0.1) 放入多元回归方程。
第二种思路:危险因素研究是根据对暴露因素(X)效应值的影响筛选协变量的。
先看“Z”与Y有没有联系,用单因素分析,看“Z”的P值。
再看调整“Z”与不调整“Z”X对Y的作用是否有变化。先运行基本模型,记录β1,再在该模型中加入“Z” ,看β1变化多大?基本模型中可以加入一些必须要调整的变量。
再运行一个完整的模型,即调整所有可能的因素,然后从模型中剔除“Z”,看X的回归系数β1的变化。按照上述思路,比较不同的模型,观察X的回归系数的变化,通常认为变化不超过10%可以不调整。
BMJ发表的一项研究,分析胎) L生长受限X与心血管风险Y的关系。调整变量如果对X的作用影响超过10%才调整该变量“We selected these confounders on thebasis of their associations with the outcomes of interest or a change in effectestimate of more than 10%.'。
[A Prospective Natural-History Study of Coronary Atherosclerosis]Wrote: “Baseline variables that were considered clinically relevant orthat showed a univariate relationship with outcome were entered intomultivariate Cox proportional-hazards regression model. Variables forinclusion were carefully chosen, given the number of events available,to ensure parsimony of the final model.“
首先从临床专业知识的角度考虑,它的作用一定是被人们可接受的,可以从某个生理机制或途径去进行合理的解释。我们常见的候选变量包括以下几类:
人口学资料:例如性别、年龄、学历、职业、身高、体重等
生活习惯:例如吸烟、饮酒、体育锻炼等
病史信息:例如家族史、既往史(高血压、糖尿病、心梗等)等
检查信息:例如血液检查指标(LDL-C、 CRP)、其他检查项目等
治疗信息:例如既往用药、手术等
暴露/处理因素
针对以上很多候选变量无从下手时,我们可以参考既往发表的文献,总结出已公开发表报道过的对结局事件有独立作用的变量,将它们作为重点的候选变量以供备选。
第一,从统计分析角度讲,传统单因素分析方法的结果展示相对简单,它们仅能提示组间均值或率的分布差异有无统计学显著性;而采用单因素回归分析,除了定性的展示组间差异外,还可以提供更为丰富的信息,比如偏回归系数(β)的估计值、效应量估计值(OR、RR值)及可信区间等。
第二,对于回归分析来说,先做单因素回归,再做多因素回归,这种分析思路展现了从单独一个因素到筛选多个混杂因素的变化过程。单因素回归分析的结果对于变量的筛选就显得很有意义,我们可以根据前后偏回归系数或者OR值的变化,来协助判断是否需要将其纳入到多因素回归中进行调整和控制。通过单因素分析结果,可以帮助我们来判断哪些因素是对结局事件有影响的可疑因素,从而将其作为多因素分析的候选变量。
第三、pvalue < 0.2 on univariate analysis were included.
如果样本量足够大,统计效能足够,我们可以借助统计软件提供的变量筛选方法自动筛选变量,这是一种让研究者赏心悦目的神操作,软件提供的变量筛选方法有六种:
在多因素回归分析中纳入的变量并非越多越好,我们还要从模型的稳健程度去考虑。文中已经提到控制混杂因素的个数主要取决于发生结局事件的多少,控制的混杂因素越多,所需要的结局事件的例数就越多。
对于多重线性回归模型,样本量应至少为10-15的自变量个数,而对于Logistic回归和Cox回归,结局事件则应至少为15 -20倍的自变量个数。
需要注意的是,这里指的是结局事件的数量,而不是总的样本量,总样本量当然还要远远多于结局事件的数量。
决定系数R2,AIC, BIC,似然比对数、C Statistics等等。
纳入不同的变量,构建多个模型(mode1, model 2, model3,……),客观报告每个模型的结果,这是一种敏感性分析。
library(forestplot)
rs_forest <- read.csv('abiraterone.csv',header = FALSE)
# 读入数据的时候大家一定要把header设置成FALSE,保证第一行不被当作列名称。
# tiff('Figure 1.tiff',height = 6000,width = 7000,res= 600)
forestplot(labeltext = as.matrix(rs_forest[,1:4]),
#设置用于文本展示的列,此处我们用数据的前四列作为文本,在图中展示
mean = rs_forest$V5, #设置均值
lower = rs_forest$V6, #设置均值的lowlimits限
upper = rs_forest$V7, #设置均值的uplimits限
is.summary = c(T,T,T,F,F,T,F,F,T,F,F,T,F,F,F,T,F,F,T,F,F,T,F,F,T,F,F),
#该参数接受一个逻辑向量,用于定义数据中的每一行是否是汇总值,若是,则在对应位置设置为TRUE,若否,则设置为FALSE;设置为TRUE的行则以粗体出现
zero = 1, #设置参照值,此处我们展示的是HR值,故参照值是1,而不是0
boxsize = 0.3, #设置点估计的方形大小
lineheight = unit(8,'mm'),#设置图形中的行距
colgap = unit(2,'mm'),#设置图形中的列间距
lwd.zero = 2,#设置参考线的粗细
lwd.ci = 2,#设置区间估计线的粗细
col=fpColors(box='#458B00', summary= "#8B008B",lines = 'black',zero = '#7AC5CD'),
#使用fpColors()函数定义图形元素的颜色,从左至右分别对应点估计方形,汇总值,区间估计线,参考线
xlab="The estimates",#设置x轴标签
lwd.xaxis=2,#设置X轴线的粗细
lty.ci = "solid",
graph.pos = 4)#设置森林图的位置,此处设置为4,则出现在第四列