TL; DR: lme4
оптимізація виявляється лінійним по числу параметрів моделі за замовчуванням, і шлях повільніше , ніж аналогічна glm
модель з фіктивними змінними для груп. Чи можна щось зробити, щоб прискорити це?
Я намагаюся вписати досить велику ієрархічну модель logit (~ 50k рядків, 100 стовпців, 50 груп). Встановлення нормальної моделі logit до даних (з фіктивними змінними для групи) працює нормально, але ієрархічна модель, схоже, зациклюється: перша фаза оптимізації завершується прекрасно, але друга проходить через безліч ітерацій, не змінюючи нічого і не зупиняючись. .
EDIT: Я підозрюю, що проблема полягає в основному в тому, що в мене так багато параметрів, тому що коли я намагаюся встановити maxfn
нижче значення, воно дає попередження:
Warning message:
In commonArgs(par, fn, control, environment()) :
maxfun < 10 * length(par)^2 is not recommended.
Однак оцінки параметрів взагалі не змінюються протягом оптимізації, тому я все ще плутаюсь, що робити. Коли я намагався встановити maxfn
в оптимізаторі елементи керування (незважаючи на попередження), здавалося, висіло після завершення оптимізації.
Ось код, який відтворює проблему для випадкових даних:
library(lme4)
set.seed(1)
SIZE <- 50000
NGRP <- 50
NCOL <- 100
test.case <- data.frame(i=1:SIZE)
test.case[["grouping"]] <- sample(NGRP, size=SIZE, replace=TRUE, prob=1/(1:NGRP))
test.case[["y"]] <- sample(c(0, 1), size=SIZE, replace=TRUE, prob=c(0.05, 0.95))
test.formula = y ~ (1 | grouping)
for (i in 1:NCOL) {
colname <- paste("col", i, sep="")
test.case[[colname]] <- runif(SIZE)
test.formula <- update.formula(test.formula, as.formula(paste(". ~ . +", colname)))
}
print(test.formula)
test.model <- glmer(test.formula, data=test.case, family='binomial', verbose=TRUE)
Цей результат:
start par. = 1 fn = 19900.78
At return
eval: 15 fn: 19769.402 par: 0.00000
(NM) 20: f = 19769.4 at 0 <other numbers>
(NM) 40: f = 19769.4 at 0 <other numbers>
Я спробував встановити ncol
інші значення, і, здається, кількість виконаних ітерацій становить (приблизно) 40 на стовпчик. Очевидно, це стає величезним болем, оскільки я додаю більше колонок. Чи можна змінити алгоритм оптимізації, який зменшить залежність від кількості стовпців?
glmer
досить повільно, особливо для моделей, які мають складну структуру випадкових ефектів (наприклад, багато випадкових нахилів, перехрещених випадкових ефектів тощо). Першою моєю пропозицією було б спробувати ще раз спрощену структуру випадкових ефектів. Однак якщо ви зіткнулися з цією проблемою лише з випадковою моделлю перехоплення, вашою проблемою може бути просто кількість випадків, і в цьому випадку вам потрібно буде спробувати деякі інструменти, спеціалізовані для великих даних.