Существует ли более быстрая функция lm

Я хотел бы получить наклон линейной регрессии, подходящей для 1M отдельных наборов данных (1M * 50 строк для data.frame или 1M * 50 для массива). Теперь я использую функцию lm(), которая занимает очень много времени (около 10 минут).

Есть ли более быстрая функция для линейной регрессии?

Ответы

Ответ 1

Да есть:

  • В самом себе R имеет lm.fit(), который больше голых костей: нет нотации формулы, гораздо более простой набор результатов

  • несколько наших Rcpp связанных пакетов имеют реализации fastLm(): RcppArmadillo, RcppEigen, RcppGSL.

Мы описали fastLm() в нескольких сообщениях и презентациях в блогах. Если вы хотите это самым быстрым способом, не используйте интерфейс формулы: разбор формулы и подготовка матрицы модели занимает больше времени, чем фактическая регрессия.

Тем не менее, если вы регрессируете один вектор на одном векторе, вы можете упростить это, поскольку пакет матрицы не требуется.

Ответ 2

Так как 3.1.0 есть функция .lm.fit(). Эта функция должна быть быстрее, чем lm() и lm.fit().

Это описано, и его производительность сравнивается с различными функциями lm здесь - https://rpubs.com/maechler/fast_lm.

Ответ 3

speedlm из speedglm должен делать это, поскольку он работает с большими наборами данных.