R: Логистическая регрессия смешанной модели с начальной загрузкой с использованием bootMer() нового пакета lme4

Я хочу использовать новую функцию bootMer() нового пакета lme4 (в настоящее время версия для разработчиков). Я новичок в R и не знаю, какую функцию мне написать для аргумента FUN. Он говорит, что ему нужен числовой вектор, но я понятия не имею, что эта функция будет выполнять. Итак, у меня есть формула смешанной модели, которая приводится к bootMer() и имеет несколько повторений. Так что я не знаю, что делает эта внешняя функция? Это должен быть шаблон для методов начальной загрузки? Разве методы начальной загрузки уже не реализованы в bootMer? Так зачем им внешняя "статистика интереса"? И какую интересующую статистику мне следует использовать?

Подходит ли следующий синтаксис для работы? R продолжает генерировать ошибку, генерируя, что FUN должен быть числовым вектором. Я не знаю, как отделить оценки от "подгонки", да и вообще стоит ли это делать? Я могу просто сказать, что я потерялся с этим «ВЕСЕЛЫМ» аргументом. Также я не знаю, должен ли я передать формулу glmer() смешанной модели, используя переменную «Mixed5», или я должен передать некоторые указатели и ссылки? В примерах я вижу, что X (первый аргумент bootMer() — это объект *lmer(). Я хотел написать *Mixed5, но это выдало ошибку.

Большое спасибо.

Мой код:

library(lme4)
library(boot)

(mixed5 <- glmer(DV ~ (Demo1 +Demo2 +Demo3 +Demo4 +Trt)^2 
                 + (1 | PatientID) + (0 + Trt | PatientID)
                 , family=binomial(logit), MixedModelData4))


FUN <- function(formula) {
  fit <- glmer(DV ~ (Demo1 +Demo2 +Demo3 +Demo4 +Trt)^2 
               + (1 | PatientID) + (0 + Trt | PatientID)
               , family=binomial(logit), MixedModelData4)
  return(coef(fit))
}

result <- bootMer(mixed5, FUN, nsim = 3, seed = NULL, use.u = FALSE,
        type = c("parametric"),
        verbose = T, .progress = "none", PBargs = list())

result
FUN
fit

И ошибка:

Error in bootMer(mixed5, FUN, nsim = 3, seed = NULL, use.u = FALSE, type = c("parametric"),  : 
  bootMer currently only handles functions that return numeric vectors

-------------------------------------------------- ------ Обновлять ------------------------------------------- ----------

Я отредактировал код так, как сказал Бен. Код работал очень хорошо, но SE и Biases были нулевыми. Также знаете ли вы, как извлечь значения P из этого вывода (для меня это странно)? Должен ли я использовать смешанный() пакета afex?

Мой исправленный код:

library(lme4)
library(boot)

(mixed5 <- glmer(DV ~ (Demo1 +Demo2 +Demo3 +Demo4 +Trt)^2 
                + (0 + Trt | PatientID)
                 , family=binomial(logit), MixedModelData4))


FUN <- function(fit) {
  fit <- glmer(DV ~ (Demo1 +Demo2 +Demo3 +Demo4 +Trt)^2 
               + (1 | PatientID) + (0 + Trt | PatientID)
               , family=binomial(logit), MixedModelData4)
  return(fixef(fit))
}

result <- bootMer(mixed5, FUN, nsim = 3)

result

-------------------------------------------------- ------ Обновление 2 ------------------------------------------ -----------

Я также пробовал следующее, но код выдавал предупреждения и не давал никакого результата.

(mixed5 <- glmer(DV ~ Demo1 +Demo2 +Demo3 +Demo4 +Trt 
                 + (1 | PatientID) + (0 + Trt | PatientID)
                 , family=binomial(logit), MixedModelData4))

FUN <- function(mixed5) {
  return(fixef(mixed5))}

result <- bootMer(mixed5, FUN, nsim = 2)

Предупреждающее сообщение:

In bootMer(mixed5, FUN, nsim = 2) : some bootstrap runs failed (2/2)
> result

Call:
bootMer(x = mixed5, FUN = FUN, nsim = 2)

Bootstrap Statistics :
WARNING: All values of t1* are NA
WARNING: All values of t2* are NA
WARNING: All values of t3* are NA
WARNING: All values of t4* are NA
WARNING: All values of t5* are NA
WARNING: All values of t6* are NA

-------------------------------------------------- ------ Обновление 3 ------------------------------------------- -----------

Этот код также генерирует предупреждения:

FUN <- function(fit) {
  return(fixef(fit))}

result <- bootMer(mixed5, FUN, nsim = 2)

Предупреждения и результаты:

Warning message:
In bootMer(mixed5, FUN, nsim = 2) : some bootstrap runs failed (2/2)
> result

Call:
bootMer(x = mixed5, FUN = FUN, nsim = 2)

Bootstrap Statistics :
WARNING: All values of t1* are NA
WARNING: All values of t2* are NA
WARNING: All values of t3* are NA
WARNING: All values of t4* are NA
WARNING: All values of t5* are NA
WARNING: All values of t6* are NA

person Vic    schedule 26.08.2013    source источник


Ответы (2)


Здесь есть две (простые) путаницы.

  • Первый находится между coef() (который возвращает список матриц) и fixef() (который возвращает вектор коэффициентов с фиксированным эффектом): я предполагаю, что fixef() — это то, что вам нужно, хотя вам может понадобиться что-то вроде c(fixef(mixed),unlist(VarCorr(mixed))).
  • во-вторых, FUN должен принимать на вход подогнанный объект модели...

Например:

library(lme4)
library(boot)

mixed <- glmer(incidence/size ~ period + (1|herd),
               weights=size, data=cbpp, family=binomial)

FUN <- function(fit) {
    return(fixef(fit))
}

result <- bootMer(mixed, FUN, nsim = 3)

result

## Call:
## bootMer(x = mixed, FUN = FUN, nsim = 3)
## Bootstrap Statistics :
##      original      bias    std. error
## t1* -1.398343 -0.20084060  0.09157886
## t2* -0.991925  0.02597136  0.18432336
## t3* -1.128216 -0.03456143  0.05967291
## t4* -1.579745 -0.08249495  0.38272580
## 
person Ben Bolker    schedule 26.08.2013
comment
Я соответствующим образом изменил код (обновление по моему вопросу), и он работал гладко и без ошибок. Однако у меня есть 2 вопроса: все смещения и SE равны нулю. 2: что это за строки? (я имею в виду t1, t2...)? Необработанные бутстрапированные ресемплы? Есть ли способ извлечь оценки и значения P из этого вывода? - person Vic; 26.08.2013
comment
(1) вам не следует повторно запускать модель в FUN — просто используйте вызов fixef() сам по себе. (2) t1, t2, ... на выходе - значения фиксированных оценок эффекта. (3) Вам обязательно стоит посмотреть на ?confint.merMod... - person Ben Bolker; 26.08.2013
comment
Большое спасибо за все эти драгоценные камни. Я также использовал это: FUN ‹- function(fit) { return(fixef(fit)) [см. мое обновление 2], но оценки не были сгенерированы. Но исправлю СПАСИБО :) - person Vic; 26.08.2013
comment
о, я вижу, извините, извините! Я дал ему подходящий объект (вместо подходящего объекта) - person Vic; 26.08.2013
comment
Э-э, я подошёл к этому, но произошли другие предупреждения, и в результате были предупреждения об артефактах. (подробности в обновлении 3) - person Vic; 26.08.2013
comment
В последнем примере вы выполнили только две симуляции начальной загрузки, и обе они потерпели неудачу. Нет ничего необычного в том, что некоторые реализации начальной загрузки терпят неудачу при повторной подгонке, но если модель и данные разумны, это не должно быть все из них. Можете ли вы повторить попытку с более разумным числом (скажем, 20? для реального вывода вы должны использовать 100-200 или больше, но 20 должно быть достаточно для следующего этапа тестирования). (Если у вас несколько ядер, вы также можете включить некоторые параллельные функции...) - person Ben Bolker; 26.08.2013
comment
Большое спасибо, мой дорогой Бен. Я установил nsim на 50, а затем на 1000. В обоих случаях одно и то же предупреждение появилось в течение 10 секунд. Предупреждающее сообщение: в bootMer (mixed5, FUN, nsim = 1000): некоторые запуски начальной загрузки завершились неудачно (1000/1000) - person Vic; 26.08.2013
comment
Хорошо, тогда; Я не вижу ничего очевидно неправильного, а это значит, что следующий шаг — это воспроизводимый пример. Можете ли вы либо (предпочтительно 1) опубликовать воспроизводимый пример ‹tinyurl.com/reproducible-000›, либо (2, если необходимо) пришлите мне свои данные? - person Ben Bolker; 26.08.2013
comment
(Я установил слишком малое количество симуляций, чтобы сделать отладку как можно короче, но я бы использовал числа, которые вы предложили в своем эксперименте) :) Еще раз спасибо. Но я не знаю, в чем причина проблемы. Нужно ли мне также устанавливать последнюю версию пакета BOOT для разработки? возможно версия CRAN не совместима с новым lme4. - person Vic; 26.08.2013
comment
Я могу отправить вам свои данные, но они конфиденциальны, я не могу размещать их в Интернете :) - person Vic; 26.08.2013
comment
давайте продолжим это обсуждение в чате - person Ben Bolker; 26.08.2013

