普通英语使用R解释和验证Cox比例风险回归模型


13

有人可以用简单的英语向我解释我的Cox模型吗?

我使用该函数将以下Cox回归模型拟合到我的所有数据中cph。我的数据保存在名为的对象中Data。变量wxy是连续的;z是两个层次的因子。时间以月为单位。我的一些患者缺少变量数据z注意:下面我已经适当地指出了Harrell博士的建议,即我估算这些值,以避免对我的模型造成偏见,以后会这样做)。

> fit <- cph(formula = Surv(time, event) ~ w + x + y + z, data = Data, x = T, y = T, surv = T, time.inc = 12)

Cox Proportional Hazards Model
Frequencies of Missing Values Due to Each Variable
Surv(time, event)    w    x    y    z 
                0    0    0    0   14 

                Model Tests          Discrimination 
                                            Indexes        
Obs       152   LR chi2      8.33    R2       0.054    
Events     64   d.f.            4    g        0.437    
Center 0.7261   Pr(> chi2) 0.0803    gr       1.548    
                Score chi2   8.07                      
                Pr(> chi2) 0.0891                      

                   Coef    S.E.   Wald Z   Pr(>|Z|)
         w      -0.0133  0.0503    -0.26     0.7914  
         x      -0.0388  0.0351    -1.11     0.2679  
         y      -0.0363  0.0491    -0.74     0.4600  
         z=1     0.3208  0.2540     1.26     0.2067

我还尝试使用cox.zph下面的命令来测试比例风险的假设,但不知道如何解释其结果。放置plot()命令会出现错误消息。

 cox.zph(fit, transform="km", global=TRUE)
            rho chisq      p
 w      -0.1125 1.312 0.2520
 x       0.0402 0.179 0.6725
 y       0.2349 4.527 0.0334
 z=1     0.0906 0.512 0.4742
 GLOBAL      NA 5.558 0.2347

第一个问题

  • 有人可以用简单的英语向我解释以上输出的结果吗?我有医学背景,没有接受过统计学方面的正规培训。

第二个问题

  • 正如Harrell博士建议的那样,我想通过使用rms软件包执行100次10倍交叉验证的迭代来内部验证模型(据我了解,这将需要构建100 * 10 = 1000不同的模型,然后要求他们预测生存时间他们从未见过的患者)。

    我尝试使用该validate功能,如图所示。

    > v1 <- validate(fit, method="crossvalidation", B = 10, dxy=T)
    > v1
          index.orig training    test optimism index.corrected  n
    Dxy      -0.2542  -0.2578 -0.1356  -0.1223         -0.1320 10
    R2        0.0543   0.0565  0.1372  -0.0806          0.1350 10
    Slope     1.0000   1.0000  0.9107   0.0893          0.9107 10
    D         0.0122   0.0128  0.0404  -0.0276          0.0397 10
    U        -0.0033  -0.0038  0.0873  -0.0911          0.0878 10
    Q         0.0155   0.0166 -0.0470   0.0636         -0.0481 10
    g         0.4369   0.4424  0.6754  -0.2331          0.6700 10

    您如何执行100倍重采样?我认为上述代码仅执行一次交叉验证。

  • 然后,我想知道我的模型在预测方面的表现如何。我尝试了以下方法:

    > c_index <- abs(v1[1,5])/2 + 0.5
    > c_index
    [1] 0.565984

    这是否意味着我的模型仅比掷硬币好一点?

第三个问题

Harrell博士指出,我已经假设协变量效应是线性的,并且如果所有协变量效应都是线性的,则我样本中的事件数量仅够大到足以拟合一个可靠的模型。

  • 这是否意味着我应该在模型中包括某种交互作用术语?如果是这样,关于放什么建议?

2
在我最初提出问题后大约三个小时,我对上面的最初问题进行了一些重大修改。我一直在尝试遵循哈雷尔博士的非常有帮助的建议。如果有人尝试cph用朴素的英语向我解释以上输出,或者指向我推荐这样做的参考文献,我仍然非常感谢。哈雷尔博士,非常感谢您到目前为止的帮助!
亚历山大

Answers:


12

首先,请考虑一些事项。首先,您要排除太多缺少数据的观测值,这将导致偏差。考虑多重插补。其次,有一种绘图方法cox.zph这对于评估比例风险很有用。第三,假设协变量效应是线性的。第四,如果所有协变量效应都是线性的(很少见),则训练样本中的事件数量仅够大到足以拟合一个可靠的模型。您的测试样本可能必须要进行400次事件才能产生对预测准确性的可靠评估。尚不清楚您是否有足够的数据将数据分为两部分。重采样验证(100次重复10倍交叉验证,或使用引导程序)是更好的解决方案。两个原始的外部验证(功能rcorr.censval.surv)和重采样内部验证(功能validatecalibrate)在R被实现rms包。案例研究rms2×2


1
哈雷尔博士,非常感谢您的评论。我尝试键入plot(cox.zph(fit[[1]], transform="km", global=TRUE)),但是这样产生了Error in plot.cox.zph(cox.zph(fit[[1]], transform = "km", global = TRUE)) : Spline fit is singular, try a smaller degrees of freedom。我是否错误地调用了此函数?
亚历山大

1
如果结合训练和验证数据,我将进行166项观测值与75个事件。如您所建议,我可以为缺失数据的13个观测值估算变量“ z”的值,从而消除了该问题。我喜欢您建议执行100倍10倍交叉验证的建议。如果您有时间,如果可以提供更多有关如何使用rms软件包执行此操作的具体提示,我将不胜感激。同时,我将继续阅读您的网站。我希望将来能继续学习。不幸的是,我现在在欧洲,有点太远了!
亚历山大

2
对于奇点问题,请做plot(cox.zph(...), df=2)。有关示例,请参阅课程注释中的案例研究rms或安装软件包(也需要Hmisc软件包)并键入以下命令以显示帮助文件:?cph ?validate.cph ?calibrate.cph
Frank Harrell 2012年

2
再次感谢你的帮助!这个周末,我打印了您的课程笔记,并将在本周内阅读它们并完成所有案例研究。
亚历山大

4

基于一个相关示例,R cph函数的输出在J. Fox的这份易于理解的论文中得到了解释。

如果您还没有的话,我强烈建议您阅读本文。


1
您能描述这篇论文如何建议解释cph输出吗?
smillig

2
+1感谢您的参考,欢迎您访问本网站!如果您也能简要概述本文的内容,那将是很棒的,因为我们努力寻求可以独立存在的答案。
晚会

此链接不存在了
马辛·科辛斯基

1
链接socialsciences.mcmaster.ca/jfox/Books/Companion-1E/…目前正在起作用,并且看起来与该答案中引用的论文相同。
dnlbrky
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.