Интерпретация и проверка модели регрессии пропорциональных рисков Кокса с использованием R на простом английском языке


13

Может кто-нибудь объяснить мне мою модель Кокса на простом английском?

Я использовал следующую модель регрессии Кокса для всех моих данных, используя 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

    Значит ли это, что моя модель лишь немного лучше, чем подбрасывание монеты?

Третья проблема

Доктор Харрелл указывает, что я предположил линейность ковариатных эффектов, и что число событий в моей выборке едва достаточно велико, чтобы соответствовать надежной модели, если все ковариатные эффекты оказываются линейными.

  • Означает ли это, что я должен включить какой-то термин взаимодействия в мою модель? Если да, то какой совет что ставить?

2
Я внес несколько важных изменений в свой первоначальный вопрос, описанный выше, примерно через три часа после того, как я его первоначально задал. Я пытался следовать очень полезному совету доктора Харрелла. Я все равно был бы очень признателен, если бы кто-нибудь попытался объяснить cphмне вышеприведенный вывод на простом английском языке или указал на ссылку, которая бы это сделала. Доктор Харрелл, большое спасибо за вашу помощь!
— Александр

Ответы:


12

Для начала рассмотрим несколько вещей. Во-первых, вы исключаете слишком много наблюдений с отсутствующими данными, и это приведет к смещению. Рассмотрим множественное вменение. Во-вторых, есть метод сюжета дляcox.zphчто полезно при оценке пропорциональных рисков. В-третьих, вы предположили линейность ковариатных эффектов. В-четвертых, количество событий в вашей тренировочной выборке едва достаточно велико, чтобы соответствовать надежной модели, если все ковариатные эффекты оказываются линейными (что редко). И ваш тестовый образец должен иметь около 400 событий, прежде чем он даст надежную оценку точности прогноза. Не ясно, что у вас было достаточно данных, чтобы разделить данные на две части. Проверка повторной выборки (100 повторов 10-кратной перекрестной проверки или использование начальной загрузки) является лучшим решением. Оба ваши оригинальные внешние проверки (функция rcorr.censи val.surv) и ReSampling внутренней проверки (функции validate, calibrate) реализуются в R rmsпакете. Тематические исследования дляrms2×2


1
Доктор Харрелл, большое спасибо за ваши комментарии. Я пытался печатать 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. Я неправильно вызываю эту функцию?
— Александр

1
Если я объединю свои данные обучения и проверки, у меня будет 166 наблюдений с 75 событиями. Как вы предложили, я могу вменять значения моей переменной "z" для моих 13 наблюдений, в которых отсутствуют эти данные, что устраняет эту проблему. Мне нравится ваше предложение выполнить 100-кратную перекрестную проверку. Если у вас есть время, я был бы очень признателен, если бы вы могли предложить более конкретный совет о том, как использовать пакеты rms для этого. А пока я продолжу читать ваш сайт. Я хотел бы пройти ваш курс в будущем. К сожалению, я сейчас в Европе, слишком далеко!
— Александр

2
Для проблемы сингулярности сделайте plot(cox.zph(...), df=2). Посмотрите примеры использования в примечаниях к курсу для rmsпримеров или установите пакет (который также нуждается в Hmiscпакете) и введите эти команды, чтобы вызвать файлы справки:?cph ?validate.cph ?calibrate.cph
— Фрэнк Харрелл

2
Еще раз спасибо за помощь! В эти выходные я распечатал ваши заметки о курсе и проведу на этой неделе их чтение и проработку всех тематических исследований.
— Александр

4

Вывод функции R cph, основанный на соответствующем примере, объясняется в этой простой для понимания статье Дж. Фокса.

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


1
Можете ли вы описать, как газета предлагает интерпретировать cphрезультаты?
— Смиллиг

2
+1 Спасибо за ссылку и добро пожаловать на этот сайт! Было бы замечательно, если бы вы также смогли дать краткий обзор содержания статьи, поскольку мы стремимся найти ответы, которые могли бы дать свои ответы.
— Гала

Этой ссылки больше нет
— Marcin Kosiński

1
Ссылка socialsciences.mcmaster.ca/jfox/Books/Companion-1E/… в настоящее время работает и выглядит так же, как ссылка в этом ответе.
— dnlbrky
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.