Прогнозы Коксфа не соответствуют коэффициентам

Добрый день,

Я мог бы опубликовать воспроизводимый код и, конечно же, сделаю это, если все согласятся, что что-то не так, но сейчас я думаю, что мой вопрос довольно прост, и кто-то укажет мне правильный путь.

Я работаю с таким набором данных:

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

Я подогнал модель регрессии Кокса следующим образом:

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

Меня это смущает....

Тип = "lp" не должен давать вам линейные предсказания? Для этих данных выше, которые я пытаюсь оценить, поскольку переменная created_as_free_user равна true, я ошибаюсь, ожидая, что прогноз type = "lp" будет точно -0,7205 (коэффициент модели выше)? Откуда взялся -0.01208854? Я подозреваю, что это какая-то масштабная ситуация, но не смог найти ответ в Интернете.

Моя конечная цель - это h(t), который задается типом прогнозирования = "ожидаемый", но мне не очень удобно его использовать, потому что он использует это значение -0,01208854, которое я не совсем понимаю.

Большое спасибо


person Rafael Meirelles    schedule 16.03.2017    source источник


Ответы (1)


Раздел «Подробности» в ?predict.coxph гласит:

Модель Кокса — это модель относительного риска; предсказания типа «линейный предиктор», «риск» и «термины» относятся к выборке, из которой они получены. По умолчанию эталонным значением для каждого из них является средняя ковариата в стратах.

Чтобы проиллюстрировать, что это значит, мы можем рассмотреть простой пример. Некоторые фейковые данные:

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

(Используя эту логику и некоторую арифметику, мы можем вывести из ваших результатов, что у вас есть 8849 «истин» из 9000 наблюдений для вашей переменной created_as_free_user.)

person Weihuang Wong    schedule 16.03.2017