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).
Für den Ansatz, Standarddiagnosepläne zu verwenden, aber zu wissen, wie sie aussehen sollen, mag ich das Papier:
Einer der dort genannten Ansätze besteht darin, mehrere simulierte Datensätze zu erstellen, bei denen die Annahmen von Interesse zutreffen, und die Diagnosediagramme für diese simulierten Datensätze sowie das Diagnosediagramm für die realen Daten zu erstellen. Platzieren Sie alle diese Diagramme gleichzeitig auf dem Bildschirm (platzieren Sie das Diagramm nach dem Zufallsprinzip basierend auf den tatsächlichen Daten). Jetzt haben Sie eine visuelle Referenz, wie die Diagramme aussehen sollen, und wenn die Annahmen für die realen Daten zutreffen, sollte dieses Diagramm genauso aussehen wie die anderen (wenn Sie nicht sagen können, welche die realen Daten sind, sind die getesteten Annahmen wahrscheinlich nahe beieinander genug, um wahr zu sein), aber wenn der reale Datenplot deutlich anders aussieht als der andere, dann bedeutet das, dass mindestens eine der Annahmen nicht zutrifft. Die
vis.test
Funktion im TeachingDemos-Paket für R hilft dabei, dies als Test zu implementieren.quelle
Dies ist eine alte Frage, aber ich hielt es für nützlich, hinzuzufügen, dass mein DHARMa R-Paket (von CRAN erhältlich, siehe hier ) jetzt standardisierte Residuen für GLMs und GLMMs enthält, basierend auf einem Simulationsansatz, der dem von @GregSnow vorgeschlagenen ähnelt .
Aus der Paketbeschreibung:
@Momo - Möglicherweise möchten Sie Ihre Empfehlung 6 aktualisieren, da dies irreführend ist. Normalität von Abweichungsresten wird bei einem Poisson im Allgemeinen nicht erwartet , wie in der DHARMa-Vignette oder hier erläutert ; und das Erkennen von Abweichungsresten (oder anderen Standardresten), die sich von einer geraden Linie in einem qqnorm-Plot unterscheiden, ist daher im Allgemeinen überhaupt nicht von Belang . Das DHARMa-Paket enthält ein qq-Diagramm, mit dem Abweichungen von Poisson oder anderen GLM-Familien zuverlässig diagnostiziert werden können. Ich habe ein Beispiel erstellt, das das Problem mit den Abweichungsresten hier demonstriert .
quelle
glm.diag.plots
In package gibt es eine Funktionboot
, mit der Diagnosediagramme für GLMs erstellt werden können. Was es macht:quelle