Каково значение по умолчанию для функции преобразования времени в команде 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).

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


person StatMan    schedule 28.07.2016    source источник


Ответы (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 раздела «Использование зависящих от времени ковариат и зависящих от времени коэффициентов в модели Кокса» из текущего пакета выживания. Справочная страница Index ссылается на Виньетки.

person IRTFM    schedule 28.07.2016
comment
в его виньетке (cran.r-project.org/web/ packages / survival / vignettes / timedep.pdf, стр.19), Терри показывает разницу между неправильным преобразованием времени (например, с использованием I()) и правильным преобразованием времени (например, с использованием параметра tt). Просмотр исходного кода coxph (github.com/cran/survival/blob /master/R/coxph.R), я могу увидеть с математической точки зрения, что происходит с tt. Но можете ли вы уточнить концептуальную причину, по которой tt требуется для истинного преобразования времени? Спасибо. - person NickBraunagel; 06.02.2017
comment
Думаю, ваш комментарий / вопрос будет более подходящим для CrossValidated.com. Я не думаю, что это действительно вопрос кодирования. - person IRTFM; 06.02.2017
comment
Попался. Перенесу - person NickBraunagel; 06.02.2017