当 Schoenfeld 残差不好时,比例风险回归模型有哪些选择?

机器算法验证 r 模型 cox模型 冒险 舍恩菲尔德残差
2022-01-25 15:12:36

我正在使用 R 中进行 Cox 比例风险回归coxph,其中包含许多变量。Martingale 残差看起来很棒,而 Schoenfeld 残差对于几乎所有变量都很好。有三个变量的 Schoenfeld 残差不是平坦的,并且变量的性质使得它们可以随时间变化是有意义的。

这些是我并不真正感兴趣的变量,因此将它们设为分层就可以了。但是,它们都是连续变量,而不是分类变量。所以我认为地层不是一条可行的路线*。我已经尝试在变量和时间之间建立交互,如此处所述但我们得到了错误:

  In fitter(X, Y, strats, offset, init, control, weights = weights,  :
  Ran out of iterations and did not converge

我正在处理近 1000 个数据点,并且正在处理六个变量,每个变量都有很多因素,所以感觉就像我们正在推动如何对这些数据进行切片和切块的限制。不幸的是,我用更少的包含变量尝试过的所有更简单的模型显然更糟(例如,Schoenfeld 残差对于更多变量来说更脆弱)。

我有哪些选择?由于我不关心这些特别糟糕的变量,我想忽略它们的输出,但我怀疑这不是一个有效的解释!

*一个是连续的,一个是范围超过100的整数,一个是范围为6的整数。也许分箱?

3个回答

最优雅的方法是使用参数生存模型(Gompertz、Weibull、Exponential,...),如果您对基线危险可能是什么样子有所了解的话。

如果您想保留您的 Cox 模型,您可以使用具有时间相关系数的扩展 cox 模型请记住,还有扩展的 cox 模型与时间相关的协变量 - 这些不能解决您的问题!

对于 R,请参见此处:http ://cran.r-project.org/web/packages/survival/vignettes/timedep.pdf

几个想法 -

1) 尝试 Royston-Parmar 建模方法,例如http://journals.plos.org/plosone/article?id=10.1371/journal.pone.0047804和其中的参考资料。我们已经获得了有用的结果。

2) 对连续变量进行中心化和标准化可能在数值上很有用。

3)在许多具有很多水平的因素的模型中,有几个水平基本上没有数据。合并级别以删除这些,但基于良好的实质性标准,可能非常有帮助。

祝你好运!

如果使用与基础时间的交互不起作用,您可以尝试阶跃函数(有关更多信息,请参阅Therneau 的 2016 插图e)。

阶跃函数在特定间隔以特定系数分层。在看到您为有问题的协变量(即plot(cox.zph(model.coxph)))绘制的 Schoenfeld 残差后,您需要目视检查线条变化角度的位置。尝试找出 beta 看起来明显不同的一两个点。假设这发生在时间 10 和 20。所以我们将使用包创建数据survSplit(),该survival包将为上述时间的特定数据模型分组创建数据框:

step.data <- survSplit(Surv(t1, t2, event) ~ 
                      x1 + x2,
                      data = data, cut = c(10, 20), episode = "tgroup")

然后使用函数作为与有问题的变量的交互来运行cox.ph模型 strata(与与时间的交互一样,不要为时间或地层添加主效应):

> model.coxph2 <- coxph(Surv(t1, t2, event) ~ 
                          x1 + x2:strata(tgroup), data = step.data)

这应该会有所帮助。