Folgendes mache ich normalerweise gerne (zur Veranschaulichung verwende ich die überdispersen und nicht sehr einfach zu modellierenden quinen Daten von Schülertagen, die nicht in der Schule waren MASS
):
Testen Sie die ursprünglichen Zähldaten und zeichnen Sie sie grafisch auf, indem Sie die beobachteten Frequenzen und angepassten Frequenzen (siehe Kapitel 2 in Friendly ) aufzeichnen, die in großen Teilen von der vcd
Packung unterstützt werden R
. Zum Beispiel mit goodfit
und a rootogram
:
library(MASS)
library(vcd)
data(quine)
fit <- goodfit(quine$Days)
summary(fit)
rootogram(fit)
oder mit Ord-Plots, die bei der Identifizierung des zugrunde liegenden Zähldatenmodells helfen (z. B. ist hier die Steigung positiv und der Achsenabschnitt positiv, was für eine negative Binomialverteilung spricht):
Ord_plot(quine$Days)
oder mit den "XXXXXXness" -Diagrammen, bei denen XXXXX die Verteilung der Wahl ist, sagen Sie Poissoness-Diagramm (was gegen Poisson spricht, versuchen Sie es auch type="nbinom"
):
distplot(quine$Days, type="poisson")
Untersuchen Sie die üblichen Anpassungsgütemessungen (z. B. Wahrscheinlichkeitsquotientenstatistik im Vergleich zu einem Nullmodell oder ähnlichem):
mod1 <- glm(Days~Age+Sex, data=quine, family="poisson")
summary(mod1)
anova(mod1, test="Chisq")
Überprüfen Sie auf Über- / Unterdispersion, indem Sie sich residual deviance/df
eine formale Teststatistik ansehen oder ansehen ( siehe z. B. diese Antwort ). Hier haben wir deutlich Überdispersion:
library(AER)
deviance(mod1)/mod1$df.residual
dispersiontest(mod1)
Prüfen Sie, ob Einfluss- und Hebelpunkte vorhanden sind , z. B. mit dem influencePlot
in der car
Packung. Natürlich sind hier viele Punkte sehr einflussreich, da Poisson ein schlechtes Modell ist:
library(car)
influencePlot(mod1)
Überprüfen Sie, ob keine Inflation vorliegt, indem Sie ein Zähldatenmodell und dessen Gegenstück mit null Inflation / Hürde anpassen und vergleichen (normalerweise mit AIC). Hier würde ein Modell ohne Luftdruck besser passen als das einfache Poisson (ebenfalls wahrscheinlich aufgrund von Überdispersion):
library(pscl)
mod2 <- zeroinfl(Days~Age+Sex, data=quine, dist="poisson")
AIC(mod1, mod2)
Zeichnen Sie die Residuen (roh, abweichend oder skaliert) auf der y-Achse gegen die (logarithmischen) vorhergesagten Werte (oder den linearen Prädiktor) auf der x-Achse. Hier sehen wir einige sehr große Residuen und eine erhebliche Abweichung der Residuen von der Norm (im Gegensatz zum Poisson; Edit: @ FlorianHartig's Antwort legt nahe, dass die Normalität dieser Residuen nicht zu erwarten ist, so dass dies kein schlüssiger Hinweis ist):
res <- residuals(mod1, type="deviance")
plot(log(predict(mod1)), res)
abline(h=0, lty=2)
qqnorm(res)
qqline(res)
Zeichnen Sie bei Interesse eine halbnormale Wahrscheinlichkeitsdarstellung von Residuen, indem Sie geordnete absolute Residuen gegen erwartete Normalwerte zeichnen. Atkinson (1981) . Eine Besonderheit wäre die Simulation einer Referenzlinie und eines Umschlags mit simulierten / Bootstrap-Konfidenzintervallen (jedoch nicht dargestellt):
library(faraway)
halfnorm(residuals(mod1))
±
plot(Days~Age, data=quine)
prs <- predict(mod1, type="response", se.fit=TRUE)
pris <- data.frame("pest"=prs[[1]], "lwr"=prs[[1]]-prs[[2]], "upr"=prs[[1]]+prs[[2]])
points(pris$pest ~ quine$Age, col="red")
points(pris$lwr ~ quine$Age, col="pink", pch=19)
points(pris$upr ~ quine$Age, col="pink", pch=19)
Dies sollte Ihnen viele nützliche Informationen über Ihre Analyse geben und die meisten Schritte funktionieren für alle Standardzählungsdatenverteilungen (z. B. Poisson, Negatives Binom, COM Poisson, Potenzgesetze).