Ускорьте функцию Lmer в R
Я хотел бы поделиться некоторыми своими мыслями при попытке улучшить время подгонки модели линейной модели смешанных эффектов вR
с использованиемlme4
пакет.
Размер набора данных: Набор данных состоит приблизительно из 400 000 строк и 32 столбцов. К сожалению, никакая информация не может быть передана о природе данных.
Допущения и проверки: Предполагается, что ответная переменная происходит из нормального распределения. До процесса подбора модели переменные были проверены на коллинеарность и мультиколлинеарность с использованием таблиц корреляции иalias
функция предусмотрена в R.
Непрерывные переменные были масштабированы, чтобы помочь сходимости.
Структура модели: Модельное уравнение содержит 31 фиксированный эффект (включая перехват) и 30 случайных эффектов (перехват не включен). Случайные эффекты рандомизированы для определенной переменной фактора, которая имеет 2700 уровней. Ковариационная структура - это дисперсионные компоненты, поскольку предполагается, что между случайными эффектами существует независимость.
Пример модельного уравнения:
lmer(Response ~ 1 + Var1 + Var2 + ... + Var30 + (Var1-1| Group) + (Var2-1| Group) + ... + (Var30-1| Group), data=data, REML=TRUE)
Модель была успешно установлена, однако для получения результатов потребовалось около 3,1 часа. Эта же модель в SAS заняла несколько секунд. В Интернете доступна литература о том, как сократить время с помощью алгоритма нелинейной оптимизации.nloptwrap
и выключение трудоемкого производного вычисления, которое выполняется после завершения оптимизацииcalc.derivs = FALSE
:
https://cran.r-project.org/web/packages/lme4/vignettes/lmerperf.html
Время сократилось на 78%.
Вопрос: Есть ли другой альтернативный способ сократить время подгонки модели, определивlmer
входные параметры соответственно? Существует так много различий между R и SAS с точки зрения времени подгонки модели.
Любое предложение приветствуется.