回帰分析の最小二乗法による係数の推定は
で求められる。ここで、標本数、パラメータ数 とすると
である。
普通に演算すると、 に をかけて をかける、という順番だが、 として先に と をかけて としてから にかけるのが高速である。
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