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).
Podejście polegające na stosowaniu standardowych wykresów diagnostycznych, ale chcących wiedzieć, jak powinny wyglądać, podoba mi się:
Jednym z wymienionych tam podejść jest utworzenie kilku symulowanych zestawów danych, w których założenia są prawdziwe, i utworzenie wykresów diagnostycznych dla tych symulowanych zestawów danych, a także utworzenie wykresu diagnostycznego dla rzeczywistych danych. umieść wszystkie te wykresy na ekranie w tym samym czasie (losowo umieszczając wykres na podstawie rzeczywistych danych). Teraz masz wizualne odniesienie do tego, jak powinny wyglądać wykresy, a jeśli założenia dotyczą prawdziwych danych, to wykres ten powinien wyglądać tak samo jak inne (jeśli nie możesz powiedzieć, które są prawdziwe dane, wówczas testowane założenia są prawdopodobnie bliskie wystarczy prawda), ale jeśli wykres danych rzeczywistych wyraźnie różni się od drugiego, oznacza to, że przynajmniej jedno z założeń się nie sprawdza.
vis.test
Funkcji w pakiecie dla R TeachingDemos umożliwia wdrożenie tego jako testu.źródło
To stare pytanie, ale pomyślałem, że przydałoby się dodać, że mój pakiet DHARMa R (dostępny z CRAN, patrz tutaj ) zapewnia teraz znormalizowane resztki dla GLM i GLMM, oparte na podejściu symulacyjnym podobnym do sugerowanego przez @GregSnow .
Z opisu pakietu:
@Momo - możesz zaktualizować zalecenie 6, jest to mylące. Normalności odchyleń odchyleń zasadniczo nie oczekuje się w przypadku Poissona , jak wyjaśniono w winiecie DHARMa lub tutaj ; i dlatego wyszukiwanie odchyleń odchyleń (lub jakichkolwiek innych standardowych resztek), które różnią się od linii prostej na wykresie qqnorm, nie jest zatem generalnie żadnym problemem . Pakiet DHARMa zapewnia wykres qq, który jest niezawodny do diagnozowania odchyleń od Poissona lub innych rodzin GLM. Stworzyłem przykład ilustrujący problem z reszt dewiacji tutaj .
źródło
W
glm.diag.plots
pakiecie wywoływana jest funkcjaboot
do generowania wykresów diagnostycznych dla GLM. Co to robi:źródło