Мне нужно запустить логическую регрессию на относительно большом кадре данных с 480 000 записей с тремя фиксированными переменными эффекта. Фиксированный эффект var A имеет 3233 уровня, var B имеет 2326 уровней, var C имеет 811 уровней. Итак, у меня есть 6370 фиксированных эффектов. Данные являются поперечными. Если я не могу запустить эту регрессию, используя обычную функцию glm
, потому что матрица регрессии кажется слишком большой для моей памяти (я получаю сообщение "Error: cannot allocate vector of size 22.9 Gb
" ). Я ищу альтернативные способы запуска этой регрессии на моем Macbook Air (OS X 10.9.5 8GB RAM). У меня также есть доступ к серверу с ОЗУ 16 ГБ.
Я попытался решить проблему несколькими способами, но пока ни один не привел к удовлетворительным результатам:
LFE/felm:
Используя функцию регрессии felm lfe
package, которая вычитает фиксированные эффекты перед запуском регрессии. Это работает отлично и позволило мне запустить вышеупомянутую регрессию как обычную линейную модель всего за несколько минут. Однако lfe
не поддерживает логистические регрессии и glms. Таким образом, felm отлично подходит для получения идеи о пригодности модели для разных моделей, но не работает для окончательных моделей логистической регрессии.
biglm/bigglm:
Я думал об использовании bigglm
, чтобы разбить мою функцию на более управляемые куски. Однако несколько источников (например, link1, link2, link3) упомянуть, что для того, чтобы это работало, уровни факторов должны быть согласованными по кускам, т.е. каждый кусок должен содержать по крайней мере один из каждого коэффициента каждой факторной переменной. Факторы A и B содержат уровни, которые появляются только один раз, поэтому я не могу разделить наборы на разные куски с согласованными уровнями. Если я удалю 10 факторов фиксированного эффекта A и 8 факторов B (незначительное изменение), у меня будут только факторы с оставшимися 4 + уровнями, а разделение моих данных на 4 куска сделает его намного более управляемым. Тем не менее, мне все равно нужно выяснить, как сортировать мой df таким образом, чтобы гарантировать, что мои 480 000 записей отсортированы на 4 куска, в которых каждый факторный уровень каждого из трех факторов появляется хотя бы один раз.
GlmmGS/glmgs:
Функция glmmgs
в пакете с тем же именем выполняет вычитание с фиксированными эффектами, как пакет lfe
для логистических регрессий с использованием "Гаусса-Зейделя". К сожалению, пакет больше не разрабатывается. Будучи относительно новым для R и не имея глубокого опыта в статистике, я не могу понять выход и не знаю, как его преобразовать таким образом, чтобы дать мне нормальный "размер эффекта", "подходящий образ", Значения интервала ", которые дают сводки регрессии glm.
Я отправил сообщение авторам пакета. Они любезно ответили следующим образом:
Пакет не предоставляет выход в том же формате объекта glm. Однако вы может легко вычислить большую часть статистики соответствия (стандартная ошибка оценки, добротность соответствия) с учетом текущего выпуска (в CRAN версии, я считаю, что текущий вывод является вектором оценки коэффициенты и связанный вектор стандартных ошибок; то же самое для компоненты ковариации, но вам не нужно беспокоиться о них, если вы подходят модели без случайных эффектов). Остерегайтесь только того, что ковариационных матриц, используемых для расчета стандартных ошибок, являются обратная к диагональным блокам матрицы точности, связанная с алгоритм Гаусса-Зейделя, и поэтому они склонны недооценивать стандартные ошибки совместного правдоподобия. Я не поддерживаю пакет, и у меня нет времени, чтобы Детали; семантическая теория, лежащая в основе пакета, может быть найдена в бумага, на которую ссылается в руководстве, все остальное нужно проработать вы с ручкой и бумагой:).
Если кто-нибудь может объяснить, как "легко вычислить большую часть статистики соответствия" таким образом, чтобы кто-то без какого-либо образования в статистике мог понять это (может быть невозможно) или предоставить R-код, который показывает на примере того, как это можно сделать Я был бы очень обязан!
Революционная аналитика:
Я установил предприятие революционной аналитики на виртуальную машину, которая имитирует Windows 7 на моем Mac. Программа имеет функцию под названием RxLogit
, оптимизированную для больших логистических регрессий. Используя функцию RxLogit
, я получаю the error (Failed to allocate 326554568 bytes. Error in rxCall("RxLogit", params) : bad allocation)
, поэтому функция также кажется слишком запущенной в проблемах с памятью. Однако программное обеспечение позволяет мне выполнять мою регрессию в распределенном вычислительном кластере. Поэтому я мог просто "убить проблему", купив вычислительное время в кластере с большим количеством памяти. Тем не менее, я задаюсь вопросом, предоставляет ли программа аналитики революции какие-либо формулы или методы, которые я не знаю, что позволило бы мне сделать какую-то операцию вычитания с фиксированным эффектом lfe
или операцию tunk-tunk, которая принимает факторов.
MatrixModels/glm4:
Один человек предложил использовать функцию glm4
пакета MatrixModels
с атрибутом sparse = TRUE
для ускорения вычисления. Если я запускаю регрессию glm4
со всеми фиксированными эффектами, я получаю ошибку "Error in Cholesky(crossprod(from), LDL = FALSE) : internal_chm_factor: Cholesky factorization failed
". Если я запустил ее только с фиксированными переменными эффекта B OR A и C, вычисление работает и возвращает объект "glpModel"
. glmmgs
У меня есть некоторые проблемы, связанные с преобразованием этого вывода в форму, которая имеет смысл для меня, поскольку стандартный метод summary()
, похоже, не работает на нем.
Я был бы рад за советы по любому из упомянутых выше проблем, а также совершенно разные подходы к выполнению логистических регрессий с несколькими большими фиксированными эффектами в R с ограничениями памяти.