web-dev-qa-db-ja.com

より速いlm関数はありますか

1Mの個別のデータセット(data.frameの場合は1M * 50行、配列の場合は1M * 50)の線形回帰フィットの傾きを取得したいと思います。現在、lm()関数を使用していますが、これには非常に長い時間(約10分)がかかります。

線形回帰のより高速な関数はありますか?

20
Bangyou

はい、あります:

  • R自体にはlm.fit()がありますが、これはより必要最低限​​のものです。数式表記がなく、結果セットがはるかに単純です。

  • Rcpp 関連パッケージのいくつかにはfastLm()実装があります:RcppArmadillo、RcppEigen、RcppGSL。

fastLm()については多くのブログ投稿やプレゼンテーションで説明しています。最速の方法が必要な場合は、数式インターフェイスを使用しないでください。数式の解析とモデル行列の準備には、実際の回帰よりも時間がかかります。

とはいえ、単一のベクトルで単一のベクトルを回帰する場合は、行列パッケージが必要ないため、これを単純化できます。

22

3.1.0以降、.lm.fit()関数があります。この関数は、lm()およびlm.fit()よりも高速である必要があります。

ここで説明し、そのパフォーマンスをさまざまなlm関数と比較します- https://rpubs.com/maechler/fast_lm

11
Jot eN

speedlmspeedglmは、大規模なデータセットで機能するため、これを実行する必要があります。

4

パッケージ内のlmfit Rfast は.lm.fitよりもさらに高速です。唯一の欠点は、計画行列にフルランクがない場合は機能しないことです。

2
Michail Tsagris