Diagnosediagramme für die Zählregression

88

Welche diagnostischen Diagramme (und möglicherweise formalen Tests) sind für Regressionen, bei denen das Ergebnis eine Zählvariable ist, am aussagekräftigsten?

Ich interessiere mich besonders für Poisson- und negative Binomialmodelle sowie für Gegenstücke mit Null-Inflation und Hürden. Die meisten Quellen, die ich gefunden habe, zeichnen einfach die Residuen gegen angepasste Werte auf, ohne zu diskutieren, wie diese Darstellungen aussehen sollten.

Weisheit und Referenzen werden sehr geschätzt. Die Hintergrundgeschichte, warum ich das frage, ist, wenn es relevant ist, meine andere Frage .

Verwandte Diskussionen:

Halbpass
quelle

Antworten:

101

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

  1. 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 vcdPackung unterstützt werden R. Zum Beispiel mit goodfitund 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")
  2. 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")
  3. Überprüfen Sie auf Über- / Unterdispersion, indem Sie sich residual deviance/dfeine formale Teststatistik ansehen oder ansehen ( siehe z. B. diese Antwort ). Hier haben wir deutlich Überdispersion:

    library(AER)
    deviance(mod1)/mod1$df.residual
    dispersiontest(mod1)
  4. Prüfen Sie, ob Einfluss- und Hebelpunkte vorhanden sind , z. B. mit dem influencePlotin der carPackung. Natürlich sind hier viele Punkte sehr einflussreich, da Poisson ein schlechtes Modell ist:

    library(car)
    influencePlot(mod1)
  5. Ü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)
  6. 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)
  7. 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))
  8. ±

    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).

Momo
quelle
6
Tolle gründliche Antwort! Es war hilfreich, diese Diagnosen auch mit Poisson-simulierten Daten zu durchlaufen, um mein Auge darauf vorzubereiten, wie die Diagramme aussehen sollten.
Half-Pass
Hätte ich mehr erklären sollen, was die Handlungen tun, oder war es auf diese Weise in Ordnung?
Momo
2
Interessante Randnotiz: Ich stelle fest, dass die NB-Verteilung selten zu simulierten NB-Daten passt, die auf dem GOF-Test, dem Rootogram, dem Ord-Plot und dem NB-Ness-Plot basieren. Die Ausnahme scheinen sehr "zahme" NB-Daten zu sein, die nahezu symmetrisch sind - hoch mu, hoch Theta.
Half-Pass
1
Hm, sind Sie sicher, dass Sie als Argument type = "nbinomial" verwenden? ZB fm <- glm.nb (Tage ~., Daten = quine); Dummy <- Rnegbin (angepasst (FM), Theta = 4,5) funktioniert einwandfrei.
Momo
@Momo, danke - ich habe so etwas wie x = rnegbin gemacht (n = 1000, mu = 10, theta = 1); fit = goodfit (x, type = "nbinomial"); Zusammenfassung (fit). Das Setzen von Theta = 4,5 verbessert zwar die Anpassung, aber es ist immer noch oft p <0,05 und das Wurzelbild kann ziemlich schlecht aussehen. Nur damit ich den Unterschied zwischen unseren Simulationen verstehe: Bei Ihnen wurde jeder Dummy-Wert anhand eines anderen Mittelwertparameters simuliert (ein Wert in angepasst (fm)), richtig? Im Hinblick auf meinen sie haben alle Mittel 10.
Halbpass
14

Für den Ansatz, Standarddiagnosepläne zu verwenden, aber zu wissen, wie sie aussehen sollen, mag ich das Papier:

 Buja, A., Cook, D. Hofmann, H., Lawrence, M. Lee, E.-K., Swayne,
 D.F and Wickham, H. (2009) Statistical Inference for exploratory
 data analysis and model diagnostics Phil. Trans. R. Soc. A 2009
 367, 4361-4383 doi: 10.1098/rsta.2009.0120

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.testFunktion im TeachingDemos-Paket für R hilft dabei, dies als Test zu implementieren.

Greg Snow
quelle
6
Ein Beispiel mit den obigen Daten für den Datensatz: mod1 <- glm (Tage ~ Alter + Geschlecht, Daten = quine, Familie = "poisson"); if (interactive ()) {vis.test (Residuen (mod1, type = "response"), vt.qqnorm, nrow = 5, ncol = 5, npage = 3)}
halber Durchgang
13

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:

Das DHARMa-Paket verwendet einen simulationsbasierten Ansatz, um leicht interpretierbare skalierte Residuen aus angepassten verallgemeinerten linearen Mischmodellen zu erstellen. Derzeit werden alle 'merMod'-Klassen aus' lme4 '(' lmerMod ',' glmerMod '),' glm '(einschließlich' negbin 'aus' MASS ', jedoch ohne Quasi-Distributionen) und' lm'-Modellklassen unterstützt. Alternativ können auch extern erstellte Simulationen, z. B. posterior prädiktive Simulationen aus Bayes-Software wie 'JAGS', 'STAN' oder 'BUGS' verarbeitet werden. Die resultierenden Residuen sind auf Werte zwischen 0 und 1 standardisiert und können intuitiv als Residuen einer linearen Regression interpretiert werden. Das Paket bietet auch eine Reihe von Plot- und Testfunktionen für typische Modellfehlspezifikationen.

@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 .

Florian Hartig
quelle
4

glm.diag.plotsIn package gibt es eine Funktion boot, mit der Diagnosediagramme für GLMs erstellt werden können. Was es macht:

Zeichnet Jackknife-Abweichungs-Residuen gegen den linearen Prädiktor, Normal-Score-Diagramme für standardisierte Abweichungs-Residuen, Diagramme für ungefähre Cook-Statistiken gegen Hebelung / (1-Hebelung) und Falldiagramme für Cook-Statistiken.

kdarras
quelle