3

简短介绍:

coxph可以使用包的功能来估计 Cox 比例危害 (PH) 模型survival。从这种类型的模型中获得合理结果的一个明显要求是风险是成比例的,即它们随着时间的推移是恒定的。如果某个变量不是这种情况,可以通过使该变量的系数随时间变化来解决。(现在它在技术上是一个扩展的 Cox 模型。)这是通过tt()向该变量添加 并随着时间的推移指定一个函数来完成的(参见vignette("timedep", package = "survival")第 19 页+)。

问题:

tt()如果在没有指定函数的情况下使用哪个函数?

这是一个例子:

library(survival)
data(lung)
cox_model <- coxph(Surv(time, status) ~ age + sex + ph.karno, data = lung)
cox_model_ph <- cox.zph(cox_model) 
#              rho    chisq       p
# age      0.00701  0.00871 0.92566
# sex      0.12249  2.42336 0.11954
# ph.karno 0.23135  8.24167 0.00409
# GLOBAL        NA 11.54750 0.00911

我们看到这ph.karno违反了 PH 假设(小 p 值),所以添加tt()

cox_model_tt <- coxph(Surv(time, status) ~ age + sex + tt(ph.karno), data = lung)
cox_model_tt_ph <- cox.zph(cox_model_tt)
#                   rho  chisq      p
# age          -0.00907 0.0142 0.9052
# sex           0.12844 2.7270 0.0987
# tt(ph.karno)  0.11643 2.3846 0.1225
# GLOBAL             NA 5.0220 0.1702

现在满足 PH 假设,但我不知道该tt()函数实际做了什么。我尝试了一些常用的功能,例如tt = function(x, t, ...) x*t, tt = function(x, t, ...) x + t, tt = function(x, t, ...) x*log(t)。但都给出了不同的结果(并且无法修复 PH 违规)。

任何帮助表示赞赏。

4

1 回答 1

2

浏览代码,coxph我想我是否找到了它。您没有为“tt”参数提供任何价值,所以我认为这会被执行:

if (is.null(tt)) {
            tt <- function(x, time, riskset, weights) {
                obrien <- function(x) {
                  r <- rank(x)
                  (r - 0.5)/(0.5 + length(r) - r)
                }
                unlist(tapply(x, riskset, obrien))
            }

这是一个实验确认:

> cox_model_OB <- coxph(Surv(time, status) ~ age + sex + tt(ph.karno), data = lung, tt=  function(x, time, riskset, weights) {
+                 obrien <- function(x) {
+                   r <- rank(x)
+                   (r - 0.5)/(0.5 + length(r) - r)
+                 }
+                 unlist(tapply(x, riskset, obrien))
+             }
+ )
> ( cox_model_tt_ph <- cox.zph(cox_model_tt) )
                  rho  chisq      p
age          -0.00907 0.0142 0.9052
sex           0.12844 2.7270 0.0987
tt(ph.karno)  0.11643 2.3846 0.1225
GLOBAL             NA 5.0220 0.1702

我想知道这是不是故意的。我怀疑它是在开发会话期间留下的代码。我怀疑 Therneau 打算不提供“tt”功能应该至少引发警告,但可能更愿意出现错误。 所以这是一个猜测,我通过搜索小插图发现我错了,发现它是有意的:“这依赖于 tt() 的输入参数按事件编号或风险集排序的事实。这个函数如果 coxph 调用中不存在 tt 参数,则将其用作默认值,但模型公式中有 tt 项。(这样做允许我贬低 survobrien 函数)。参考:“在 Cox 模型中使用时间相关协变量和时间相关系数”的第 23 页

于 2016-07-28T17:34:46.310 回答