OLS - Performance Test

Setup

size <- 1.3e+07
data <- data.frame(y = runif(size), x1 = runif(size), x2 = runif(size))

Test

lm - data.frame

system.time(lm(y ~ x1 + x2, data = data))

user system elapsed 61.306 4.284 67.414

lm - data.table

library(data.table)
dt <- as.data.table(data)
system.time(lm(y ~ x1 + x2, data = dt))

user system elapsed 23.154 3.717 30.994

matrix algebra

Y <- as.matrix(data$y)
X <- data[, c("x1", "x2")]
X$intercept <- 1
X <- as.matrix(X)
system.time(solve(t(X) %*% X) %*% t(X) %*% Y)

user system elapsed 1.051 0.328 1.408