Диагностические участки для подсчета регрессии


88

Какие диагностические графики (и, возможно, формальные тесты) вы считаете наиболее информативными для регрессий, где результат представляет собой переменную счета?

Я особенно заинтересован в пуассоновских и отрицательных биномиальных моделях, а также в аналогах с нулевой раздувкой и препятствием каждой из них. Большинство источников, которые я обнаружил, просто наносят графики остатков в зависимости от подгоночных значений без обсуждения того, как эти графики «должны» выглядеть.

Мудрость и рекомендации очень ценятся. Предыстория о том, почему я спрашиваю это, если это уместно, является моим другим вопросом .

Связанные обсуждения:

Ответы:


101

Вот что мне обычно нравится делать (для иллюстрации я использую слишком рассеянные и не очень легко смоделированные данные по квинам дней учеников, отсутствующих в школе MASS):

  1. Протестируйте и нанесите на график исходные данные подсчета , нанеся на график наблюдаемые частоты и установленные частоты (см. Главу 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")
  2. Проверьте обычные показатели соответствия (например, статистику отношения правдоподобия по сравнению с нулевой моделью или аналогичную):

    mod1 <- glm(Days~Age+Sex, data=quine, family="poisson")
    summary(mod1)
    anova(mod1, test="Chisq")
    
  3. Проверьте наличие избыточной / недостаточной дисперсии , посмотрев на residual deviance/dfстатистику теста или на нее (например, см. Этот ответ ). Здесь мы имеем явно избыточную дисперсию:

    library(AER)
    deviance(mod1)/mod1$df.residual
    dispersiontest(mod1)
    
  4. Проверьте наличие точек влияния и рычагов , например, influencePlotв carпакете. Конечно, здесь многие моменты имеют большое влияние, потому что Пуассон - плохая модель:

    library(car)
    influencePlot(mod1)
    
  5. Проверьте нулевую инфляцию , подобрав модель данных подсчета и ее аналог с нулевой инфляцией / препятствием и сравните их (обычно с AIC). Здесь модель с нулевым раздувом подойдет лучше, чем простой Пуассон (опять же, вероятно, из-за чрезмерной дисперсии):

    library(pscl)
    mod2 <- zeroinfl(Days~Age+Sex, data=quine, dist="poisson")
    AIC(mod1, mod2)
    
  6. Нарисуйте остатки (необработанные, отклонения или масштабированные) на оси Y против предсказанных (log) значений (или линейного предиктора) на оси X. Здесь мы видим некоторые очень большие остатки и существенное отклонение от остатков отклонения от нормы (выступая против Пуассона; Edit: ответ @ FlorianHartig предполагает, что нормальность этих остатков не следует ожидать, так что это не окончательный ключ):

    res <- residuals(mod1, type="deviance")
    plot(log(predict(mod1)), res)
    abline(h=0, lty=2)
    qqnorm(res)
    qqline(res)
    
  7. Если интересно, построите график вероятности остатков наполовину нормальный путем построения упорядоченных абсолютных остатков в сравнении с ожидаемыми нормальными значениями Аткинсон (1981) . Особой функцией будет симуляция эталонной «линии» и огибающей с имитированными / загруженными доверительными интервалами (не показаны):

    library(faraway)
    halfnorm(residuals(mod1))
    
  8. Диагностические графики для логарифмических линейных моделей для данных счета (см. Главы 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 Пуассона, Степенных законов).


6
Отличный исчерпывающий ответ! Было также полезно пройти эту диагностику с данными, смоделированными по Пуассону, чтобы тренировать мой взгляд на то, как должны выглядеть графики.
полупансион

Должен ли я дать больше объяснений тому, что заговоры делают, или это было нормально?
Момо

2
Интересное примечание: я обнаружил, что распределение NB редко соответствует моделируемым данным NB, основанным на тесте GOF, графике, графике Ord и графике NB. Исключением являются, по-видимому, очень «ручные» данные NB, которые почти симметричны - высокое значение mu, высокое значение тета.
половина прохода

1
Хм, вы уверены, что используете аргумент type = "nbinomial"? Например, fm <- glm.nb (Days ~., Data = quine); манекен <- рнегбин (установлен (фм), тета = 4,5) работает нормально.
Момо

@ Момо, спасибо - я делал что-то вроде x = rnegbin (n = 1000, mu = 10, theta = 1); fit = goodfit (x, type = "nbinomial"); Резюме (подходит). Установка тета = 4,5 действительно улучшает подгонку, но она все еще часто p <0,05, и рутограмма может выглядеть довольно плохо. Именно поэтому я понимаю разницу между нашими симуляциями: у вас каждое значение фиктивного значения моделировалось из другого среднего параметра (значение в подобранном (фм)), верно? В шахте, все они имеют средний 10.
Принимание

14

За подход, основанный на использовании стандартных диагностических графиков, но желающий знать, как они должны выглядеть, мне нравится статья:

 Buja, A., Cook, D. Hofmann, H., Lawrence, M. Lee, E.-K., Swayne,
 D.F and Wickham, H. (2009) Statistical Inference for exploratory
 data analysis and model diagnostics Phil. Trans. R. Soc. A 2009
 367, 4361-4383 doi: 10.1098/rsta.2009.0120

Один из упомянутых подходов заключается в создании нескольких смоделированных наборов данных, в которых интересующие предположения верны, и создании диагностических графиков для этих смоделированных наборов данных, а также создании диагностического графика для реальных данных. поместите все эти графики на экран одновременно (случайным образом разместив график на основе реальных данных). Теперь у вас есть визуальная справка о том, как должны выглядеть графики, и если предположения верны для реальных данных, тогда этот график должен выглядеть точно так же, как и другие (если вы не можете сказать, какие данные являются реальными, то тестируемые предположения, вероятно, близки достаточно, чтобы быть правдой), но если график реальных данных выглядит явно отличным от другого, то это означает, что по крайней мере одно из предположений не выполняется. vis.testФункция в пакете TeachingDemos для R помогает реализовать это как испытание.


6
Пример с приведенными выше данными для записи: mod1 <- glm (Days ~ Age + Sex, data = quine, family = "poisson"); если (интерактивный ()) {vis.test (остатки (mod1, тип = "ответ"), vt.qqnorm, nrow = 5, Ncol = 5, npage = 3)}
половина прохода

13

Это старый вопрос, но я подумал, что было бы полезно добавить, что мой пакет DHARMa R (доступный от CRAN, см. Здесь ) теперь предоставляет стандартизированные остатки для GLM и GLMM, основанные на подходе моделирования, подобном тому, что предлагает @GregSnow ,

Из описания пакета:

Пакет DHARMa использует подход, основанный на моделировании, для создания легко интерпретируемых масштабированных невязок из подогнанных обобщенных линейных смешанных моделей. В настоящее время поддерживаются все классы 'merMod' из 'lme4' ('lmerMod', 'glmerMod'), 'glm' (включая 'negbin' из 'MASS', но исключая квази-распределения) и классы моделей 'lm'. В качестве альтернативы можно также обрабатывать созданные извне симуляции, например апостериорные прогностические симуляции из байесовского программного обеспечения, такого как «JAGS», «STAN» или «BUGS». Результирующие невязки стандартизированы до значений от 0 до 1 и могут быть интерпретированы как интуитивно как остатки от линейной регрессии. Пакет также предоставляет ряд функций построения и тестирования для типичной проблемы неправильного определения модели,

@Momo - вы можете обновить свою рекомендацию 6, это вводит в заблуждение. Нормальность остатков отклонения в целом не ожидается при Пуассоне , как объяснено в виньетке DHARMa или здесь ; и, следовательно, определение отклонений от отклонения (или любых других стандартных остатков), которые отличаются от прямой линии на графике qqnorm, вообще не имеет значения . Пакет DHARMa предоставляет график qq, который является надежным для диагностики отклонений от Пуассона или других семейств GLM. Я создал пример, который демонстрирует проблему с остатками отклонения здесь .


4

В glm.diag.plotsпакете есть функция boot, которая генерирует диагностические графики для GLM. Что оно делает:

Составляет график остатков отклонения складного ножа по сравнению с линейным предиктором, график нормальных оценок остатков стандартизированного отклонения, график приблизительной статистики Кука по отношению к плечу / (1-плечо) и график случая статистики Кука.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.