Різний сюжет прогнозування від виживання кокс і rms cph


9

Я створив власну трохи вдосконалену версію термплота, яку я використовую в цьому прикладі, ви можете знайти її тут . Я раніше розміщував повідомлення про SO, але чим більше я думаю про це, я вважаю, що це, ймовірно, більше пов'язане з інтерпретацією моделі небезпеки Кокса, ніж з фактичним кодуванням.

Проблема

Коли я дивлюся на графік коефіцієнта небезпеки, я очікую, що я матиме опорну точку, де інтервал довіри природно дорівнює 0, і це той випадок, коли я використовую cph () від, rms packageале не тоді, коли я використовую coxph () від survival package. Чи правильна поведінка coxph () і якщо так, то яка точка відліку? Також фіктивна змінна в coxph () має інтервал і значення є іншим, ніж ?e0

Приклад

Ось мій тестовий код:

# Load libs
library(survival)
library(rms)

# Regular survival
survobj <- with(lung, Surv(time,status))

# Prepare the variables
lung$sex <- factor(lung$sex, levels=1:2, labels=c("Male", "Female"))
labels(lung$sex) <- "Sex"
labels(lung$age) <- "Age"

# The rms survival
ddist <- datadist(lung)
options(datadist="ddist")
rms_surv_fit <- cph(survobj~rcs(age, 4)+sex, data=lung, x=T, y=T)

Cph сюжети

Цей код:

termplot2(rms_surv_fit, se=T, rug.type="density", rug=T, density.proportion=.05,
          se.type="polygon", yscale="exponential", log="y", 
          xlab=c("Age", "Sex"), 
          ylab=rep("Hazard Ratio", times=2),
          main=rep("cph() plot", times=2),
          col.se=rgb(.2,.2,1,.4), col.term="black")

дає цей сюжет:

cph () termplot2

Коффи сюжети

Цей код:

termplot2(surv_fit, se=T, rug.type="density", rug=T, density.proportion=.05, 
          se.type="polygon", yscale="exponential", log="y", 
          xlab=c("Age", "Sex"), 
          ylab=rep("Hazard Ratio", times=2),
          main=rep("coxph() plot", times=2),
          col.se=rgb(.2,.2,1,.4), col.term="black")

дає цей сюжет:

coxph () termplot2

Оновлення

Як @Frank Harrell запропонував, і після коригування пропозицій у своєму останньому коментарі я отримав:

p <- Predict(rms_surv_fit, age=seq(50, 70, times=20), 
             sex=c("Male", "Female"), fun=exp)
plot.Predict(p, ~ age | sex,
             col="black",
             col.fill=gray(seq(.8, .75, length=5)))

Це дало цей дуже приємний сюжет:

Гратчастий сюжет

Я знову подивився на Contra.rms після коментаря і спробував цей код, який дав змову ... хоча, мабуть, можна набагато більше, що можна зробити :-)

w <- contrast.rms(rms_surv_fit, 
                  list(sex=c("Male", "Female"), 
                       age=seq(50, 70, times=20)))

xYplot(Cbind(Contrast, Lower, Upper) ~ age | sex, 
       data=w, method="bands")

Дали цей сюжет:

Контрастний сюжет

ОНОВЛЕННЯ 2

Професор Тернау був люб'язно прокоментувати сюжети про відсутність довіри:

Згладжувальні сплайни в coxph, як і в грі, нормалізуються так, що сума (прогноз) = 0. Тому я не маю фіксованої єдиної точки, для якої дисперсія надто мала.

Хоча я ще не знайомий з GAM, це, мабуть, відповідає на моє запитання: це, здається, є проблемою тлумачення.


3
Кілька коментарів. Спочатку прочитайте biostat.mc.vanderbilt.edu/Rrms для відмінностей між rms та пакетами Design. По-друге, використовуйте plot () замість plot.Predict, щоб зберегти роботу. По-третє, ви можете легко генерувати сюжети для обох статей, наприклад, використовуючи Predict (fit, age, sex, fun = exp) # exp = anti-log; то сюжет (результат) або сюжет (результат, ~ вік | стать). Ви не використовуєте "x = NA" в Predict. rms використовує грати грат, тому звичайні параметри графіки та mfrow не застосовуються. Дивіться приклади в моєму розкладі курсу rms на biostat.mc.vanderbilt.edu/rms . Для Contra.rms детальніше вивчіть документацію.
Френк Харрелл

1
Дуже дякую за ваш внесок. Я оновив код з кращими прикладами та додав проф. Відповідь Фернау. PS Я дуже радий, що планування нової версії книги, розширення розділу зсуву точки перерізу, буде дуже корисним як орієнтир
Макс Гордон

1
Ви можете використовувати plotі contrastзамість plot.Predictі contrast.rms. Я б використовував byабо lengthвсередині seqзамість, timesі я дав би contrastдва списки, щоб ви точно вказали, що саме протиставляється. Ви також можете використовувати затінення xYplotдля довіри.
Френк Харрелл

1
Дякую. Мені подобається використовувати plot.Predict, тому що тоді я переходжу до потрібної допомоги в RStudio - те, що в моєму випадку набагато важливіше, ніж час, який потрібно для написання повного імені функції (використовуючи автозаповнення (вкладка), я насправді не втратити стільки часу).
Макс Гордон

Відповіді:


5

Я думаю, що обов'язково повинен бути момент, коли довірчий інтервал дорівнює нульовій ширині. Ви також можете спробувати третій спосіб, який полягає у використанні виключно функцій rms. Під файлом довідки для Contra.rms є приклад, щоб отримати графік коефіцієнта небезпеки. Це починається з коментаря # показують окремі оцінки за лікуванням та статтю. Щоб отримати коефіцієнт, вам потрібно буде анти-реєстрацію.


1
Спасибі за вашу відповідь. Як ви вважаєте, я повинен згадати цю проблему проф. Террі Терно, якщо його слід розглядати як помилку / неправильну інтерпретацію? Я також переглянув графічні рішення в пакеті RMS, я не можу повністю зрозуміти використання contra.rms для сюжетів. Сюжет. Predict, схоже, робить термплот подібним результатом, але я не можу змусити його робити саме те, що я хочу ... дивіться своє оновлення до питання.
Макс Гордон

2
Було б добре написати йому запит і сказати йому подяку за проїзд до аеропорту, який він мені подарував кілька хвилин тому. Я прокоментую вище інші питання.
Френк Харрелл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.