Інтерпретація та валідація моделі регресії коксових пропорційних небезпек за допомогою R простою англійською мовою


14

Чи може хтось пояснити мені свою модель Кокса простою англійською мовою?

Наступну модель регресії Кокса я прилаштував до всіх своїх даних за допомогою 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
    

    Як ви виконуєте 100-разове перекомпонування? Я думаю, що мій вище код виконує перехресну перевірку лише один раз.

  • Тоді мені хотілося дізнатися, наскільки хороша моя модель в прогнозі. Я спробував таке:

    > c_index <- abs(v1[1,5])/2 + 0.5
    > c_index
    [1] 0.565984
    

    Чи означає це, що моя модель лише дуже трохи краща, ніж гортати монету?

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

Доктор Харрелл зазначає, що я припускав лінійність ефектів коваріату, і що кількість подій у моїй вибірці ледь достатньо велика, щоб відповідати надійній моделі, якщо всі коваріатні ефекти будуть лінійними.

  • Чи означає це, що я повинен включати в свою модель якийсь термін взаємодії? Якщо так, будь-які поради щодо того, що поставити?

2
Я вніс кілька основних змін до свого початкового запитання, приблизно, приблизно через три години після того, як я його спочатку задав. Я намагався дотримуватися дуже корисної поради доктора Харрелла. Я все-таки дуже вдячний, якщо хтось спробує пояснити cphмені вищезгаданий вихід простою англійською мовою або вкаже мені на посилання, яке б це зробило. Доктор Харрелл, дуже дякую за допомогу дотепер!
Олександр

Відповіді:


13

Для початку розгляньте кілька речей. По-перше, ви виключаєте занадто багато спостережень за відсутніми даними, і це спричинить упередження. Розглянемо численні імпутації. По-друге, існує сюжетний метод дляcox.zphщо корисно для оцінки пропорційних небезпек. По-третє, ви припустили лінійність для коваріантних ефектів. По-четверте, кількість подій у вашому навчальному зразку ледве достатньо велика, щоб відповідати надійній моделі, якщо всі коваріатні ефекти бувають лінійними (що рідко). І ваш тестовий зразок повинен мати, мабуть, 400 подій, перш ніж він дасть надійну оцінку точності прогнозування. Не ясно, що у вас було достатньо даних, щоб розділити ці дані на дві частини. Перевірка вакцинації (100 повторень 10-кратної перехресної перевірки або використання завантажувальної стрічки) є кращим рішенням. Як ваша оригінальна зовнішня перевірка (функції rcorr.censта val.surv), так і внутрішня перевірка переустановки (функції validate, calibrate) реалізовані в rmsпакеті R. Тематичні дослідження для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-кратну 10-кратну перехресну перевірку. Якщо у вас є час, я дуже вдячний, якби ви могли запропонувати більше конкретного підказки щодо використання пакетів rms для цього. Тим часом я продовжуватиму читати ваш веб-сайт. Я б хотів у майбутньому пройти ваш курс. На жаль, я зараз в Європі, трохи занадто далеко!
Олександр

2
Для проблеми сингулярності зробіть це plot(cox.zph(...), df=2). Ознайомтеся з прикладами курсу в примітках курсу для rmsприкладів або встановіть пакет (який також потребує Hmiscпакет) і введіть ці команди, щоб відкрити довідкові файли:?cph ?validate.cph ?calibrate.cph
Frank Harrell

2
Ще раз дякую за вашу допомогу! У ці вихідні я роздрукував ваші конспекти курсу і проведу цей тиждень, читаючи їх і опрацьовуючи всі приклади.
Олександр

4

Висновок функції R cph, заснований на відповідному прикладі, пояснюється у цьому простому для публікації документі Дж. Фокса.

Я б настійно радив прочитати цей документ, якщо ви цього ще не зробили.


1
Чи можете ви описати, як документ пропонує інтерпретувати cphвихід?
smillig

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.