首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >条件逻辑回归的假设检验和变量选择

条件逻辑回归的假设检验和变量选择

作者头像
医学和生信笔记
发布2026-05-29 11:01:14
发布2026-05-29 11:01:14
320
举报

条件逻辑回归(conditional logistic regression)是针对配对数据资料分析的一种方法。在一些病例-对照研究中,把病例和对照按照年龄、性别等进行配对,形成多个匹配组,各匹配组的病例数和对照数是任意的,并不是1个对1个,常用的是每组中有一个病例和多个对照,即1:M配对研究(一般M≤3)。

使用孙振球《医学统计学》第4版例16-3的数据。某北方城市研究喉癌发病的危险因素,用1:2配对研究,现选取了6个可能的危险因素并记录了25对数据,试做条件logistic回归。

代码语言:javascript
复制
data16_3 <- foreign::read.spss("datasets/例16-03.sav",to.data.frame = T)
head(data16_3)
##   i y x1 x2 x3 x4 x5 x6
## 1 1 1  3  5  1  1  1  0
## 2 1 0  1  1  1  3  3  0
## 3 1 0  1  1  1  3  3  0
## 4 2 1  1  3  1  1  3  0
## 5 2 0  1  1  1  3  2  0
## 6 2 0  1  2  1  3  2  0
str(data16_3)
## 'data.frame':    75 obs. of  8 variables:
##  $ i : num  1 1 1 2 2 2 3 3 3 4 ...
##  $ y : num  1 0 0 1 0 0 1 0 0 1 ...
##  $ x1: num  3 1 1 1 1 1 1 1 1 1 ...
##  $ x2: num  5 1 1 3 1 2 4 5 4 4 ...
##  $ x3: num  1 1 1 1 1 1 1 1 1 1 ...
##  $ x4: num  1 3 3 1 3 3 3 3 3 2 ...
##  $ x5: num  1 3 3 3 2 2 2 2 2 1 ...
##  $ x6: num  0 0 0 0 0 0 0 0 0 1 ...

i是配对的组号,不需要变成因子型。以前3航为例解释下这个数据的结构,前3行都是第1组的,其中第1行是病例(y=1),第2和3行是对照(y=0)。

使用survival::clogit进行条件逻辑回归,先建立全模型:

代码语言:javascript
复制
library(survival)

full_model <- clogit(y ~ x1+x2+x3+x4+x5+x6+strata(i), 
              data = data16_3, method = "breslow")
#summary(full_model)

变量筛选

然后使用MASS包进行逐步回归法筛选变量,依据的统计量是AIC(而不是书中的wald卡方值):

代码语言:javascript
复制
library(MASS)
stepAIC(full_model,direction = "both",trace = F)
## Call:
## coxph(formula = Surv(rep(1, 75L), y) ~ x1 + x2 + x3 + x4 + x6 + 
##     strata(i), data = data16_3, method = "breslow")
## 
##        coef exp(coef) se(coef)      z      p
## x1  2.72788  15.30037  2.86273  0.953 0.3406
## x2  1.63294   5.11889  0.64090  2.548 0.0108
## x3  2.19644   8.99295  1.15872  1.896 0.0580
## x4 -4.09625   0.01663  1.94949 -2.101 0.0356
## x6  3.78580  44.07080  2.09677  1.806 0.0710
## 
## Likelihood ratio test=42.03  on 5 df, p=5.811e-08
## n= 75, number of events= 25

这一步得到的变量是x1,x2,x3,x4,x6,和书里不一致,因为依据的统计量不一样。目前并没有现成的R包可以依据wald卡方进行逐步回归法筛选变量,除非自己写函数。

按照书中最终留下x2,x3,x4,x6这4个变量,然后再使用这4个变量建立条件逻辑回归,即可得到与表16-8一致的结果:

代码语言:javascript
复制
fit <- clogit(y ~ x2+x3+x4+x6+strata(i), 
              data = data16_3, method = "breslow")
summary(fit)
## Call:
## coxph(formula = Surv(rep(1, 75L), y) ~ x2 + x3 + x4 + x6 + strata(i), 
##     data = data16_3, method = "breslow")
## 
##   n= 75, number of events= 25 
## 
##        coef exp(coef) se(coef)      z Pr(>|z|)   
## x2  1.48691   4.42343  0.55065  2.700  0.00693 **
## x3  1.91665   6.79812  0.94435  2.030  0.04240 * 
## x4 -3.76405   0.02319  1.82510 -2.062  0.03917 * 
## x6  3.63211  37.79254  1.86572  1.947  0.05156 . 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##    exp(coef) exp(-coef) lower .95 upper .95
## x2   4.42343    0.22607 1.5032983   13.0158
## x3   6.79812    0.14710 1.0679561   43.2737
## x4   0.02319   43.12280 0.0006483    0.8295
## x6  37.79254    0.02646 0.9756664 1463.8982
## 
## Concordance= 0.9  (se = 0.068 )
## Likelihood ratio test= 38.82  on 4 df,   p=8e-08
## Wald test            = 8.96  on 4 df,   p=0.06
## Score (logrank) test = 28.4  on 4 df,   p=1e-05

结果非常齐全,β值,OR值,z值,P值等信息都有了。

假设检验

上述结果的最后3行已经给出了模型整体的假设检验结果,依次是:

  • • Likelihood Ratio Test(似然比检验):统计量=38.82,P值远小于0.05,说明模型整体非常显著。
  • • Wald Test:统计量=8.96,P=0.06,根据该结果,模型整体似乎没有显著优于空模型,这个结果可能不准,注意变量x6,系数是3.63,OR值高达37.79,且置信区间极宽(0.97到1463.89),说明数据可能存在稀疏性或分离现象,导致标准误膨胀,从而使Wald检验失效。
  • • Score (Logrank) Test(计分检验):统计量=28.4,P<0.05,也说明模型整体非常显著。

似然比检验也可以自己做,结果是一样的:

代码语言:javascript
复制
# 建立空模型
model_0 <- clogit(y ~ 1+strata(i), 
              data = data16_3, method = "breslow")
# 进行似然比检验
anova(model_0,fit,test = "chisq")
## Analysis of Deviance Table
##  Cox model: response is  Surv(rep(1, 75L), y)
##  Model 1: ~ 1 + strata(i)
##  Model 2: ~ x2 + x3 + x4 + x6 + strata(i)
##    loglik  Chisq Df Pr(>|Chi|)    
## 1 -27.465                         
## 2  -8.056 38.819  4  7.594e-08 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

P<0.05,说明原模型有意义。

条件逻辑回归不能直接使用普通的Hosmer-Lemeshow检验、伪R2或传统的混淆矩阵来评价模型,因为这些指标通常依赖于截距项或整体概率预测,而条件逻辑回归不估计截距。

因此条件逻辑回归不能用以上方法评价拟合优度,如果非要评价模型预测准确性,可以计算Harrell’s C-index(一致性指数),因为条件逻辑回归等价于分层Cox模型。结果中的Concordance=0.9就是一致性指数。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-05-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 医学和生信笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 变量筛选
  • 假设检验
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档