P-Werte für "multinom" in R abrufen (nnet-Paket)

19

Wie erhalte ich p-Werte mit der multinomFunktion von nnetpackage in R?

Ich habe einen Datensatz, der aus "Pathologie-Scores" (Abwesend, Mild, Schwerwiegend) als Ergebnisvariable und zwei Haupteffekten besteht: Alter (zwei Faktoren: zwanzig / dreißig Tage) und Behandlungsgruppe (vier Faktoren: infiziert ohne ATB; infiziert +) ATB1; infiziert + ATB2; infiziert + ATB3).

Zuerst habe ich versucht, ein ordinales Regressionsmodell anzupassen, das angesichts der Merkmale meiner abhängigen Variablen (Ordinalzahl) angemessener erscheint. Die Annahme der Quotenproportionalität wurde jedoch (grafisch) erheblich verletzt, was mich dazu veranlasste, stattdessen ein multinomiales Modell unter Verwendung des nnetPakets zu verwenden.

Zuerst habe ich die Ergebnisstufe ausgewählt, die ich als Basiskategorie verwenden möchte:

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

Dann musste ich Basiskategorien für die unabhängigen Variablen festlegen:

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

Das Model:

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

Die Ausgabe:

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

Für eine Weile konnte ich keine Möglichkeit finden, die Werte für das Modell und die Schätzungen bei der Verwendung zu ermitteln . Gestern bin ich auf einen Beitrag gestoßen, in dem der Autor ein ähnliches Problem in Bezug auf die Schätzung von Werten für Koeffizienten vorgebracht hat ( wie man ein multinomiales Logit-Modell in R aufbaut und schätzt? ). Dort schlug ein Blogger vor, dass es ziemlich einfach sei, Werte aus dem Ergebnis von zu erhalten , indem man zuerst die Werte wie folgt abruft: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

Peter Dalgard: "Für einen zweiseitigen Wert fehlt mindestens der Faktor 2. Es ist normalerweise ein Fehler, die Verteilung für eine Statistik zu verwenden. Für aggregierte Daten kann dies der Fall sein ein sehr schlimmer Fehler. " Laut Brian Ripley "ist es auch ein Fehler, Wald-Tests für Anpassungen zu verwenden, da sie unter denselben (möglicherweise schwerwiegenden) Problemen leiden wie Binomialanpassungen. Verwenden Sie Konfidenzintervalle mit Profilwahrscheinlichkeit (für die das Paket Software bereitstellt) oder wenn Sie testen müssen, Likelihood-Ratio-Tests (dito). "t zptzmultinom

Ich muss nur in der Lage sein, zuverlässige Werte abzuleiten .p

Luciano
quelle
Sie können Modellvergleiche mit Likelihood-Ratio-Tests für ein vollständiges und reduziertes Modell mit nnetder anova()Funktion von verwenden.
Karakal

Antworten:

14

Was ist mit

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

Grundsätzlich würde dies auf den geschätzten Koeffizienten in Bezug auf ihren Standardfehler basieren und einen Zweistufentest verwenden, um auf der Grundlage eines zweiseitigen Tests gegen eine signifikante Differenz mit Null zu testen. Der Faktor zwei korrigiert das Problem, auf das Peter Dalgaard oben Bezug genommen hat (Sie brauchen es, weil Sie einen zweiseitigen Test wollen, keinen einseitigen), und es wird ein Z-Test anstelle eines T-Tests verwendet, um den anderen zu lösen Problem, das Sie erwähnen.

Sie können das gleiche Ergebnis (Wald-Z-Tests) auch mit erhalten

library(AER)
coeftest(test)

Likelihood-Ratio-Tests werden im Allgemeinen als genauer angesehen als Wald-z-Tests (letztere verwenden eine normale Näherung, LR-Tests nicht), und diese können mithilfe von ermittelt werden

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

Wenn Sie paarweise Tukey-Post-Hoc-Tests durchführen möchten, können Sie diese mit dem lsmeansPaket erhalten, wie in meinem anderen Beitrag erläutert !

Tom Wenseleers
quelle
Eine genauere Erklärung der Schritte könnte dem OP helfen.
Momo
1
Ein bisschen mehr Erklärung hinzugefügt ...
Tom Wenseleers
1
Hier ist eine gute Seite, die die Wald-Z-Test-Option erweitert: stats.idre.ucla.edu/r/dae/multinomial-logistic-regression
DirtStats