Какое значение по умолчанию для функции преобразования времени в команде coxph?

Краткое введение:

Модель пропорциональных рисков Кокса (PH) может быть оценена с coxph функция survival пакет. Очевидное требование для получения разумных результатов от модели этого типа состоит в том, что опасности пропорциональны, то есть они постоянны во времени. Если это не относится к определенной переменной, ее можно решить, изменяя коэффициент времени этой переменной. (Теперь это технически расширенная модель Кокса.) Это делается путем добавления 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).

Любая помощь приветствуется.

1 ответ

Решение

Просматривая код для 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

Мне интересно, было ли это намеренно. Я подозреваю, что это код, оставленный во время сеанса разработки. Я подозреваю, что Терно намеревается, что отказ от 'tt-функции должен вызвать хотя бы предупреждение, но, вероятно, предпочел бы ошибку. Так что это было предположение, и я обнаружил, что ошибся, просматривая виньетки и обнаружив, что это предназначено: "Это основано на том факте, что входные аргументы для tt() упорядочены по номеру события или набору риска. Эта функция используется по умолчанию, если в вызове coxph нет аргумента tt, но в формуле модели есть термины tt (это позволило мне отказаться от функции Survobrien)." см. стр. 23 "Использование зависимых от времени ковариат и зависящих от времени коэффициентов в модели Кокса" из текущей справочной страницы Индекса пакета поддержки, ссылающейся на виньетки.

Другие вопросы по тегам