Як я можу пришвидшити розрахунок фіксованих ефектів в GLMM?


9

Я роблю імітаційне дослідження, яке вимагає оцінок завантаження, отриманих із узагальненої лінійної змішаної моделі (насправді добуток двох оцінок для фіксованих ефектів, однієї з ГЛМ та другої з ЛММ). Для того, щоб добре провести дослідження, знадобиться близько 1000 моделювання з 1000 або 1500 повторними завантаженнями завантажувача кожного разу. Це займає значну кількість часу на моєму комп’ютері (багато днів).

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

Якщо бути більш конкретним, у мене є суб'єкти, які вимірюються повторно трьома способами, породжуючи змінні X, M і Y, де X і M є безперервними, а Y - двійковим. У нас є два рівняння регресії

М=α0+α1Х+ϵ1
Y=β0+β1Х+β2М+ϵ2
де Y є базовою латентною безперервною змінною для а помилки не є iid. Статистика, яку ми хочемо завантажувати, це . Таким чином, кожна реплікація завантажувача вимагає встановлення LMM та GLMM. Мій R код (використовуючи lme4)Y
α1β2
    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)
    }

Я розумію, що я отримую таку ж оцінку для якщо я просто підходжу це як лінійна модель, так що це економить деякий час, але той самий трюк не працює для .α1β2

Мені просто потрібно придбати швидший комп'ютер? :)


1
@BR що тут шийка пляшки? В основному, на що потрібно час Rprof.
suncoolsu

1
Один із способів - просто ігнорувати "змішану" частину ГЛМ. Просто підходять до звичайного GLM, оцінки не сильно зміняться, але їх стандартні помилки, ймовірно, стануть
ймовірністьлогічна

@probabilityislogic. На додаток до Вашого зауваження, я також думаю, чи сильно відрізнятиметься відповідь, залежить від розміру групи та індивідуальної поведінки в групі. Як кажуть Гельман і Хілл: результати змішаних ефектів будуть між об'єднанням і відсутністю об'єднання. (Очевидно. Це для ієрархічних моделей Баєса, але змішані моделі - це класичний спосіб зробити те саме.)
suncoolsu

@probabilityislogic: Це працює для LMM, але, здається, не вдається для GLMM (мається на увазі, що я запускав моделі з такими даними та без зайвих М і в кінцевому підсумку отримав значно інші результати). Якщо, звичайно, не сталася помилка в реалізації glmer.
БР

@suncoolsu: вузьким місцем є оцінка GLMM, яка може пройти через пару секунд (особливо з декількома випадковими ефектами). Але зробіть це 1000 * 1000 разів, і це 280 годин обчислення. Встановлення GLM займає приблизно 1/100 часу.
БР

Відповіді:


4

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

Ви також можете розглянути питання про те, чи допущення для декларування конвергенції суворіші, ніж потрібно. Мені не зрозуміло, як їх змінити з lme4документації.


4

Перед придбанням нового комп'ютера теж врахуйте дві інші можливості.

  1. Паралельні обчислення - завантажувальний процес легко проводити паралельно. Якщо ваш комп’ютер досить новий, у вас, ймовірно, є чотири ядра. Погляньте на багатоядерну бібліотеку в Р.
  2. Хмарні обчислення - це також можливість і досить дешево. У мене є колеги, які використовували хмару Amazon для запуску сценаріїв R. Вони виявили, що це досить економічно.

1
Дякую за відповідь. Я якось не помітив того, що у мене є два ядра (мій комп'ютер не дуже новий). Я мав би давно поглянути на багатоядерний.
БР

2

Можливо, це може бути швидший комп'ютер. Але ось одна хитрість, яка може спрацювати.

Створіть моделювання Y, але лише умовно Y, тоді просто зробіть OLS або LMM на імітованому Y значення.

Припустимо, ваша функція зв’язку є г(.). це говорить про те, як ви отримуєте від ймовірностіY=1 до Y значення і, швидше за все, логістична функція г(z)=лог(z1-z).

Тож якщо ви припускаєте розподіл вибірки Бернулі для YYБеrноуллi(p), а потім скористайтеся джеффріми до того, що ймовірно, ви отримаєте бета-задню частину pБета(Yобс+12,1-Yобс+12). Моделювання цього має бути як освітлення, а якщо його немає, то вам потрібен швидший комп'ютер. Крім того, зразки є незалежними, тому не потрібно перевіряти будь-яку діагностику «конвергенції», як, наприклад, у MCMC, і вам, мабуть, не потрібно стільки зразків - 100 можуть працювати добре для вашого випадку. Якщо у вас двочленY'с, а потім просто замініть 1 у наведеному задньому с нi, кількість випробувань двочлена для кожного Yi.

Отже, у вас є набір модельованих значень pсiм. Потім ви застосовуєте функцію посилання до кожного з цих значень, щоб отриматиYсiм=г(pсiм). Встановити ЛММ доYсiм, що, ймовірно, швидше, ніж програма GLMM. Ви можете в основному ігнорувати вихідні бінарні значення (але не видаляти їх!) Та просто працювати з "матрицею імітації" (N×S, де N - розмір вибірки та S - кількість моделювання).

Тож у вашій програмі я замінив би гмлеr() функція з лмеr() функції, і Y за допомогою однієї симуляції ви створили б певний цикл, який застосовується лмеr() функціонує для кожного моделювання, а потім приймає середнє значення як оцінку б. Щось на зразок

а=
б=0
го с=1,,S
бест=лмеr(Yс)
б=б+1с(бест-б)
енг
rетуrн(аб)

Дайте мені знати, чи потрібно мені пояснити щось трохи чіткіше


Дякую за відповідь, мені знадобиться трохи перетравити це (і я вже маю плани на свою суботню ніч). Він досить інший, що мені незрозуміло, чи дає він таку ж відповідь, як і підхід GLMM, але мені потрібно про це більше думати.
BR
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.