Я всегда считал, что функция 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
на самом деле медленный?
EDIT: Как предложил Дирк Эддельбуэттель, поскольку 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