1

下午好,

我可以发布可重现的代码,如果每个人都同意有问题的话,我肯定会发布,但现在我认为我的问题很简单,有人会为我指出正确的道路。

我正在使用这样的数据集:

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 可以给我的不同类型的预测(或者至少我认为我可以)。让我们使用 type = "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 是从哪里来的?我怀疑这是某种规模的情况,但在网上找不到答案。

我的最终目标是预测类型 =“预期”给出的 h(t),但我不太喜欢使用它,因为它使用了我不完全理解的 -0.01208854 值。

非常感谢

4

1 回答 1

2

详细信息部分?predict.coxph内容如下:

Cox 模型是一种相对风险模型;“线性预测器”、“风险”和“术语”类型的预测都与它们来自的样本相关。默认情况下,每一个的参考值是层内的平均协变量。

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

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

(使用这种逻辑和一些算术,我们可以从您的结果中得出结论,在您的变量的 9000 个观察值中,您有 8849 个“真” created_as_free_user。)

于 2017-03-16T20:18:14.443 回答