Как cox.zph работает с зависящими от времени ковариатами?
У меня есть модель Coxph с 5 независимыми от времени и 2 независимыми от времени переменными. Я хочу проверить предположение о пропорциональной опасности и, кроме остатков мартингейла и отклонения, использовать cox.zph. Мой вопрос: как эта функция работает с зависящими от времени ковариатами?
После прочтения Grant et al., 2014, я не уверен, является ли это рекомендуемым тестом на пригодность для оценки предположения PH для изменяющихся во времени ковариат.
Модель:
teste<-coxph(Surv(tempo1,tempo2,status)~sexo+CODE_06+factor(clima)+TP_media7
+ndvi+peso+epoca,data=newftable,na.action=na.fail)
> cox.zph(teste)
rho chisq p
sexoM 0.0844 0.32363 0.5694
CODE_06Regadio 0.1531 0.66865 0.4135
CODE_06Sequeiro 0.2278 1.65735 0.1980
factor(clima)8 -0.1823 1.16522 0.2804
factor(clima)9 0.1051 0.24456 0.6209
factor(clima)15 -0.0193 0.00945 0.9226
TP_media7(12,22] 0.1689 0.75604 0.3846
TP_media7(22,32] 0.1797 1.03731 0.3084
TP_media7(32,41] 0.1060 0.34036 0.5596
ndvi(3e+03,4e+03] -0.1595 1.00006 0.3173
ndvi(4e+03,5e+03] 0.0421 0.05233 0.8191
ndvi(5e+03,6e+03] 0.1750 0.98816 0.3202
ndvi(6e+03,8.05e+03] -0.0311 0.02880 0.8653
peso[850,1005] 0.2534 3.34964 0.0672
epocamid_inv_rep 0.0193 0.01219 0.9121
epocamid_pos_inv -0.2193 0.93355 0.3339
epocamid_rep_pos 0.0231 0.01341 0.9078
epocapos_repr 0.2073 1.09893 0.2945
epocarepr 0.0766 0.12905 0.7194
GLOBAL NA 19.79229 0.4072
2 ответа
Как я понимаю cox.zph
является проверкой того, должен ли ковариат входить в модель независимо от времени. Если вы уже знаете, что ваш предиктор зависит от времени, то это не тот подход. Я не знаю, как легко это сделать, и такой вопрос может найти более восприимчивую аудиторию на Cross Validated.
Для воспроизводимого примера мы можем использовать это из Therneau:
library(survival)
veteran$celltype <- relevel(veteran$celltype, ref="adeno")
f1 <- coxph(Surv(time, status) ~
trt + celltype + karno + diagtime + age + prior,
data=veteran)
(z1 <- cox.zph(f1, transform="log"))
rho chisq p
trt -0.01561 0.0400 0.841486
celltypesquamous -0.16278 3.8950 0.048431
celltypesmallcell -0.11908 2.2199 0.136238
celltypelarge 0.00942 0.0121 0.912551
karno 0.29329 11.8848 0.000566
diagtime 0.11317 1.6951 0.192930
age 0.20984 6.5917 0.010245
prior -0.16683 3.9873 0.045844
GLOBAL NA 27.5319 0.000572
rho - корреляция Пирсона между масштабированными остатками Шенфельда и g(t), где g - функция времени (по умолчанию используется шкала Каплана-Мейера; здесь мы используем log
, как вы можете видеть в масштабе оси х на графике ниже). Если переменная не зависит от времени, то наклон построенной линии должен быть нулевым. Это по сути то, что тестирует Chisq.
Обновление @Didi Ingabire - в свете ваших комментариев:
Таким образом, низкое p- значение указывает:
- остатки Шенфельда не постоянны во времени
- есть доказательства того, что переменная / предиктор может зависеть от времени
- предположение о пропорциональных опасностях (сделано при создании
coxph
модель) может быть нарушена этой переменной
Вы можете увидеть это визуально так:
for (i in 1:(nrow(z1$table)-1)){
plot(z1[i], main="Scaled Schoenfeld residuals by time with smooth spline
If <0 indicates protective effect")
graphics::abline(a=0, b=0, col="black")
}
который дает, например:
Обновление @JMarcelino Это означает, что cox.zph
является тестом окончательной формы модели, чтобы убедиться, что остатки относительно постоянны во времени.
Если одна из переменных уже является функцией времени (когда она входит в модель), это не повлияет на тест. Фактически, с большей вероятностью получится плоская линия с высоким p- значением, если влияние времени смоделировано правильно.
Кроме того, тестирование пропорциональных опасностей означает, что коэффициент риска постоянен во времени?, Независимо от того, зависит ли переменная от времени (когда она входит в модель), не имеет значения. Что проверяется, так это окончательная форма модели.
Например, вместо karno
мы можем ввести переменную, которая связана как с ней, так и со временем следующим образом:
f2 <- coxph(Surv(time, status) ~
trt + celltype + log(karno * time) + diagtime + age + prior,
data=veteran)
(z2 <- cox.zph(f2, transform="log"))
rho chisq p
trt 0.0947 1.4639 0.226
celltypesquamous -0.0819 1.1085 0.292
celltypesmallcell -0.0897 1.3229 0.250
celltypelarge 0.0247 0.0968 0.756
log(karno * time) -0.0836 0.6347 0.426
diagtime 0.0463 0.2723 0.602
age 0.0532 0.3493 0.554
prior -0.0542 0.3802 0.538
GLOBAL NA 7.6465 0.469
Это дает нам модель, которая лучше соответствует предположению о пропорциональной опасности. Однако интерпретация коэффициента log(karno * time)
не особенно интуитивно понятен и вряд ли будет иметь большое практическое значение.
Важно различать переменную, зависящую от времени, и переменную, которая не соответствует предположению PH.
Зависящая от времени переменная - это переменная, изменяющаяся со временем. Это может быть кровяное давление; это будет варьироваться в разных случаях. Пол (пол), однако, не будет отличаться в разных случаях.
Тогда существует различие между внутренними и внешними переменными, зависящими от времени:
• Внутренние переменные, зависящие от времени: переменные, которые варьируются из-за изменений в человеке (например, артериальное давление)
• Внешние переменные, зависящие от времени: экологические / внешние изменения, которые изменяют опасность, с которой сталкивается человек (например, по мере того, как в городе разрастается промышленность, со временем загрязнение воздуха увеличивается, и поэтому опасность для населения увеличивается при таких условиях, как инфаркт миокарда).
Независимо от природы переменной, фиксированной или зависящей от времени, это может нарушать допущение PH. Я мог бы привести несколько примеров, но, вероятно, легче принять тот факт, что любая переменная может нарушать предположение PH. Это возможно даже в том случае, если вы пытаетесь учесть изменения в расширенной модели Кокса (например, используя несколько наблюдений на человека в формате процесса подсчета).
Решение: вы можете ввести любой предиктор в модель Кокса и проверить, соответствует ли он PH с помощью функции cox.zph пакета выживания Тернау. Соответствующим утверждением в SAS будет утверждение "оценить ph / resample". Если переменная нарушает PH, (возможно) самый простой способ решить эту проблему - ввести взаимодействие между этой переменной и вашей переменной времени.
Пример следует. Это формула Кокса:
Survival = age + sex + blood_pressure
Допустим, артериальное давление нарушает PH -> Введите следующий термин:
Survival = age + sex + blood_pressure*survival_time_variable
Это должно решить эту проблему, но вы не можете интерпретировать основной эффект артериального давления, потому что эта переменная теперь зависит от времени.
Другим решением является стратификация вашей модели, но это не подходит для непрерывной переменной и для категориальных переменных, после стратификации переменная не включается в качестве ковариации в результирующую модель (т. Е. Вы не получите коэффициент риска).