Вот что мне обычно нравится делать (для иллюстрации я использую слишком рассеянные и не очень легко смоделированные данные по квинам дней учеников, отсутствующих в школе 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 Пуассона, Степенных законов).
За подход, основанный на использовании стандартных диагностических графиков, но желающий знать, как они должны выглядеть, мне нравится статья:
Один из упомянутых подходов заключается в создании нескольких смоделированных наборов данных, в которых интересующие предположения верны, и создании диагностических графиков для этих смоделированных наборов данных, а также создании диагностического графика для реальных данных. поместите все эти графики на экран одновременно (случайным образом разместив график на основе реальных данных). Теперь у вас есть визуальная справка о том, как должны выглядеть графики, и если предположения верны для реальных данных, тогда этот график должен выглядеть точно так же, как и другие (если вы не можете сказать, какие данные являются реальными, то тестируемые предположения, вероятно, близки достаточно, чтобы быть правдой), но если график реальных данных выглядит явно отличным от другого, то это означает, что по крайней мере одно из предположений не выполняется.
vis.test
Функция в пакете TeachingDemos для R помогает реализовать это как испытание.источник
Это старый вопрос, но я подумал, что было бы полезно добавить, что мой пакет DHARMa R (доступный от CRAN, см. Здесь ) теперь предоставляет стандартизированные остатки для GLM и GLMM, основанные на подходе моделирования, подобном тому, что предлагает @GregSnow ,
Из описания пакета:
@Momo - вы можете обновить свою рекомендацию 6, это вводит в заблуждение. Нормальность остатков отклонения в целом не ожидается при Пуассоне , как объяснено в виньетке DHARMa или здесь ; и, следовательно, определение отклонений от отклонения (или любых других стандартных остатков), которые отличаются от прямой линии на графике qqnorm, вообще не имеет значения . Пакет DHARMa предоставляет график qq, который является надежным для диагностики отклонений от Пуассона или других семейств GLM. Я создал пример, который демонстрирует проблему с остатками отклонения здесь .
источник
В
glm.diag.plots
пакете есть функцияboot
, которая генерирует диагностические графики для GLM. Что оно делает:источник