Obtenir des valeurs de p pour «multinom» dans R (package nnet)

19

Comment obtenir des valeurs de p en utilisant la multinomfonction de nnetpackage dans R?

J'ai un ensemble de données qui se compose de «scores de pathologie» (absents, légers, graves) comme variable de résultat, et deux effets principaux: l'âge (deux facteurs: vingt / trente jours) et le groupe de traitement (quatre facteurs: infecté sans ATB; infecté + ATB1; infecté + ATB2; infecté + ATB3).

J'ai d'abord essayé d'adapter un modèle de régression ordinale, qui semble plus approprié compte tenu des caractéristiques de ma variable dépendante (ordinale). Cependant, l'hypothèse de proportionnalité des cotes a été gravement violée (graphiquement), ce qui m'a incité à utiliser un modèle multinomial à la place, en utilisant le nnetpackage.

J'ai d'abord choisi le niveau de résultat que je dois utiliser comme catégorie de référence:

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

Ensuite, je devais définir des catégories de base pour les variables indépendantes:

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

Le modèle:

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

Le résultat:

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

pnnet: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

ptzmultinom

p

Luciano
la source
Vous pouvez utiliser des comparaisons de modèles avec des tests de rapport de vraisemblance pour un modèle complet et réduit à l'aide de nnetla anova()fonction de.
caracal

Réponses:

14

Qu'en est-il de l'utilisation

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

Fondamentalement, cela serait basé sur les coefficients estimés par rapport à leur erreur standard, et utiliserait le test z pour tester une différence significative avec zéro sur la base d'un test bilatéral. Le facteur de deux corrige le problème évoqué par Peter Dalgaard (vous en avez besoin parce que vous voulez un test à deux queues, pas un à une) et il utilise un test z, plutôt qu'un test t, pour résoudre l'autre problème que vous mentionnez.

Vous pouvez également obtenir le même résultat (Wald z-tests) en utilisant

library(AER)
coeftest(test)

Les tests de rapport de vraisemblance sont généralement considérés comme plus précis que les tests de Wald z (ces derniers utilisent une approximation normale, les tests LR non), et ceux-ci peuvent être obtenus en utilisant

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

Si vous souhaitez effectuer des tests posthoc Tukey par paire, alors ceux-ci peuvent être obtenus en utilisant le lsmeanspackage comme expliqué dans mon autre article !

Tom Wenseleers
la source
Une explication un peu plus détaillée des étapes pourrait aider le PO.
Momo
1
Ajout d'un peu plus d'explications maintenant ...
Tom Wenseleers
1
Voici une bonne page qui développe l'option Wald z-test: stats.idre.ucla.edu/r/dae/multinomial-logistic-regression
DirtStats