Ускорить функцию lmer в R

Я хотел бы поделиться некоторыми своими соображениями, пытаясь улучшить время моделирования модели линейной модели смешанных эффектов в R с помощью пакета lme4.

Размер набора данных:. Набор данных состоит приблизительно из 400 000 строк и 32 столбца. К сожалению, информация о характере данных не может быть передана.

Предположения и проверки: Предполагается, что переменная ответа поступает из нормального распределения. До процесса подгонки модели переменные тестировались на коллинеарность и мультиколлинеарность с использованием корреляционных таблиц и функции alias, предоставленной в R.

Непрерывные переменные были масштабированы, чтобы помочь сходимость.

Структура модели:. Уравнение модели содержит 31 фиксированный эффект (включая перехват) и 30 случайных эффектов (перехват не включен). Случайные эффекты рандомизированы для определенной фактор-переменной, которая имеет 2700 уровней. Структура ковариации - это компоненты Variance Components, поскольку предполагается, что существует независимость между случайными эффектами.

Пример уравнения модели:

lmer(Response ~ 1 + Var1 + Var2 + ... + Var30 + (Var1-1| Group) + (Var2-1| Group) + ... + (Var30-1| Group), data=data, REML=TRUE)

Модель была успешно установлена, однако для получения результатов потребовалось около 3,1 часа. Та же модель в SAS заняла несколько секунд. В Интернете есть доступная литература о том, как сократить время с помощью алгоритма нелинейной оптимизации nloptwrap и отсрочить вычисление производных затрат времени, которое выполняется после завершения optmization calc.derivs = FALSE:

https://cran.r-project.org/web/packages/lme4/vignettes/lmerperf.html

Время сократилось на 78%.

Вопрос: Есть ли другой альтернативный способ уменьшить время подбора модели, определяя соответственно входные параметры lmer? Существует так много разницы между R и SAS с точки зрения времени подбора модели.

Любое предложение оценивается.

Ответ 1

lmer() определяет оценки параметров путем оптимизации профилированного логарифмического подобия или профилированного REML-критерия по параметрам в ковариационной матрице случайных эффектов. В вашем примере будет 31 такой параметр, соответствующий стандартным отклонениям случайных эффектов от каждого из 31 терминов. Ограниченные оптимизации этого размера требуют времени.

Возможно, что SAS PROC MIXED имеет конкретные методы оптимизации или имеет более сложные способы определения начальных оценок. SAS, являющаяся системой с закрытым исходным кодом, означает, что мы не будем знать, что они делают.

Кстати, вы можете записать случайные эффекты как (1 + Var1 + Var2 +... + Var30 || Group)

Ответ 2

Мы реализовали регрессию случайных перехватов, предполагающую сложную симметрию в R-пакете Rfast. Команда: rint.reg. Он в 30 раз быстрее, чем соответствующая функция lme4. Я не знаю, поможет ли это, но на всякий случай.

https://cran.r-project.org/web/packages/Rfast/index.html

Ответ 3

Если вы используете glmer, а не lmer, есть параметр nAGQ. Я обнаружил, что установка nAGQ=0 резко сократила время, затрачиваемое на довольно сложную модель (13 фиксированных эффектов, один случайный эффект с переменным перехватом и наклоном, 300 тыс. Строк). Это в основном говорит glmer использовать менее точную форму оценки параметров для GLMM. Подробнее см. ?glmer или .