Вот что мне обычно нравится делать (для иллюстрации я использую слишком рассеянные и не очень легко смоделированные данные по квинам дней учеников, отсутствующих в школе MASS
):
Протестируйте и нанесите на график исходные данные подсчета , нанеся на график наблюдаемые частоты и установленные частоты (см. Главу 2 в разделе « Дружественный» ), который поддерживается vcd
пакетом R
в основном. Например, с goodfit
и rootogram
:
library(MASS)
library(vcd)
data(quine)
fit <- goodfit(quine$Days)
summary(fit)
rootogram(fit)
или с графиками Ord, которые помогают определить, какая модель данных счета лежит в основе (например, здесь наклон положительный, а пересечение положительное, что говорит об отрицательном биномиальном распределении):
Ord_plot(quine$Days)
или с графиками «XXXXXXness», где XXXXX - это распределение выбора, скажем, график Пуассона (который говорит против Пуассона, попробуйте также type="nbinom"
):
distplot(quine$Days, type="poisson")
Проверьте обычные показатели соответствия (например, статистику отношения правдоподобия по сравнению с нулевой моделью или аналогичную):
mod1 <- glm(Days~Age+Sex, data=quine, family="poisson")
summary(mod1)
anova(mod1, test="Chisq")
Проверьте наличие избыточной / недостаточной дисперсии , посмотрев на residual deviance/df
статистику теста или на нее (например, см. Этот ответ ). Здесь мы имеем явно избыточную дисперсию:
library(AER)
deviance(mod1)/mod1$df.residual
dispersiontest(mod1)
Проверьте наличие точек влияния и рычагов , например, influencePlot
в car
пакете. Конечно, здесь многие моменты имеют большое влияние, потому что Пуассон - плохая модель:
library(car)
influencePlot(mod1)
Проверьте нулевую инфляцию , подобрав модель данных подсчета и ее аналог с нулевой инфляцией / препятствием и сравните их (обычно с AIC). Здесь модель с нулевым раздувом подойдет лучше, чем простой Пуассон (опять же, вероятно, из-за чрезмерной дисперсии):
library(pscl)
mod2 <- zeroinfl(Days~Age+Sex, data=quine, dist="poisson")
AIC(mod1, mod2)
Нарисуйте остатки (необработанные, отклонения или масштабированные) на оси Y против предсказанных (log) значений (или линейного предиктора) на оси X. Здесь мы видим некоторые очень большие остатки и существенное отклонение от остатков отклонения от нормы (выступая против Пуассона; Edit: ответ @ FlorianHartig предполагает, что нормальность этих остатков не следует ожидать, так что это не окончательный ключ):
res <- residuals(mod1, type="deviance")
plot(log(predict(mod1)), res)
abline(h=0, lty=2)
qqnorm(res)
qqline(res)
Если интересно, построите график вероятности остатков наполовину нормальный путем построения упорядоченных абсолютных остатков в сравнении с ожидаемыми нормальными значениями Аткинсон (1981) . Особой функцией будет симуляция эталонной «линии» и огибающей с имитированными / загруженными доверительными интервалами (не показаны):
library(faraway)
halfnorm(residuals(mod1))
Диагностические графики для логарифмических линейных моделей для данных счета (см. Главы 7.2 и 7.7 в книге Френдли). Прогнозируемые на графике зависимости от наблюдаемых значений, возможно, с некоторой интервальной оценкой (я сделал это только для возрастных групп - здесь мы снова видим, что мы довольно далеки от наших оценок из-за чрезмерной дисперсии, возможно, в группе F3. Розовые точки прогноз точки одна стандартная ошибка):±
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)
Это должно дать вам много полезной информации о вашем анализе, и большинство шагов работают для всех стандартных распределений подсчета (например, Пуассона, Отрицательного бинома, COM Пуассона, Степенных законов).