Логістична регресія з регресійними сплайнами в R


12

Я розробляю логістичну модель регресії на основі ретроспективних даних із національної бази травм травми голови у Великобританії. Основним результатом є смертність за 30 днів (позначена як міра "вижити"). Інші заходи з опублікованими доказами значного впливу на результати попередніх досліджень включають:

Year - Year of procedure = 1994-2013
Age - Age of patient = 16.0-101.5
ISS - Injury Severity Score = 0-75
Sex - Gender of patient = Male or Female
inctoCran - Time from head injury to craniotomy in minutes = 0-2880 (After 2880 minutes is defined as a separate diagnosis)

Використовуючи ці моделі, враховуючи дихотомологічну змінну, я побудував логістичну регресію за допомогою lrm.

Метод вибору змінної моделі базувався на існуючій клінічній літературі, що моделює той же діагноз. Всі вони були змодельовані лінійним приляганням за винятком ISS, який моделювався традиційно за допомогою дробових многочленів. Жодна публікація не виявила відомих значущих взаємодій між перерахованими вище змінними.

Дотримуючись поради Френка Харрелла, я продовжив використання регресійних сплайнів для моделювання МКС (є переваги такого підходу, висвітлені в коментарях нижче). Таким чином модель була попередньо визначена наступним чином:

rcs.ASDH<-lrm(formula = Survive ~ Age + GCS + rcs(ISS) +
    Year + inctoCran + oth, data = ASDH_Paper1.1, x=TRUE, y=TRUE)

Результатами моделі були:

> rcs.ASDH

Logistic Regression Model

lrm(formula = Survive ~ Age + GCS + rcs(ISS) + Year + inctoCran + 
    oth, data = ASDH_Paper1.1, x = TRUE, y = TRUE)

                      Model Likelihood     Discrimination    Rank Discrim.    
                         Ratio Test            Indexes          Indexes       
Obs          2135    LR chi2     342.48    R2       0.211    C       0.743    
 0            629    d.f.             8    g        1.195    Dxy     0.486    
 1           1506    Pr(> chi2) <0.0001    gr       3.303    gamma   0.487    
max |deriv| 5e-05                          gp       0.202    tau-a   0.202    
                                           Brier    0.176                     

          Coef     S.E.    Wald Z Pr(>|Z|)
Intercept -62.1040 18.8611 -3.29  0.0010  
Age        -0.0266  0.0030 -8.83  <0.0001 
GCS         0.1423  0.0135 10.56  <0.0001 
ISS        -0.2125  0.0393 -5.40  <0.0001 
ISS'        0.3706  0.1948  1.90  0.0572  
ISS''      -0.9544  0.7409 -1.29  0.1976  
Year        0.0339  0.0094  3.60  0.0003  
inctoCran   0.0003  0.0001  2.78  0.0054  
oth=1       0.3577  0.2009  1.78  0.0750  

Потім я використав функцію калібрування в пакеті rms, щоб оцінити точність прогнозів з моделі. Були отримані такі результати:

plot(calibrate(rcs.ASDH, B=1000), main="rcs.ASDH")

Калібрувальні криві завантажувальної камери накладені штрафом для накладання

Після завершення розробки моделі я створив наступний графік, щоб продемонструвати вплив року інциденту на виживання, базуючи значення медіани у безперервних змінних та режиму в категоричних змінних:

ASDH <- Predict(rcs.ASDH, Year=seq(1994,2013,by=1),Age=48.7,ISS=25,inctoCran=356,Other=0,GCS=8,Sex="Male",neuroYN=1,neuroFirst=1)
Probabilities <- data.frame(cbind(ASDH$yhat,exp(ASDH$yhat)/(1+exp(ASDH$yhat)),exp(ASDH$lower)/(1+exp(ASDH$lower)),exp(ASDH$upper)/(1+exp(ASDH$upper))))
names(Probabilities) <- c("yhat","p.yhat","p.lower","p.upper")
ASDH<-merge(ASDH,Probabilities,by="yhat")
plot(ASDH$Year,ASDH$p.yhat,xlab="Year",ylab="Probability of Survival",main="30 Day Outcome Following Craniotomy for Acute SDH by Year", ylim=range(c(ASDH$p.lower,ASDH$p.upper)),pch=19)
arrows(ASDH$Year,ASDH$p.lower,ASDH$Year,ASDH$p.upper,length=0.05,angle=90,code=3)

