6

我有一个带有 5 个时间相关变量和 2 个时间无关变量的 coxph 模型。我想使用 cox.zph 测试比例风险假设以及鞅和偏差残差。我的问题是,这个函数如何处理与时间相关的协变量?

在阅读Grant et al.,2014之后,我不确定这是否是推荐的拟合优度检验来评估时变协变量的 PH 假设。

模型:

teste<-coxph(Surv(tempo1,tempo2,status)~sexo+CODE_06+factor(clima)+TP_media7
             +ndvi+peso+epoca,data=newftable,na.action=na.fail)

> cox.zph(teste)
                         rho    chisq      p
sexoM                 0.0844  0.32363 0.5694
CODE_06Regadio        0.1531  0.66865 0.4135
CODE_06Sequeiro       0.2278  1.65735 0.1980
factor(clima)8       -0.1823  1.16522 0.2804
factor(clima)9        0.1051  0.24456 0.6209
factor(clima)15      -0.0193  0.00945 0.9226
TP_media7(12,22]      0.1689  0.75604 0.3846
TP_media7(22,32]      0.1797  1.03731 0.3084
TP_media7(32,41]      0.1060  0.34036 0.5596
ndvi(3e+03,4e+03]    -0.1595  1.00006 0.3173
ndvi(4e+03,5e+03]     0.0421  0.05233 0.8191
ndvi(5e+03,6e+03]     0.1750  0.98816 0.3202
ndvi(6e+03,8.05e+03] -0.0311  0.02880 0.8653
peso[850,1005]        0.2534  3.34964 0.0672
epocamid_inv_rep      0.0193  0.01219 0.9121
epocamid_pos_inv     -0.2193  0.93355 0.3339
epocamid_rep_pos      0.0231  0.01341 0.9078
epocapos_repr         0.2073  1.09893 0.2945
epocarepr             0.0766  0.12905 0.7194
GLOBAL                    NA 19.79229 0.4072
4

2 回答 2

7

据我了解,这cox.zph是一个关于协变量是否应该独立于时间进入模型的测试。如果您已经知道您的预测器是时间相关的,那么这似乎不是合适的方法。我不知道解决这个问题的简单方法,这样的问题可能会在Cross Validated上找到更容易接受的听众。

对于可重现的示例,我们可以使用Therneau中的示例:

library(survival)
veteran$celltype <- relevel(veteran$celltype, ref="adeno")
f1 <- coxph(Surv(time, status) ~
            trt + celltype + karno + diagtime + age + prior,
            data=veteran)
(z1 <- cox.zph(f1, transform="log"))

                       rho   chisq        p
trt               -0.01561  0.0400 0.841486
celltypesquamous  -0.16278  3.8950 0.048431
celltypesmallcell -0.11908  2.2199 0.136238
celltypelarge      0.00942  0.0121 0.912551
karno              0.29329 11.8848 0.000566
diagtime           0.11317  1.6951 0.192930
age                0.20984  6.5917 0.010245
prior             -0.16683  3.9873 0.045844
GLOBAL                  NA 27.5319 0.000572

rho是缩放的 Shoenfeld 残差与g(t)之间的 Pearson 相关性,其中 g 是时间的函数(默认为 Kaplan-Meier 标度;这里我们使用log,如下图x轴的标度所示)。如果变量是时间不变的,那么绘制线的斜率应该为零。这基本上就是chisq测试的内容。

更新@Didi Ingabire - 根据您的评论:

因此, p值表明:

  • Schoenfeld 残差随时间变化
  • 有证据表明变量/预测变量可能与时间有关
  • coxph该变量可能违反比例风险假设(在生成模型时做出)

您可以像这样直观地看到这一点:

for (i in 1:(nrow(z1$table)-1)){
    plot(z1[i], main="Scaled Schoenfeld residuals by time with smooth spline
If <0 indicates protective effect")
    graphics::abline(a=0, b=0, col="black")
}

这给出了例如:

在此处输入图像描述

更新@JMarcelino这就是说这cox.zph是对模型最终形式的测试,以确保残差随着时间的推移相对恒定。

如果其中一个变量已经是时间的函数(当它进入模型时),这不会影响测试。事实上,如果时间的影响被正确建模,它应该更有可能产生一条具有高p值的平线。

此外,测试比例风险意味着测试风险比是否随时间保持不变?. 变量是否与时间相关(当它进入模型时)并不重要。正在测试的是模型的最终形式。

例如,karno我们可以输入一个与它和时间相关的变量,而不是像这样:

f2 <- coxph(Surv(time, status) ~
            trt + celltype + log(karno * time) + diagtime + age + prior,
            data=veteran)
(z2 <- cox.zph(f2, transform="log"))

                      rho  chisq     p
trt                0.0947 1.4639 0.226
celltypesquamous  -0.0819 1.1085 0.292
celltypesmallcell -0.0897 1.3229 0.250
celltypelarge      0.0247 0.0968 0.756
log(karno * time) -0.0836 0.6347 0.426
diagtime           0.0463 0.2723 0.602
age                0.0532 0.3493 0.554
prior             -0.0542 0.3802 0.538
GLOBAL                 NA 7.6465 0.469

这为我们提供了一个更适合比例风险假设的模型。但是对系数的解释log(karno * time)不是特别直观,不太可能有很大的实用价值。

于 2014-07-10T05:19:55.887 回答
2

区分时间相关变量和不符合 PH 假设的变量很重要。

时间相关变量是随时间变化的变量。这可能是血压;它会在不同的场合有所不同。然而,性别(性别)在不同场合不会有所不同。

然后是内部和外部时间相关变量之间的区别:

内部时间相关变量:是因个体内部变化(例如血压)而变化的变量。

外部时间相关变量:改变个体所经历危害的环境/外部变化(例如,随着工业在城市中激增,空气污染随着时间的推移而增加,因此人群中的危害会因心肌梗塞等疾病而增加)。

无论变量的性质是固定的还是时间相关的,它都可能违反 PH 假设。我可以提供一些例子,但接受任何变量都可能违反 PH 假设这一事实可能更容易。即使您尝试适应扩展 Cox 模型中的变化(例如,在计数过程格式中使用每个个体的多个观察值),它也可以。

解决方案:您可以将任何预测变量输入 Cox 模型,并通过 Thernau 生存包的 cox.zph 函数检查它是否满足 PH。SAS 中的相应语句将是“评估 ph / 重新采样”语句。如果变量违反 PH,(可能)最简单的解决方法是在该变量和您的时间变量之间引入交互。

示例如下。这是考克斯公式:

Survival = age + sex + blood_pressure

假设血压违反了 PH --> 引入以下术语:

Survival = age + sex + blood_pressure*survival_time_variable

这应该可以解决它,但您无法解释血压的主要影响,因为该变量现在取决于时间。

另一种解决方案是对模型进行分层,但这不适用于连续变量和分类变量,一旦分层,变量就不会作为协变量包含在结果模型中(即您不会得到风险比)。

于 2014-08-19T17:32:46.503 回答