Regressão logística com splines de regressão em R

12

Eu tenho desenvolvido um modelo de regressão logística baseado em dados retrospectivos de um banco de dados nacional de trauma de traumatismo craniano no Reino Unido. O principal resultado é a mortalidade em 30 dias (denominada medida "Sobreviver"). Outras medidas com evidências publicadas de efeito significativo no resultado de estudos anteriores incluem:

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)

Usando esses modelos, dada a variável dependente dicotômica, eu construí uma regressão logística usando lrm.

O método de seleção de variáveis ​​do modelo foi baseado na literatura clínica existente, modelando o mesmo diagnóstico. Todos foram modelados com um ajuste linear, com exceção do ISS, modelado tradicionalmente por polinômios fracionários. Nenhuma publicação identificou interações significativas conhecidas entre as variáveis ​​acima.

Seguindo o conselho de Frank Harrell, continuei com o uso de splines de regressão para modelar o ISS (há vantagens nessa abordagem destacadas nos comentários abaixo). O modelo foi, portanto, pré-especificado da seguinte forma:

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

Os resultados do modelo foram:

> 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  

Em seguida, usei a função calibrar no pacote rms para avaliar a precisão das previsões do modelo. Os seguintes resultados foram obtidos:

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

Curvas de calibração de bootstrap penalizadas por sobreajuste

Após a conclusão do design do modelo, criei o gráfico a seguir para demonstrar o efeito do Ano do incidente na sobrevivência, baseando os valores da mediana em variáveis ​​contínuas e o modo nas variáveis ​​categóricas:

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)

O código acima resultou na seguinte saída:

Tendência do ano com menor e maior

Minhas perguntas restantes são as seguintes:

1. Interpretação de splines - Como posso calcular o valor p para os splines combinados para a variável geral?

Dan Fountain
fonte
4
Bom trabalho. Para exibir o efeito do ano, sugiro que as outras variáveis ​​sejam definidas nos valores padrão (mediana para contínua, modo para categórica) e varie o ano no eixo x, por exemplo plot(Predict(rcs.ASDH, Year)),. Você pode permitir que outras variáveis ​​variem, criando curvas diferentes, fazendo coisas como plot(Predict(rcs.ASDH, Year, age=c(25, 35))).
Frank Harrell
1
Não sei por que - mas não vi muitos exemplos de curvas de calibração corrigidas pela polarização na literatura. Parece ser uma boa ideia
charles
1
Para testar a associação geral com vários testes de DF, use anova(rcs.ASDH).
Frank Harrell

Respostas:

8

χ2

Duas maneiras recomendadas para avaliar o ajuste do modelo são:

  1. Curva de calibração suave não paramétrica (por exemplo, * loess) corrigida pelo ajuste de inicialização para verificar a precisão absoluta das previsões
  2. χ2

Existem algumas vantagens de splines de regressão sobre polinômios fracionários, incluindo:

  1. 0 0
  2. Você não precisa se preocupar com a origem de um preditor. Os FPs assumem que zero é uma origem "mágica" para os preditores, enquanto os splines de regressão são invariantes à mudança de um preditor por uma constante.

Para obter mais informações sobre splines de regressão e avaliação de linearidade e aditividade, consulte meus folhetos em http://biostat.mc.vanderbilt.edu/CourseBios330 , bem como a função do rmspacote R. rcsPara curvas de calibração de autoinicialização penalizadas por sobreajuste, consulte a rms calibratefunção

Frank Harrell
fonte
Tentei pré-especificar o modelo na criação de um modelo completo com todas as variáveis ​​disponíveis clinicamente, incluindo inicialmente e com relevância conhecida para a variável de diagnóstico e resultado. Todas eram variáveis ​​lineares contínuas ou dicotômicas, com exceção da ISS, que estudos anteriores identificaram e podem ser modelados com polinômios fracionários. O método que eu usei para desenvolver o modelo que eu acredito é consistente com a "Construção Multivariada de Modelos" de Willi Sauerbrei. Talvez eu possa usar seu pacote rms em R para avaliar a qualidade global do ajuste? Em caso afirmativo, qual fórmula você recomendaria?
Dan Fountain
Eu ampliei minha resposta para abordar um pouco disso.
Frank Harrell
Você poderia recomendar pacotes para a execução de 1 e 2 para avaliar o ajuste do modelo? Eu poderia usar a função validar em rms? Em termos de splines de regressão, li suas anotações de aula e atualmente estou tentando localizar uma cópia do seu livro (eu o compraria se pudesse!) Você poderia recomendar um pacote / função R adicional para a construção de splines de regressão para as variáveis ​​contínuas não lineares neste modelo? Muito obrigado por toda a sua ajuda até agora.
9788 Danbury Fountain
Talvez o pacote terrestre baseado nas splines de regressão adaptativa multivariada de Friedman?
Dan Fountain
Uma última pergunta. A fórmula do ISS (Injury Severity Score) é A ^ 2 + B ^ 2 + C ^ 2, onde A, B e C são diferentes partes do corpo, com um escore de gravidade de trauma independente de 1-5. Portanto, o máximo é 75 e o mínimo 1 nesse conjunto de dados. Dada essa fórmula, os polinômios fracionais seriam a representação mais próxima de como a pontuação é realmente calculada em comparação aos splines de regressão?
Dan Fountain