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"。)
下午好,
我可以 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"。)