Может кто-нибудь объяснить мне мою модель Кокса на простом английском?
Я использовал следующую модель регрессии Кокса для всех моих данных, используя cph
функцию. Мои данные сохраняются в объекте под названием Data
. Переменные w
, x
и y
непрерывны; z
это фактор двух уровней. Время измеряется месяцами. У некоторых из моих пациентов отсутствуют данные для переменной z
( примечание : ниже я должным образом отметил предположение д-ра Харрелла, что я вменяю эти значения, чтобы избежать смещения моей модели, и сделаю это в будущем).
> fit <- cph(formula = Surv(time, event) ~ w + x + y + z, data = Data, x = T, y = T, surv = T, time.inc = 12)
Cox Proportional Hazards Model
Frequencies of Missing Values Due to Each Variable
Surv(time, event) w x y z
0 0 0 0 14
Model Tests Discrimination
Indexes
Obs 152 LR chi2 8.33 R2 0.054
Events 64 d.f. 4 g 0.437
Center 0.7261 Pr(> chi2) 0.0803 gr 1.548
Score chi2 8.07
Pr(> chi2) 0.0891
Coef S.E. Wald Z Pr(>|Z|)
w -0.0133 0.0503 -0.26 0.7914
x -0.0388 0.0351 -1.11 0.2679
y -0.0363 0.0491 -0.74 0.4600
z=1 0.3208 0.2540 1.26 0.2067
Я также попытался проверить предположение о пропорциональных опасностях с помощью cox.zph
команды ниже, но не знаю, как интерпретировать ее результаты. Обстановка plot()
команды дает сообщение об ошибке.
cox.zph(fit, transform="km", global=TRUE)
rho chisq p
w -0.1125 1.312 0.2520
x 0.0402 0.179 0.6725
y 0.2349 4.527 0.0334
z=1 0.0906 0.512 0.4742
GLOBAL NA 5.558 0.2347
Первая проблема
- Может ли кто-нибудь объяснить мне результаты вышеприведенного вывода на простом английском языке? У меня есть медицинское образование и нет официальной подготовки по статистике.
Вторая проблема
По предложению д-ра Харрелла, я хотел бы провести внутреннюю проверку своей модели, выполнив 100 итераций 10-кратной перекрестной проверки с использованием
rms
пакета (насколько я понимаю, это повлечет за собой построение100 * 10 = 1000
различных моделей, а затем попросит их предсказать времена выживания пациентов, которых они никогда не видели).Я попытался использовать
validate
функцию, как показано на рисунке.> v1 <- validate(fit, method="crossvalidation", B = 10, dxy=T) > v1 index.orig training test optimism index.corrected n Dxy -0.2542 -0.2578 -0.1356 -0.1223 -0.1320 10 R2 0.0543 0.0565 0.1372 -0.0806 0.1350 10 Slope 1.0000 1.0000 0.9107 0.0893 0.9107 10 D 0.0122 0.0128 0.0404 -0.0276 0.0397 10 U -0.0033 -0.0038 0.0873 -0.0911 0.0878 10 Q 0.0155 0.0166 -0.0470 0.0636 -0.0481 10 g 0.4369 0.4424 0.6754 -0.2331 0.6700 10
Как вы выполняете 100x повторную выборку? Я думаю, что мой приведенный выше код выполняет перекрестную проверку только один раз.
Затем я хотел узнать, насколько хороша моя модель при прогнозировании. Я попробовал следующее:
> c_index <- abs(v1[1,5])/2 + 0.5 > c_index [1] 0.565984
Значит ли это, что моя модель лишь немного лучше, чем подбрасывание монеты?
Третья проблема
Доктор Харрелл указывает, что я предположил линейность ковариатных эффектов, и что число событий в моей выборке едва достаточно велико, чтобы соответствовать надежной модели, если все ковариатные эффекты оказываются линейными.
- Означает ли это, что я должен включить какой-то термин взаимодействия в мою модель? Если да, то какой совет что ставить?
источник
cph
мне вышеприведенный вывод на простом английском языке или указал на ссылку, которая бы это сделала. Доктор Харрелл, большое спасибо за вашу помощь!Ответы:
Для начала рассмотрим несколько вещей. Во-первых, вы исключаете слишком много наблюдений с отсутствующими данными, и это приведет к смещению. Рассмотрим множественное вменение. Во-вторых, есть метод сюжета для2 × 2
cox.zph
что полезно при оценке пропорциональных рисков. В-третьих, вы предположили линейность ковариатных эффектов. В-четвертых, количество событий в вашей тренировочной выборке едва достаточно велико, чтобы соответствовать надежной модели, если все ковариатные эффекты оказываются линейными (что редко). И ваш тестовый образец должен иметь около 400 событий, прежде чем он даст надежную оценку точности прогноза. Не ясно, что у вас было достаточно данных, чтобы разделить данные на две части. Проверка повторной выборки (100 повторов 10-кратной перекрестной проверки или использование начальной загрузки) является лучшим решением. Оба ваши оригинальные внешние проверки (функцияrcorr.cens
иval.surv
) и ReSampling внутренней проверки (функцииvalidate
,calibrate
) реализуются в Rrms
пакете. Тематические исследования дляrms
источник
plot(cox.zph(fit[[1]], transform="km", global=TRUE))
, однако, это далоError in plot.cox.zph(cox.zph(fit[[1]], transform = "km", global = TRUE)) : Spline fit is singular, try a smaller degrees of freedom
. Я неправильно вызываю эту функцию?plot(cox.zph(...), df=2)
. Посмотрите примеры использования в примечаниях к курсу дляrms
примеров или установите пакет (который также нуждается вHmisc
пакете) и введите эти команды, чтобы вызвать файлы справки:?cph
?validate.cph
?calibrate.cph
Вывод функции R cph, основанный на соответствующем примере, объясняется в этой простой для понимания статье Дж. Фокса.
Я настоятельно рекомендую прочитать эту статью, если вы еще этого не сделали.
источник
cph
результаты?