Obtención de valores p para "multinom" en R (paquete nnet)

19

¿Cómo obtengo valores p usando la multinomfunción de nnetpaquete R?

Tengo un conjunto de datos que consta de "puntuaciones de patología" (ausente, leve, grave) como variable de resultado, y dos efectos principales: edad (dos factores: veinte / treinta días) y grupo de tratamiento (cuatro factores: infectado sin ATB; infectado + ATB1; infectado + ATB2; infectado + ATB3).

Primero intenté ajustar un modelo de regresión ordinal, que parece más apropiado dadas las características de mi variable dependiente (ordinal). Sin embargo, el supuesto de la proporcionalidad de las probabilidades se violó severamente (gráficamente), lo que me llevó a usar un modelo multinomial en su lugar, usando el nnetpaquete.

Primero elegí el nivel de resultado que necesito usar como categoría de referencia:

Data$Path <- relevel(Data$Path, ref = "Absent")

Luego, necesitaba establecer categorías de referencia para las variables independientes:

Data$Age <- relevel(Data$Age, ref = "Twenty")
Data$Treat <- relevel(Data$Treat, ref="infected without ATB") 

El modelo:

test <- multinom(Path ~ Treat + Age, data = Data) 
# weights:  18 (10 variable) 
initial value 128.537638 
iter 10 value 80.623608 
final  value 80.619911 
converged

La salida:

Coefficients:
         (Intercept)   infected+ATB1   infected+ATB2   infected+ATB3    AgeThirty
Moderate   -2.238106   -1.1738540      -1.709608       -1.599301        2.684677
Severe     -1.544361   -0.8696531      -2.991307       -1.506709        1.810771

Std. Errors:
         (Intercept)    infected+ATB1   infected+ATB2   infected+ATB3    AgeThirty
Moderate   0.7880046    0.8430368       0.7731359       0.7718480        0.8150993
Severe     0.6110903    0.7574311       1.1486203       0.7504781        0.6607360

Residual Deviance: 161.2398
AIC: 181.2398

Durante un tiempo, no pude encontrar una manera de obtener los valores para el modelo y las estimaciones al usar . Ayer me encontré con una publicación donde el autor presentó un problema similar con respecto a la estimación de los valores para los coeficientes ( ¿Cómo configurar y estimar un modelo logit multinomial en R? ). Allí, un blogger sugirió que obtener valores del resultado de es bastante fácil, primero obteniendo los valores siguiente manera:p p tpnnet:multinomppsummarymultinomt

pt(abs(summary1$coefficients / summary1$standard.errors), df=nrow(Data)-10, lower=FALSE) 

         (Intercept)   infected+ATB1   infected+ATB2   infected+ATB3    AgeThirty
Moderate 0.002670340   0.08325396      0.014506395     0.02025858       0.0006587898
Severe   0.006433581   0.12665278      0.005216581     0.02352202       0.0035612114

Según Peter Dalgard, "falta al menos un factor 2 para un valor dos colas . Por lo general, es un error utilizar la distribución para lo que realmente es una estadística ; para datos agregados, puede ser un muy mal error ". Según Brian Ripley, "también es un error usar las pruebas de Wald para los ajustes, ya que sufren los mismos problemas (potencialmente graves) que los ajustes binomiales. Use intervalos de confianza de probabilidad de perfil (para los cuales el paquete proporciona software), o si debe realizar una prueba, pruebas de razón de probabilidad (ídem) ".t zpagtzmultinom

pag

Luciano
fuente
Puede usar comparaciones de modelos con pruebas de razón de probabilidad para un modelo completo y reducido utilizando nnetla anova()función de.
caracal

Respuestas:

14

¿Qué hay de usar

z <- summary(test)$coefficients/summary(test)$standard.errors
# 2-tailed Wald z tests to test significance of coefficients
p <- (1 - pnorm(abs(z), 0, 1)) * 2
p

Básicamente, esto se basaría en los coeficientes estimados en relación con su error estándar, y usaría la prueba az para probar una diferencia significativa con cero basada en una prueba de dos colas. El factor de dos corrige el problema al que Peter Dalgaard se refirió anteriormente (lo necesita porque desea una prueba de dos colas, no una de una cola), y utiliza una prueba z, en lugar de una prueba t, para resolver la otra problema que mencionas.

También puede obtener el mismo resultado (pruebas z de Wald) usando

library(AER)
coeftest(test)

Las pruebas de razón de verosimilitud generalmente se consideran más precisas que las pruebas de Wald z (estas últimas usan una aproximación normal, las pruebas LR no), y se pueden obtener usando

library(afex)
set_sum_contrasts() # use sum coding, necessary to make type III LR tests valid
library(car)
Anova(test,type="III")

Si desea llevar a cabo las pruebas posthoc de Tukey por pares, ¡estas se pueden obtener utilizando el lsmeanspaquete como se explica en mi otra publicación !

Tom Wenseleers
fuente
Un poco más de explicación de los pasos podría ayudar al OP.
Momo
1
Se agregó un poco más de explicación ahora ...
Tom Wenseleers
1
Aquí hay una buena página que se expande en la opción de prueba z de Wald: stats.idre.ucla.edu/r/dae/multinomial-logistic-regression
DirtStats