Как оценить подгонку биномиального GLMM с lme4 (> 1,0)?

19

У меня есть GLMM с биномиальным распределением и функцией logit link, и у меня есть ощущение, что важный аспект данных недостаточно хорошо представлен в модели.

Чтобы проверить это, я хотел бы знать, хорошо ли данные описываются линейной функцией на шкале логита. Следовательно, я хотел бы знать, хорошо ли ведут себя остатки. Тем не менее, я не могу узнать, на каком участке остатки построить, и как интерпретировать сюжет.

Обратите внимание, что я использую новую версию lme4 ( версия для разработчиков от GitHub ):

packageVersion("lme4")
## [1] ‘1.1.0’

Мой вопрос: как я могу проверить и интерпретировать остатки биномиальных обобщенных линейных смешанных моделей с функцией логит-линка?

Следующие данные представляют только 17% моих реальных данных, но процесс подгонки уже занимает около 30 секунд на моей машине, поэтому я оставляю это так:

require(lme4)
options(contrasts=c('contr.sum', 'contr.poly'))

dat <- read.table("http://pastebin.com/raw.php?i=vRy66Bif")
dat$V1 <- factor(dat$V1)

m1 <- glmer(true ~ distance*(consequent+direction+dist)^2 + (direction+dist|V1), dat, family = binomial)

Простейший plot ( ?plot.merMod) производит следующее:

plot(m1)

введите описание изображения здесь

Это уже говорит мне что-то?

Хенрик
источник
1
Я мог бы найти время, чтобы вернуться и взяться за это, но я думаю, что общий ответ заключается в том, что трудно сделать очень многое с остатками от бинарных моделей. Мое главное открытие так далеко от наезда на немного на участке у вас есть выше, и добавления сглаженной линии ( с использованием type=c("p","smooth")в plot.merMod, или перемещении , ggplotесли вы хотите , доверительные интервалы) в том , что она выглядит как есть небольшой , но важный шаблон, который вам может быть в состоянии исправить, приняв другую функцию ссылки. Вот и все ...
Бен Болкер,
@BenBolker Спасибо. И не могли бы вы просто опубликовать это и ссылку на фрикономику в качестве ответа на вопрос? Тогда, по крайней мере, вы получите 150 баллов.
Хенрик
3
Я нашел эту ветку резюме, stats.stackexchange.com/questions/63566/… , очень полезной. В посте объясняется, как создать заговор остатков в Р.
Нова
@ Генрик Не могли бы вы объяснить, как работает модель true ~ distance*(consequent+direction+dist)^2 + (direction+dist|V1)? Буду ли оценка отдавания модели взаимодействия distance*consequent, distance*direction, distance*distи наклона directionи dist которая изменяется в зависимости V1? Что (consequent+direction+dist)^2обозначает квадрат в ?
ABC
@ Генрик Я запустил твой код, и он показывает Warning message: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, : Model failed to converge with max|grad| = 0.123941 (tol = 0.001, component 1). Почему ?
Азбука

Ответы:

18

Короткий ответ, так как у меня нет времени на лучшее: это сложная проблема; Бинарные данные почти всегда требуют некоторого биннинга или сглаживания для оценки соответствия. Было несколько полезно использовать fortify.lmerMod(из lme4экспериментального) в сочетании с ggplot2и, в частности, geom_smooth()рисовать, по существу, тот же график, построенный по сравнению с остаточным, как у вас выше, но с доверительными интервалами (я также немного сузил пределы y для увеличения ( -5,5) регион). Это наводит на мысль о некотором систематическом изменении, которое можно улучшить путем настройки функции связи. (Я также попытался построить остатки против других предикторов, но это было не слишком полезно.)

Я попытался согласовать модель со всеми 3-сторонними взаимодействиями, но это не сильно улучшило ни отклонение, ни форму сглаженной остаточной кривой.

(логистический(Икс))λλ

## uses (fragile) internal C calls for speed; could use plogis(),
##  qlogis() for readability and stability instead
logitpower <- function(lambda) {
    L <- list(linkfun=function(mu)
              .Call(stats:::C_logit_link,mu^(1/lambda),PACKAGE="stats"),
              linkinv=function(eta)
              .Call(stats:::C_logit_linkinv,eta,PACKAGE="stats")^lambda,
              mu.eta=function(eta) {
                  mu <-  .Call(stats:::C_logit_linkinv,eta,PACKAGE="stats")
                  mu.eta <-  .Call(stats:::C_logit_mu_eta,eta,PACKAGE="stats")
                  lambda*mu^(lambda-1)*mu.eta
              },
              valideta = function(eta) TRUE ,
              name=paste0("logit-power(",lambda,")"))
    class(L) <- "link-glm"
    L
}

λ

Смотрите также: http://freakonometrics.hypotheses.org/8210

Бен Болкер
источник
3

Это очень распространенная тема на курсах по биостатистике / эпидемиологии, и для нее не очень удачные решения, в основном из-за характера модели. Часто решением было избежать детальной диагностики с использованием остатков.

Бен уже писал, что для диагностики часто требуется либо биннинг, либо сглаживание. Объединение остатков доступно (или было) в пакете R, см., Например, эту нить . Кроме того, проделана определенная работа, в которой используются предсказанные вероятности; одна возможность - это разделительный участок, который обсуждался ранее в этой теме . Это может или не может напрямую помочь в вашем случае, но может помочь интерпретации.

JTT
источник
-1

Вы можете использовать AIC вместо остаточных участков для проверки соответствия модели. Команда в R: AIC (model1) даст вам число ... так что вам нужно сравнить это с другой моделью (например, с большим количеством предикторов) - AIC (model2), которая выдаст другое число. Сравните два выхода, и вы захотите модель с более низким значением AIC.

Кстати, такие вещи, как AIC и отношение правдоподобия журналов, уже перечислены, когда вы получите сводную информацию о своей модели блеска, и обе они дадут вам полезную информацию о соответствии модели. Требуется большое отрицательное число для логарифмического отношения правдоподобия, чтобы отклонить нулевую гипотезу.

user108972
источник
3
Это было бы более полезно, если бы ОП пытался сравнить конкурирующие модели, но, похоже, это не то, что они пытаются сделать, и AIC нельзя использовать для оценки абсолютного соответствия модели.
Патрик Куломб
-3

График «Выровненный против остатков» не должен показывать какой-либо (четкий) рисунок. График показывает, что модель плохо работает с данными. См. Http://www.r-bloggers.com/model-validation-interpreting-residual-plots/

lankoski
источник
1
Я думаю, что вы не правы, определенная закономерность предсказывается с помощью функции ссылки: stats.stackexchange.com/q/25068/442
Henrik
1
Возможно, полезно: freakonometrics.hypotheses.org/8210
Бен Болкер,