在前面文章中介绍了二分类logistic回归分析的假设检验理论,本篇文章将实例演示在R软件中实现二分类logistic回归分析的操作步骤。
关键词:R语言; R软件; 二分类logistic回归; 二项logistic回归; 二元logistic回归; 逻辑回归; EPV原则
一、案例介绍
探讨经皮内镜下腰椎间盘摘除术治疗腰椎间盘突出疗效不佳的主要影响因素,纳入146例治疗效果“不佳”(记录为1)的患者,278例治疗效果“良好”(记录为0)的患者,并收集其余变量信息。其余变量及编码为性别(gender:0=女,1=男)、年龄(age,0=60岁以下,1=60岁及以上)、手术时间(time, min)、突出部位(part, 1=单侧,2=中央,3=极外侧)、突出分类(class, 1=膨出型,2=突出型,3=脱垂型)、Modic改变(modic, 1=I级,2=II级,3=III级)、是否钙化(cal, 0=未钙化,1=钙化)、矢状径(d, cm)、退变级别(level, 1=I-III级,2=IV级,3=V级)。部分数据见图1。本文案例可从“附件下载”处下载。
二、问题分析
本案例的分析目的是探讨经皮内镜下腰椎间盘摘除术治疗腰椎间盘突出疗效不佳的主要影响因素,由于因变量是二分类变量,因此可以使用二分类logistic回归分析。但需要满足7个条件:
条件1:因变量为二分类变量。本研究中因变量是治疗效果“不佳”和“良好”,为二分类变量,该条件满足。
条件2:至少有1个自变量。自变量可以是分类变量也可以是连续变量。本研究中有多个自变量,类型各异,该条件满足。
条件3:各观测行间相互独立。对研究设计和数据收集的过程进行分析,可判断本案例中观测值之间不存在互相影响的情况。
条件4:例数较少类的因变量例数为自变量个数的10~15倍(EPV原则),且经验上两组的人数最好>30例,参照水平组不应少于30或50例。该条件需要通过软件分析后判断。
条件5:自变量之间无多重共线性。该条件需要通过软件分析后判断。
条件6:自变量不存在显著的异常值。该条件需要通过软件分析后判断。
条件7:数据未出现完全分离或拟完全分离现象。该条件需要通过软件分析后判断。
三、软件操作及结果解读
(一) 导入数据
mydata <- read.csv("二分类logistic回归分析.csv") #导入CSV数据 View(mydata) #查看数据
在数据栏目中可以查看全部数据情况,数据集中共有10个变量和424个观察数据,10个变量分别为性别(gender)、年龄(age)、手术时间(time)、突出部位(part)、突出分类(class)、Modic改变(modic)、是否钙化(cal)、矢状径(d)、退变级别(level)及预后(predict)。
如果数据集较大也可使用如下命令查看数据框结构:
str(mydata) #查看数据框结构
![](https://site.cdn.mengte.online/official/2022/02/20220220032453864.png)
(二) 适用条件判断
1. 条件4判断(因变量样本例数)
首先计算因变量中例数较少类的样本例数。
(1) 软件操作
##预后变量计数##
table(mydata$predict)
![](https://site.cdn.mengte.online/official/2022/02/20220220032654103.png)
(2) 结果解读
由图3可见,预后不佳为146例,预后良好为278例。根据“例数较少类的因变量例数为自变量个数的10~15倍(EPV原则)”,本案例可纳入10~15个自变量进行多因素二分类logistic回归分析。
2. 条件4判断(自变量样本例数)
为了增加结果的可读性,给部分分类变量增加标签,之后再逐一计算分类变量各类别的因变量例数,即生成R*C列联表。
(1) 软件操作
##给变量添加标签label ## mydata$gender <- factor(mydata$gender,levels = c(1,0),labels = c("男", "女")) mydata$age <- factor(mydata$age,levels = c(0,1),labels=c("60岁以下","60岁及以上")) mydata$part <- factor(mydata$part,levels = c(1,2,3),labels=c("单侧","中央","极外侧")) mydata$class <- factor(mydata$class,levels = c(1,2,3),labels=c("膨出型","突出型","脱垂型")) mydata$modic <- factor(mydata$modic,levels = c(1,2,3),labels=c("I级","II级","III级")) mydata$cal <- factor(mydata$cal,levels = c(0,1),labels=c("未钙化","钙化")) mydata$level <- factor(mydata$level,levels = c(1,2,3),labels=c("I-III级","IV级","V级")) ##定义参照组## mydata$level<-relevel(mydata$level,ref = "V级") #为退变级别level设置参照组为"V级" ##R*C列联表## table(mydata$predict,mydata$gender) table(mydata$predict,mydata$age) table(mydata$predict,mydata$part) table(mydata$predict,mydata$class) table(mydata$predict,mydata$modic) table(mydata$predict,mydata$cal) table(mydata$predict,mydata$level)
![](https://site.cdn.mengte.online/official/2022/02/20220220032923885.png)
![](https://site.cdn.mengte.online/official/2022/02/20220220032942201.png)
(2) 结果解读
由图4-1与图4-2可知,突出部位水平为“极外侧”时、突出分类水平为“膨出型”时、退变级别水平为“V级”时,因变量的例数<30,如果这些变量在多因素分析过程中进入模型,应注意避免例数较少的水平被选为参照。
3. 条件5判断(多重共线性诊断)
详见本章后文。
4. 条件6判断(异常值检测)
详见本章后文。
5. 条件7判断(完全分离检测)
完全分离,指某一个自变量本身或者某几个自变量的线性组合,对因变量的预测结果与实际情况完全一致,常表现为OR值无穷大。通过图4-1和图4-2可见并不存在这种情况。该条件满足。
(三) 变量筛选
1. 软件操作
##单因素logistic回归## fit1<-glm(predict~gender,data=mydata,family = "binomial") fit2<-glm(predict~age,data=mydata,family = "binomial") fit3<-glm(predict~time,data=mydata,family = "binomial") fit4<-glm(predict~part,data=mydata,family = "binomial") fit5<-glm(predict~class,data=mydata,family = "binomial") fit6<-glm(predict~modic,data=mydata,family = "binomial") fit7<-glm(predict~cal,data=mydata,family = "binomial") fit8<-glm(predict~d,data=mydata,family = "binomial") fit9<-glm(predict~level,data=mydata,family = "binomial") ##模型结果## summary(fit1)
![](https://site.cdn.mengte.online/official/2022/02/20220220033300151.png)
summary(fit2)
![](https://site.cdn.mengte.online/official/2022/02/20220220033326510.png)
summary(fit3)
![](https://site.cdn.mengte.online/official/2022/02/20220220033352185.png)
summary(fit4)
![](https://site.cdn.mengte.online/official/2022/02/20220220033416603.png)
summary(fit5)
![](https://site.cdn.mengte.online/official/2022/02/20220220033440378.png)
summary(fit6)
![](https://site.cdn.mengte.online/official/2022/02/20220220033504228.png)
summary(fit7)
![](https://site.cdn.mengte.online/official/2022/02/20220220033530446.png)
summary(fit8)
![](https://site.cdn.mengte.online/official/2022/02/20220220033556915.png)
summary(fit9)
![](https://site.cdn.mengte.online/official/2022/02/20220220033625820.png)
2. 结果解读
图5-1至5-9显示了每个变量单独纳入到模型中的结果,即单因素logistic回归分析。结果表明,变量“性别”、“手术时间”、“突出分类”和“Modic改变”与因变量的关联无统计学意义,“年龄”、“突出部位”、“钙化”、“矢状经”和“退化级别”与因变量的关联有统计学意义。
(四) 适用条件判断(补充)
将“手术时间”、“性别”、“突出分类”、“Modic改变”四个无统计学意义的变量移除,建立新的回归模型后进行如下操作。
1. 条件5判断(多重共线性诊断)
(1) 软件操作
##建立新的回归模型## fit <-glm(predict~age+part+cal+d+level,data=mydata,family = "binomial") ##共线性诊断## library(car) vif(fit) #计算vif
![](https://site.cdn.mengte.online/official/2022/02/20220220035138481.png)
(2) 结果解读
图6中计算了自变量的方差膨胀因子(variance inflation factor,VIF)。可见,所有自变量的VIF均<10,提示自变量之间不存在严重共线性问题。
2. 条件6判断(异常值检测)
(1) 软件操作
##计算cook距离## cook<-cooks.distance(fit) #计算cook距离 cook[cooks.distance(fit)>0.5] #显示cook距离>0.5的个案编号和cook值 max(cook) #显示最大cook距离
![](https://site.cdn.mengte.online/official/2022/02/20220220034951646.png)
(2) 结果解读
图7中最大的库克距离值为0.031<0.5,提示不存在显著异常值,本研究数据满足条件6。
(五) 模型拟合
1. 软件操作
##查看模型结果##
summary(fit)
![](https://site.cdn.mengte.online/official/2022/02/20220220034856493.png)
##计算模型中变量系数的95%CI ##
confint(fit)
![](https://site.cdn.mengte.online/official/2022/02/20220220034823946.png)
##计算OR ##
exp(coef(fit)) #计算OR
![](https://site.cdn.mengte.online/official/2022/02/20220220034800675.png)
exp(confint(fit)) #计算OR的95%CI
![](https://site.cdn.mengte.online/official/2022/02/20220220034732950.png)
##模型拟合评价## ##似然比检验 library(rms) fit.lrm<-lrm(predict~age+part+cal+d+level,data=mydata) print(fit.lrm)
![](https://site.cdn.mengte.online/official/2022/02/20220220034648759.png)
##拟合优度检验## library(ResourceSelection) hoslem.test(fit$y,fitted(fit),g=10)
![](https://site.cdn.mengte.online/official/2022/02/20220220034604515.png)
2. 结果解读
(1) 模型系数
图8-1展示了模型的详细参数,Coefficients部分”列出了截距和自变量的“Estimate (非标准化系数)”、“Std.Error (标准误)”,统计量Z值、P值。图8-2则显示了模型所有变量系数的95%CI。图8-3和图8-4计算了OR及其95%CI。OR值为e(回归系数),如矢状径的OR=0.836=e(-0.179),表示矢状径每增加1cm,术后效果不佳的风险降低16.4% (OR=0.836,95%CI:0.740~0.944;P=0.004)。
其他自变量结果的解释分别为,年龄60岁及以上的患者术后不佳的风险是60岁以下患者的2.780倍(95%CI:1.645~4.720;P<0.001)。突出部位为“中央”和“极外侧”的患者术后效果不佳的风险分别是“单侧”患者的2.091倍(95%CI:1.320~3.328;P=0.002)和2.133倍(95%CI:0.914~4.946;P=0.077)。“钙化”患者术后不佳的风险是“非钙化”患者的0.574倍(95%CI:0.347~0.933;P=0.027)。退变级别为“I-III级”的患者术后效果不佳的风险与“V级”患者相比,差异无统计学意义(95%CI:0.181~1.140;P=0.096),退变级别为“IV级”的患者术后效果不佳的风险比级别为“V级”的患者低63.7%( OR=0.363,95%CI:0.160~0.801;P=0.013)。
(2) 模型评价与拟合优度
图9展示了模型似然比检验的结果。χ²=64.125,P<0.001,表示本次拟合的模型中至少有一个变量的OR值有统计学意义,即模型总体有意义。
图10 Hosmer和Lemeshow检验是模型拟合优度检验。当P值不小于检验水准时(即P>0.05),认为数据中的信息已被充分提取,模型拟合优度较高。
(五) 预测价值
1. 软件操作
##计算模型预测值## mydata$pre <- predict(fit,type='response') #计算预测概率 ##绘制ROC曲线## library(pROC) modelroc <- roc(mydata$predict,mydata$pre) #计算ROC绘图数据 plot(modelroc, print.auc=TRUE, auc.polygon=TRUE, grid=c(0.1, 0.2), grid.col=c("green", "red"), max.auc.polygon=TRUE, auc.polygon.col="skyblue", print.thres=TRUE) #绘制ROC曲线图 plot(ci(modelroc, of = "thresholds", thresholds = "best")) #添加最佳截断值位置
![](https://site.cdn.mengte.online/official/2022/02/20220220034433831.png)
ci(modelroc) #计算AUC的95%CI
![](https://site.cdn.mengte.online/official/2022/02/20220220034406698.png)
##模型评价的混淆矩阵## library(caret) mydata$pred.cutoff<-ifelse(mydata$pre>=0.380,1,0) #由最佳截断值判断分类 confusionMatrix(data=factor(mydata$pred.cutoff), reference=factor(mydata$predict), positive="1")
![](https://site.cdn.mengte.online/official/2022/02/20220220034233743.png)
2. 结果解读
图11则分别显示了“AUC (ROC曲线下面积)”、最优cot-off值、“Specificity (特异度)”、“Sensitivity (灵敏度)”,图12给出了AUC的95%CI,图13给出了模型评价的混合矩阵。由结果可见,根据最佳截断值(0.380)进行预测分类,模型对因变量正确分类的准确性为71.5%,灵敏度为61.0%、特异度为77.0%,ROC曲线下面积为72.8%,95%CI为67.8%~77.9%,该模型的判断效果一般。
四、结论
本研究采用二分类Logistic回归探讨经皮内镜下腰椎间盘摘除术治疗腰椎间盘突出疗效不佳的主要影响因素。因变量例数分布满足样本量需求,变量之间不存在严重共线性和异常值,数据不存在完全分离现象。
九个自变量经过分析后,最终有5个(矢状径、年龄、突出部位、是否钙化和退变级别)进入模型。其中矢状径每增加1cm,术后效果不佳的风险降低16.4% (OR=0.836,95%CI:0.740~0.944;P=0.004);年龄60岁及以上的患者术后不佳的风险是60岁以下患者的2.780倍(95%CI:1.645~4.719;P<0.001);突出部位为“中央”和“极外侧”的患者术后效果不佳的风险分别是“单侧”患者的2.091倍(95%CI:1.320~3.328;P=0.002)和2.133倍(95%CI:0.922~4.936;P=0.077);“钙化”患者术后不佳的风险是“非钙化”患者的0.574倍(95%CI:0.347~0.933;P=0.027);与退变级别为“V级”的患者相比,“I-III级”患者术后效果不佳的风险降低54.1% (95%CI:0.181~1.140;P=0.096);“IV级”患者术后效果不佳的风险降低63.7% (95%CI:0.160~0.801;P=0.013)。所建立的模型有统计学意义(χ²=64.125,P<0.001),按照最佳截断值对因变量正确分类的准确性为71.5%,灵敏度为61.0%、特异度为77.0%,ROC曲线下面积为72.8% (95%CI:67.8%~77.9%),该模型的判断效果一般。
五、多重共线性的判断及处理
- 多重共线性是指自变量间存在线性相关关系,容忍度越小、VIF越大,表明共线性越强。实际数据分析过程中,若容忍度<0.2或VIF>5则表明存在较强共线性,若容忍度<0.1或VIF>10则表明存在严重共线性问题。
- 在实际数据分析过程中,若存在以下情况,则暗示模型可能存在共线性问题:①整个模型的检验结果为P值≤检验水准α,但各自变量的偏回归系数检验结果却为P值>检验水准α。②专业上认为应该有统计学意义的自变量,检验结果确无统计学意义。③自变量的偏回归系数的取值大小甚至符号明显与实际情况相违背,难以解释。④增加或删除一个自变量或一个案例,自变量偏回归系数发生较大变化。
- 自变量若存在严重多重共线性,可采取以下措施进行处理:①基于专业知识直接确认优先选择哪些变量进入模型,而将相对次要的共线性变量从模型中剔除。②逐步回归,但是当共线性比较严重时,变量自动筛选的方法并不能完全解决问题。③岭回归/lasso回归,为有偏估计,但能有效地解决共线性问题。④主成分回归法,这种方法的代价是在提取主成分时会丢失一部分信息,收益则是大大降低了共线性对参数估计值的扭曲,而且自变量间的多重共线性越强,提取主成分时丢失的信息就越少。
- 需要注意的是,多重共线性的存在不一定必然影响模型的使用价值,其理论上共线性不应当降低模型的预测效果,其影响主要是使模型的偏回归系数发生改变,从而无法得到专业上合理的解释。
六、自变量进入模型的形式
- 无序多分类自变量需要以哑变量形式进入模型,在SPSS中通过选择参照水平实现哑变量的设置,但需要注意以下事项:①参照水平要具有实际意义,否则会失去比较的目标,如“其他”一般不适宜做参照水平。②参照水平应有一定的例数(不低于30或50例),否则将导致与其比较的其他组的置信区间较大。③哑变量整体分析无统计学意义时,所有哑变量都不用再纳入模型;整体分析有统计学意义时,尽管有些哑变量无统计学意义,但仍需要纳入模型,即“同进同出”原则。
- 有序多分类自变量进入模型有多种方式备选,但应选择最具合理性的方式:①直接以计量资料形式带入模型:此时得到的模型较为简洁,也容易解释。但应用的前提是自变量的每个水平对因变量的影响作用基本一致,可通过观察哑变量各水平的回归系数值是否存在等级变化关系进行判定。建议先将有序多分类资料分别以哑变量和连续变量的形式引入模型,观察每个哑变量的回归系数间是否存在等级关系,并对两个模型进行似然比检验,如果似然比检验无统计学意义,且每个哑变量的回归系数间存在等级关系,则可以将该自变量以连续变量形式引入模型,否则还是采用哑变量的方式引入模型。②设置哑变量:参照无序多分类资料。③当有序多分类变量的等级水平与因变量结局不成线性关系时,应采用最优尺度回归探讨效应拐点。
- 定量资料进入模型有多种方式备选,但也应选择最具合理性的方式:如果某计量资料能以计量形式进入模型(有统计学意义),那么转化后应当同样能进入模型,且OR值会显著增加。①直接带入模型,尽管此种方法较为简单,但仍不做首选推荐。因为此时得出的OR值一般较小,即自变量变化一个单位对结局风险的影响其实是有限的,不能贴近专业解释。 如果资料分布严重失衡时(非均匀分布)尤其不能直接带入模型。但以计量资料形式直接进入模型往往模型的拟合效果较好。②根据专业意义降维后(如根据BMI指数分级标准降维为有序多分类资料),参照有序多分类资料或者二分类资料处理方式。③如果没有专业划分标准,可以资料分布形式根据四分位数间距或等分法降维或者标准化后按Per 1 sd (每一个标准差)降维。④建立自变量和因变量之间的ROC曲线,根据约登指数进行二分类降维。⑤中位数(非正态分布)或者均数(近似正态或正态分布)降维。⑥当自变量的单位不合适导致因变量的风险改变很小时,可对自变量采取缩小(如除以100)或扩大(如乘以10)相应倍数的方式。
七、自变量的选择策略
关于自变量是否纳入多因素分析模型除了根据本章节介绍的判定方法以外,还可采取以下策略:
- 专业原则:首先需要考虑的就是专业原则,这一点最为重要。如果目前专业知识有证据表明该变量与结局发生有关,那么不论该变量单因素分析结果是否有统计学意义,都应纳入多因素分析模型。
- 以单因素分析为基础:当分析的变量较多时,可先采取单因素分析方法,对有统计学意义的变量再纳入多因素分析。此时单因素分析检验水准可设置为0.1—0.2,如果样本量较大,可将检验水准设置为较为严格;如果样本量较小可将检验水准设置较为宽松。
- 比较原则:可以尝试多种方法对该变量进行分析,如采用多种自变量进入方法分析,或将计量资料降维后再分析,如果变量在多种进入方法和不同变量类型时,均能在多因素分析模型中有统计学意义,则表明该变量的确是因变量的真正影响因素。