回帰分析の最小二乗法による係数の推定は
で求められる。ここで、標本数、パラメータ数
とすると
である。
普通に演算すると、 に
をかけて
をかける、という順番だが、
として先に
と
をかけて
としてから
にかけるのが高速である。
20180607追記
スーパーポスドクが計算量について教えてくれた。
行列と
行列の掛け算では、
個の成分を計算することになり、各成分について
回の掛け算と
回の足し算が必要になる。
行列
、
行列
、
行列
の掛け算を行う場合、
と計算すると、
は
行列だから、
掛け算は 回
足し算は 回
と計算すると、
は
行列だから、
掛け算は 回
足し算は 回
前者だと3次の項が出てくるが、後者だと2次まで。
n <- 1000 p <- 100 X <- matrix(runif(n*p), n, p) y <- matrix(runif(n), n, 1) iter <- 3000
前からかけていく場合は
system.time(replicate(iter, solve(t(X) %*% X) %*% t(X) %*% y))
ユーザ システム 経過 64.515 54.919 10.156
先に を行う場合は
system.time(replicate(iter, solve(t(X) %*% X) %*% (t(X) %*% y)))
ユーザ システム 経過 41.333 37.563 6.672