Как я могу ускорить расчет фиксированных эффектов в GLMM?

9

Я занимаюсь имитационным исследованием, которое требует начальной загрузки оценок, полученных из обобщенной линейной смешанной модели (на самом деле, это произведение двух оценок для фиксированных эффектов, одна из GLMM и одна из LMM). Чтобы хорошо провести исследование, потребовалось бы около 1000 симуляций с 1000 или 1500 повторений бутстрапа каждый раз. Это занимает значительное время на моем компьютере (много дней).

How can I speed up the computation of these fixed effects?

Чтобы быть более точным, у меня есть предметы, которые измеряются неоднократно тремя способами, приводя к переменным X, M и Y, где X и M непрерывны, а Y - двоичны. У нас есть два уравнения регрессии

M=α0+α1X+ϵ1
Y=β0+β1X+β2M+ϵ2
где Y - скрытая скрытая переменная, лежащая в основе и ошибки не выявлены , Статистика, которую мы хотим - Y α 1 β 2Y
α1β2, Таким образом, каждая репликация начальной загрузки требует установки LMM и GLMM. Мой код R (с помощью lme4)
    stat=function(dat){
        a=fixef(lmer(M~X+(X|person),data=dat))["X"]
        b=fixef(glmer(Y~X+M+(X+M|person),data=dat,family="binomial"))["M"]
        return(a*b)
    }

Я понимаю, что получаю ту же оценку для если я просто подгоняю ее как линейную модель, так что это экономит время, но тот же трюк не работает для β 2 .α1β2

Мне просто нужно купить более быстрый компьютер? :)

BR
источник
1
@BR что здесь горлышко бутылки? В основном то, что занимает время Rprof.
Suncoolsu
1
Один из способов - просто игнорировать «смешанную» часть GLMM. Просто подойдет для обычного GLM, оценки не сильно изменятся, но их стандартные ошибки, вероятно, будут
вероятностная
@probabilityislogic. В дополнение к вашему замечанию, я также думаю, сильно ли будет отличаться ответ, зависит от размера группы и индивидуального поведения в группе. Как говорят Гельман и Хилл: результаты модели смешанных эффектов будут между объединением и отсутствием объединения. (Обв. Это для байесовских иерархических моделей, но смешанные модели являются классическим способом сделать то же самое.)
suncoolsu
@probabilityislogic: Это работает для LMM, но, похоже, не работает для GLMM (это означает, что я запускал модели с дополнительным M и без него на одних и тех же данных и в результате получил существенно разные результаты). Если, конечно, есть ошибка в реализации glmer.
BR
@suncoolsu: узким местом является оценка GLMM, которая может занять пару секунд (особенно с несколькими случайными эффектами). Но сделайте это 1000 * 1000 раз, и это 280 часов вычислений. Установка GLM занимает около 1/100 времени.
BR

Ответы:

4

Это должно помочь определить начальные значения, хотя трудно понять, сколько. Когда вы выполняете симуляцию и загрузку, вы должны знать «истинные» значения или не загруженные оценки, или и то, и другое. Попробуйте использовать их в start =опции glmer.

Вы также можете рассмотреть вопрос о том, являются ли допуски для объявления сходимости более строгими, чем необходимо. Я не ясно, как изменить их из lme4документации, хотя.

универсальный
источник
4

Перед покупкой нового компьютера тоже рассмотрите две другие возможности.

  1. Параллельные вычисления - запуск параллельной загрузки очень прост. Если ваш компьютер достаточно новый, у вас, вероятно, четыре ядра. Посмотрите на многоядерный библиотеку в R.
  2. Облачные вычисления также возможны и достаточно дешевы. У меня есть коллеги, которые использовали облако Amazon для запуска R-скриптов. Они обнаружили, что это было довольно экономически эффективным.
csgillespie
источник
1
Спасибо за ответ. Почему-то я упустил из виду тот факт, что у меня есть два ядра (мой компьютер не очень новый). Я должен был посмотреть на многоядерный давным-давно.
BR
2

Это может быть более быстрый компьютер. Но вот одна хитрость, которая может сработать.

Создайте симуляцию , но только с условием Y , затем просто выполните OLS или LMM на смоделированных значениях Y .YYY

Предположим, что ваша функция ссылки . это говорит о том, как вы получаете от вероятности Y = 1 до значения Y , и, скорее всего, является логистической функцией g ( z ) = l o g ( zg(.)Y=1Y.г(Z)знак равноLог(Z1-Z)

YY~ВерNоULLя(п)п~ВеTa(Yобs+12,1-Yобs+12)Y's1NяYя

пsямYsямзнак равног(пsям)YsямN×SNS

гмLер()Lмер()YLмер()б

aзнак равно...
бзнак равно0
dо sзнак равно1,...,S
беsTзнак равноLмер(Ys...)
бзнак равноб+1s(беsT-б)
еNd
реTUрN(a*б)

Дайте мне знать, если мне нужно объяснить что-нибудь немного яснее

probabilityislogic
источник
Спасибо за ответ, мне понадобится немного, чтобы переварить его (и у меня уже есть планы на мой субботний вечер). Он достаточно отличается, так что мне не ясно, дает ли он тот же ответ, что и подход GLMM, но мне нужно больше об этом думать.
BR