1Mの個別のデータセット(data.frameの場合は1M * 50行、配列の場合は1M * 50)の線形回帰フィットの傾きを取得したいと思います。現在、lm()
関数を使用していますが、これには非常に長い時間(約10分)がかかります。
線形回帰のより高速な関数はありますか?
はい、あります:
R自体にはlm.fit()
がありますが、これはより必要最低限のものです。数式表記がなく、結果セットがはるかに単純です。
Rcpp 関連パッケージのいくつかにはfastLm()
実装があります:RcppArmadillo、RcppEigen、RcppGSL。
fastLm()
については多くのブログ投稿やプレゼンテーションで説明しています。最速の方法が必要な場合は、数式インターフェイスを使用しないでください。数式の解析とモデル行列の準備には、実際の回帰よりも時間がかかります。
とはいえ、単一のベクトルで単一のベクトルを回帰する場合は、行列パッケージが必要ないため、これを単純化できます。
3.1.0以降、.lm.fit()
関数があります。この関数は、lm()
およびlm.fit()
よりも高速である必要があります。
ここで説明し、そのパフォーマンスをさまざまなlm
関数と比較します- https://rpubs.com/maechler/fast_lm 。
speedlm
のspeedglm
は、大規模なデータセットで機能するため、これを実行する必要があります。
パッケージ内のlmfit Rfast は.lm.fitよりもさらに高速です。唯一の欠点は、計画行列にフルランクがない場合は機能しないことです。