Код, наведений вище, призвів до наступного виводу:

Тренд року з нижнім і верхнім

Залишилися мої питання наступні:

1. Інтерпретація сплайну - Як я можу обчислити значення р для сплайнів, об'єднаних для загальної змінної?


4
Хороша робота. Для відображення ефекту року я пропоную дати інші змінної бути встановлено на значення по замовчуванням (медіана для безперервного режиму для категоріального) і змінюються рік на осі х, наприклад, plot(Predict(rcs.ASDH, Year)). Ви можете дозволити іншим змінним змінюватися, складаючи різні криві, виконуючи такі дії plot(Predict(rcs.ASDH, Year, age=c(25, 35))).
Френк Харрелл

1
Я не знаю, чому - але я не бачив у літературі чимало прикладів виправлених кривих калібрувальних кривих. Здається, гарна ідея
Чарлз

1
Для перевірки загальної асоціації з декількома тестами df використовуйте anova(rcs.ASDH).
Френк Харрелл

Відповіді:


8

Дуже важко інтерпретувати свої результати, коли ви не заздалегідь вказали модель, але ви провели значне тестування та в результаті модифікації моделі. І я не рекомендую використовувати тест на придатність, який ви використовували, оскільки він має вироджене розподіл, а не розподіл .χ2

Два рекомендованих способи оцінки відповідності моделі:

  1. Плавна калібрувальна непараметрична (наприклад, * льосова) калібрувальна крива виправленого завантаження для перевірки абсолютної точності прогнозів
  2. Вивчіть різні узагальнення моделі, перевіряючи, чи працює більш гнучка специфікація моделі. Наприклад, зробіть коефіцієнт ймовірності або тести Wald додаткових нелінійних або взаємодіючих умов.χ2

Є деякі переваги регресійних сплайнів над дробовими поліномами, включаючи:

  1. Прогноз може мати значення ; ви не можете приймати журнали таких значень, як того вимагають FP0
  2. Вам не потрібно турбуватися про походження прогноктора. ФП припускають, що нуль є "магічним" походженням для прогнозів, тоді як регресійні сплайси інваріантні для переміщення прогноктора на постійну.

Детальніше про сплайси регресії та оцінку лінійності та адитивності див. У моїх матеріалах на веб-сайті http://biostat.mc.vanderbilt.edu/CourseBios330 , а також функції rmsпакету R. rcsДля калібрувальних кривих завантажувальної кривої, пеналізованих для накладання, див. rms calibrateФункцію.


Я спробував заздалегідь уточнити модель при створенні повної моделі з усіма клінічно доступними змінними, включаючи спочатку і з відомим значенням для діагнозу та змінної результату. Всі вони були лінійними суцільними чи дихотомічними змінними, за винятком МКС, які попередні дослідження визначили, можна моделювати з дробовими поліномами. Я вважаю, що метод, який я використовував для розробки моделі, узгоджується з "Багатоваріантною побудовою моделей" Віллі Зауербрей. Можливо, я міг би використати ваш пакет rms в R для того, щоб оцінити глобальну корисність придатності? Якщо так, то яку формулу ви б рекомендували?
Денський фонтан

Я розширив свою відповідь, щоб вирішити щось із цього.
Френк Харрелл

Чи можете ви порекомендувати пакети для виконання 1 і 2 для оцінки відповідності моделі? Чи можу я використовувати функцію перевірки у rms? Що стосується регресійних сплайнів, я читаю ваші конспекти лекцій і зараз намагаюся знайти копію вашої книги (я придбав би її, якби міг!) Чи зможете ви порекомендувати подальший пакет R / функцію для побудови регресійних сплайнів для нелінійних безперервних змінних у цій моделі? Велике спасибі за всю вашу допомогу до цих пір.
Данський фонтан

Можливо, земляний пакет, заснований на багатовимірній адаптаційній регресійній сплайсі Фрідмана?
Фонтан Дана

Останнє питання. Формула оцінки показника тяжкості ушкодження (ISS) - A ^ 2 + B ^ 2 + C ^ 2, де A, B і C - різні частини тіла з незалежною оцінкою тяжкості травми 1-5. Таким чином, максимум становить 75, а мінімальний - 1 у цьому наборі даних. Враховуючи цю формулу, чи буде дробові многочлени більш реальним уявленням про те, як фактично обчислюється оцінка порівняно з регресійними сплайнами?
Денський фонтан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.