Aqui está o que eu normalmente gosto de fazer (para ilustração, eu uso os dados de quine superdispersos e não muito facilmente modelados dos dias de ausência dos alunos na escola MASS
):
Teste e faça um gráfico dos dados da contagem original , plotando as frequências observadas e as freqüências ajustadas (consulte o capítulo 2 em Amigável ), que é suportado pela vcd
embalagem R
em grandes partes. Por exemplo, com goodfit
e um rootogram
:
library(MASS)
library(vcd)
data(quine)
fit <- goodfit(quine$Days)
summary(fit)
rootogram(fit)
ou com gráficos Ord que ajudam a identificar qual modelo de dados de contagem está subjacente (por exemplo, aqui a inclinação é positiva e a interceptação é positiva, o que indica uma distribuição binomial negativa):
Ord_plot(quine$Days)
ou com os gráficos "XXXXXXness" em que XXXXX é a distribuição de escolha, digamos gráfico Poissoness (que fala contra Poisson, tente também type="nbinom"
):
distplot(quine$Days, type="poisson")
Inspecione as medidas usuais de qualidade do ajuste (como estatísticas da razão de verossimilhança vs. modelo nulo ou similar):
mod1 <- glm(Days~Age+Sex, data=quine, family="poisson")
summary(mod1)
anova(mod1, test="Chisq")
Verifique se há excesso / subdispersão olhando para residual deviance/df
uma estatística formal de teste (por exemplo, veja esta resposta ). Aqui temos claramente uma super-dispersão:
library(AER)
deviance(mod1)/mod1$df.residual
dispersiontest(mod1)
Verifique se há pontos de influência e alavancagem , por exemplo, com influencePlot
o car
pacote. É claro que aqui muitos pontos são altamente influentes porque Poisson é um modelo ruim:
library(car)
influencePlot(mod1)
Verifique a inflação zero ajustando um modelo de dados de contagem e sua contrapartida zero inflada / obstáculo e compare-os (geralmente com AIC). Aqui, um modelo inflado a zero caberia melhor que o simples Poisson (novamente provavelmente devido à super-dispersão):
library(pscl)
mod2 <- zeroinfl(Days~Age+Sex, data=quine, dist="poisson")
AIC(mod1, mod2)
Plote os resíduos (bruto, desvio ou escala) no eixo y versus os valores previstos (log) (ou o preditor linear) no eixo x. Aqui vemos alguns resíduos muito grandes e um desvio substancial dos resíduos de desvio do normal (falando contra o Poisson; Edit: @ A resposta de FlorianHartig sugere que a normalidade desses resíduos não é de se esperar, portanto, essa não é uma pista conclusiva):
res <- residuals(mod1, type="deviance")
plot(log(predict(mod1)), res)
abline(h=0, lty=2)
qqnorm(res)
qqline(res)
Se estiver interessado, plote um gráfico de probabilidade meio normal de resíduos, plotando resíduos absolutos ordenados versus valores normais esperados Atkinson (1981) . Uma característica especial seria simular uma 'linha' e envelope de referência com intervalos de confiança simulados / iniciados por inicialização (ainda não mostrados):
library(faraway)
halfnorm(residuals(mod1))
Gráficos de diagnóstico para modelos lineares de log para dados de contagem (consulte os capítulos 7.2 e 7.7 no livro de Friendly). Plote valores previstos versus valores observados, talvez com alguma estimativa de intervalo (fiz exatamente para as faixas etárias - aqui vemos novamente que estamos muito distantes de nossas estimativas devido à super-dispersão, talvez, no grupo F3. Os pontos-de-rosa são a previsão do ponto um erro padrão):±
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)
Isso deve fornecer muitas informações úteis sobre sua análise e a maioria das etapas funciona para todas as distribuições de dados de contagem padrão (por exemplo, Poisson, Binomial Negativo, COM Poisson, Leis de Potência).
Para a abordagem de usar gráficos de diagnóstico padrão, mas desejando saber como eles devem ser, eu gosto do artigo:
Uma das abordagens mencionadas é a criação de vários conjuntos de dados simulados em que as suposições de interesse são verdadeiras e criar os gráficos de diagnóstico para esses conjuntos de dados simulados e também criar o gráfico de diagnóstico para os dados reais. coloque todos esses gráficos na tela ao mesmo tempo (colocando aleatoriamente o baseado em dados reais). Agora você tem uma referência visual de como devem ser as plotagens e, se as suposições forem válidas para os dados reais, essa plotagem deverá se parecer com as demais (se você não puder dizer quais são os dados reais, as suposições testadas provavelmente serão próximas) suficiente para verdadeiro), mas se o gráfico de dados real parecer claramente diferente do outro, isso significa que pelo menos uma das suposições não se aplica. A
vis.test
função no pacote TeachingDemos para R ajuda a implementar isso como um teste.fonte
Esta é uma pergunta antiga, mas achei que seria útil acrescentar que meu pacote DHARMa R (disponível no CRAN, veja aqui ) agora fornece resíduos padronizados para GLMs e GLMMs, com base em uma abordagem de simulação semelhante à sugerida por @GregSnow .
Na descrição do pacote:
@ Momo - você pode querer atualizar sua recomendação 6, é enganosa. Normalmente, a normalidade dos resíduos de desvio não é esperada sob um Poisson , conforme explicado na vinheta da DHARMa ou aqui ; e observar resíduos de desvio (ou quaisquer outros resíduos padrão) que diferem de uma linha reta em um gráfico qqnorm não é, portanto, em geral de modo algum preocupante . O pacote DHARMa fornece um gráfico qq que é confiável para diagnosticar desvios em relação a Poisson ou outras famílias GLM. Eu criei um exemplo que demonstra o problema com os resíduos de desvio aqui .
fonte
Existe uma função chamada
glm.diag.plots
no pacoteboot
, para gerar gráficos de diagnóstico para GLMs. O que faz:fonte