Ecco cosa di solito mi piace fare (a scopo illustrativo uso i dati quine sovraispersi e non molto modellati dei giorni degli alunni assenti da scuola MASS
):
Testare e rappresentare graficamente i dati di conteggio originali tracciando le frequenze osservate e le frequenze adattate (vedere il capitolo 2 in Amichevole ) che è supportato dal vcd
pacchetto R
in grandi parti. Ad esempio, con goodfit
e a rootogram
:
library(MASS)
library(vcd)
data(quine)
fit <- goodfit(quine$Days)
summary(fit)
rootogram(fit)
o con i grafici Ord che aiutano a identificare quale modello di dati di conteggio è sottostante (ad esempio, qui la pendenza è positiva e l'intercetta è positiva che parla per una distribuzione binomiale negativa):
Ord_plot(quine$Days)
o con le trame "XXXXXXness" in cui XXXXX è la distribuzione di scelta, diciamo la trama di Poissoness (che parla contro Poisson, prova anche type="nbinom"
):
distplot(quine$Days, type="poisson")
Ispezionare le solite misure di bontà di adattamento (come le statistiche del rapporto di probabilità rispetto a un modello nullo o simili):
mod1 <- glm(Days~Age+Sex, data=quine, family="poisson")
summary(mod1)
anova(mod1, test="Chisq")
Verificare la sovra / sottodispersione osservando residual deviance/df
o una statistica di test formale (ad esempio, vedere questa risposta ). Qui abbiamo chiaramente una sovradispersione:
library(AER)
deviance(mod1)/mod1$df.residual
dispersiontest(mod1)
Verificare la presenza di punti influenti e leva , ad es. Con influencePlot
il car
pacchetto. Naturalmente qui molti punti sono molto influenti perché Poisson è un cattivo modello:
library(car)
influencePlot(mod1)
Verificare l' inflazione zero adattando un modello di dati di conteggio e la sua controparte zeroinflated / hurdle e confrontarli (di solito con AIC). Qui un modello a gonfiaggio zero si adatterebbe meglio del semplice Poisson (di nuovo probabilmente a causa della sovraispersione):
library(pscl)
mod2 <- zeroinfl(Days~Age+Sex, data=quine, dist="poisson")
AIC(mod1, mod2)
Traccia i residui (grezzi, devianza o ridimensionati) sull'asse y rispetto ai valori (log) previsti (o il predittore lineare) sull'asse x. Qui vediamo alcuni residui molto grandi e una deviazione sostanziale dei residui di deviazione dalla normalità (parlando contro il Poisson; Modifica: @La risposta di FlorianHartig suggerisce che non è prevedibile la normalità di questi residui, quindi questo non è un indizio conclusivo):
res <- residuals(mod1, type="deviance")
plot(log(predict(mod1)), res)
abline(h=0, lty=2)
qqnorm(res)
qqline(res)
Se interessati, tracciare un diagramma della metà della probabilità normale dei residui, disegnando i residui assoluti ordinati rispetto ai valori normali attesi Atkinson (1981) . Una caratteristica speciale sarebbe quella di simulare una 'linea' di riferimento e un inviluppo con intervalli di confidenza simulati / avviati (non mostrati però):
library(faraway)
halfnorm(residuals(mod1))
Grafici diagnostici per i modelli log lineari per i dati di conteggio (vedere i capitoli 7.2 e 7.7 nel libro di Friendly). Tracciare i valori previsti rispetto a quelli osservati, forse con una stima dell'intervallo (l'ho fatto solo per le fasce d'età - qui vediamo di nuovo che siamo abbastanza lontani dalle nostre stime a causa della sovraispersione a parte, forse, nel gruppo F3. I punti rosa sono la previsione del punto un errore standard):±
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)
Questo dovrebbe darti molte delle informazioni utili sulla tua analisi e la maggior parte dei passaggi funzionano per tutte le distribuzioni di dati di conteggio standard (ad esempio, Poisson, Binomio negativo, Poisson COM, Leggi di potenza).