Oto, co zazwyczaj lubię robić (dla ilustracji wykorzystuję rozproszone i niezbyt łatwo modelowane dane z czasów uczniów, których nie ma w szkole MASS
):
Przetestuj i wykreśl oryginalne dane zliczania , wykreślając obserwowane częstotliwości i dopasowane częstotliwości (patrz rozdział 2 w Friendly ), który jest obsługiwany przez vcd
pakiet R
w dużych częściach. Na przykład za pomocą goodfit
i a rootogram
:
library(MASS)
library(vcd)
data(quine)
fit <- goodfit(quine$Days)
summary(fit)
rootogram(fit)
lub z wykresami porządkowymi, które pomagają określić, który model danych zliczania leży u podstaw (np. tutaj nachylenie jest dodatnie, a punkt przecięcia jest dodatni, co przemawia za ujemnym rozkładem dwumianowym):
Ord_plot(quine$Days)
lub z wykresami „XXXXXXness”, gdzie XXXXX jest rozkładem wyboru, powiedzmy wykres Poissona (który przemawia przeciwko Poissonowi, spróbuj także type="nbinom"
):
distplot(quine$Days, type="poisson")
Sprawdź zwykłe miary dopasowania (takie jak statystyki współczynnika wiarygodności w porównaniu z modelem zerowym lub podobnym):
mod1 <- glm(Days~Age+Sex, data=quine, family="poisson")
summary(mod1)
anova(mod1, test="Chisq")
Sprawdź nadmierną / niską dyspersję , patrząc na residual deviance/df
formalną statystykę testową lub na nią (np. Zobacz tę odpowiedź ). Tutaj mamy wyraźnie nadmierną dyspersję:
library(AER)
deviance(mod1)/mod1$df.residual
dispersiontest(mod1)
Sprawdź, wpływowych i dźwigni punktów , np, przy czym influencePlot
w car
opakowaniu. Oczywiście tutaj wiele punktów ma duży wpływ, ponieważ Poisson jest złym modelem:
library(car)
influencePlot(mod1)
Sprawdź zerową inflację , dopasowując model danych zliczania i jego odpowiednik z zerową inflacją / przeszkodą i porównaj je (zwykle z AIC). Tutaj model z napompowaniem zerowym pasowałby lepiej niż zwykły Poisson (znowu prawdopodobnie z powodu nadmiernej dyspersji):
library(pscl)
mod2 <- zeroinfl(Days~Age+Sex, data=quine, dist="poisson")
AIC(mod1, mod2)
Narysuj wartości resztkowe (surowe, odchylenie lub skalowane) na osi y w stosunku do (log) przewidywanych wartości (lub predyktora liniowego) na osi x. Widzimy tutaj bardzo duże reszty i znaczne odchylenie reszty dewiacji od normy (przemawiając przeciwko Poissonowi; edycja: @ FlorianHartig odpowiedź sugeruje, że nie należy oczekiwać normalności tych reszty, więc nie jest to rozstrzygająca wskazówka):
res <- residuals(mod1, type="deviance")
plot(log(predict(mod1)), res)
abline(h=0, lty=2)
qqnorm(res)
qqline(res)
W razie zainteresowania wykreśl połowę normalnego wykresu prawdopodobieństwa reszt, wykreślając uporządkowane absolutne reszty w stosunku do oczekiwanych wartości normalnych Atkinsona (1981) . Specjalną cechą byłaby symulacja „linii” odniesienia i obwiedni z symulowanymi / ładowanymi przedziałami ufności (choć nie pokazano):
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)
To powinno dać ci wiele przydatnych informacji o twojej analizie i większość kroków działa dla wszystkich standardowych rozkładów danych zliczania (np. Poissona, Dwumianu ujemnego, COM Poissona, Prawa mocy).