Coxph 预测与系数不匹配

Coxph predictions don't match the coefficients

下午好,

我可以 post 重现代码,如果每个人都认为有问题,我肯定会重现,但现在我认为我的问题很简单,有人会给我指明正确的道路。

我正在处理这样的数据集:

created_as_free_user     t     c
                 <fctr> <int> <int>
1                  true    36     0
2                  true    36     0
3                  true     0     1
4                  true    28     0
5                  true     9     0
6                  true     0     1
7                  true    13     0
8                  true    19     0
9                  true     9     0
10                 true    16     0

我拟合了这样的 Cox 回归模型:

fit_train = coxph(Surv(time = t,event = c) ~ created_as_free_user ,data = teste)
summary(fit_train)

并收到:

Call:
coxph(formula = Surv(time = t, event = c) ~ created_as_free_user, 
    data = teste)

  n= 9000, number of events= 1233 

                            coef exp(coef) se(coef)      z Pr(>|z|)    
created_as_free_usertrue -0.7205    0.4865   0.1628 -4.426 9.59e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

                         exp(coef) exp(-coef) lower .95 upper .95
created_as_free_usertrue    0.4865      2.055    0.3536    0.6693

Concordance= 0.511  (se = 0.002 )
Rsquare= 0.002   (max possible= 0.908 )
Likelihood ratio test= 15.81  on 1 df,   p=7e-05
Wald test            = 19.59  on 1 df,   p=9.589e-06
Score (logrank) test = 20.45  on 1 df,   p=6.109e-06

到目前为止一切顺利。 下一步:预测新数据的结果。 我了解 predict.coxph 可以给我的不同类型的预测(或者至少我认为我可以)。让我们使用类型 = "lp":

head(predict(fit_train,validacao,type = "lp"),n=20)

并得到:

     1           2           3           4           5           6           7           8           9          10 
-0.01208854 -0.01208854 -0.01208854 -0.01208854 -0.01208854 -0.01208854 -0.01208854 -0.01208854 -0.01208854 -0.01208854 
         11          12          13          14          15          16          17          18          19          20 
-0.01208854 -0.01208854  0.70842049 -0.01208854 -0.01208854 -0.01208854 -0.01208854 -0.01208854 -0.01208854 -0.01208854 

好的。但是当我查看我试图估计的数据时:

# A tibble: 9,000 × 3
   created_as_free_user     t     c
                 <fctr> <int> <int>
1                  true    20     0
2                  true    12     0
3                  true     0     1
4                  true    10     0
5                  true    51     0
6                  true    36     0
7                  true    44     0
8                  true     0     1
9                  true    27     0
10                 true     6     0
# ... with 8,990 more rows

这让我很困惑....

type = "lp" 不是应该给你线性预测吗? 对于我试图估计的上述数据,由于 created_as_free_user 变量等于 true,我是否错误地期望 type = "lp" 预测准确地为 -0.7205(上述模型的系数) ? -0.01208854 从哪里来?我怀疑这是某种规模的情况,但无法在网上找到答案。

我的最终 objective 是由预测类型 = "expected" 给出的 h(t),但我不太习惯使用它,因为它使用了我的这个 -0.01208854 值不太明白。

非常感谢

?predict.coxph 中的详细信息部分显示:

The Cox model is a relative risk model; predictions of type "linear predictor", "risk", and "terms" are all relative to the sample from which they came. By default, the reference value for each of these is the mean covariate within strata.

为了说明这意味着什么,我们可以看一个简单的例子。一些假数据:

test1 <- list(time=c(4,3,1,1,1), 
             status=c(1,1,1,0,0), 
             x=c(0,2,1,1,0)) 

我们拟合模型并查看预测:

fit <- coxph(Surv(time, status) ~ x, test1) 
predict(fit, type = "lp")
# [1] -0.6976630  1.0464945  0.1744157  0.1744157 -0.6976630

预测结果相同:

(test1$x - mean(test1$x)) * coef(fit)
# [1] -0.6976630  1.0464945  0.1744157  0.1744157 -0.6976630

(使用此逻辑和一些算术,我们可以从您的结果中得出您的 created_as_free_user 变量的 9000 个观测值中有 8849 个 "trues"。)