我一直认为该lm
函数在R中非常快,但是如本例所示,使用该solve
函数计算的封闭解的速度更快。
data<-data.frame(y=rnorm(1000),x1=rnorm(1000),x2=rnorm(1000))
X = cbind(1,data$x1,data$x2)
library(microbenchmark)
microbenchmark(
solve(t(X) %*% X, t(X) %*% data$y),
lm(y ~ .,data=data))
有人可以解释一下这个玩具例子是不好的例子还是lm
真的很慢?
编辑:正如Dirk Eddelbuettel所建议,由于lm
需要解决公式,因此比较是不公平的,因此最好使用lm.fit
不需要解决公式的公式
microbenchmark(
solve(t(X) %*% X, t(X) %*% data$y),
lm.fit(X,data$y))
Unit: microseconds
expr min lq mean median uq max neval cld
solve(t(X) %*% X, t(X) %*% data$y) 99.083 108.754 125.1398 118.0305 131.2545 236.060 100 a
lm.fit(X, y) 125.136 136.978 151.4656 143.4915 156.7155 262.114 100 b
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句