Это может быть та же проблема, о которой я сообщал здесь. По крайней мере, это приводит к тому же бесполезному сообщению об ошибке, и мне тоже потребовалось некоторое время.

Это будет означать, что в ваших данных есть пропуски, которые Imer игнорирует, но которые убивают bootMer.

Пытаться:

(mixed5 <- glmer(DV ~ (Demo1 +Demo2 +Demo3 +Demo4 +Trt)^2 
                 + (1 | PatientID) + (0 + Trt | PatientID)
                 , family=binomial(logit), na.omit(MixedModelData4[,c('DV','Demo1','Demo2','Demo3','Trt','PatientId')])))
person Ruben    schedule 04.12.2013
comment
Большое спасибо. Тем не менее, у меня нет недостающих данных. Но я должен сказать, что мои данные могут быть патологическими. - person Vic; 05.12.2013
comment
@Vic Ты бы, наверное, это понял. Но теперь, по крайней мере, этот простой ответ есть здесь для людей, которые гуглят сообщение об ошибке. Я действительно не понимаю, что вы имеете в виду под патологическими данными? Возникают ли у вас те же проблемы с простой моделью с теми же данными? - person Ruben; 05.12.2013
comment
Я ценю твой поступок, Рубен. Также я предлагаю вам следовать инструкциям Бена Болкера и загружать свои данные или аналогичные данные в онлайн-репозиторий, чтобы разработчики пакетов могли работать над ошибкой. (См. нашу беседу с Беном Болкером и прочтите его инструкции).... Патологические данные означают данные, страдающие от полного/частичного разделения, или серьезной мультиколлинеарности, или и того, и другого. - person Vic; 06.12.2013
comment
@vic А, хорошо. Если вы перейдете по ссылке на GitHub issue, вы увидите, что я уже создал воспроизводимый пример с демонстрационными данными — на самом деле требуется всего несколько недостающих данных в других нормальных данных. - person Ruben; 06.12.2013