使用具有大量固定效应的回归快速预测
Predicting QUICKLY using a regression with a large number of fixed effects
我想使用 R
来估计具有大量固定效应的回归。
然后我使用该回归来预测测试数据集。
但是,这需要非常快地完成,因为我想 bootstrap 我的标准错误并多次这样做。
我知道 R
中的 lfe
包可以做到这一点。例如
reg=felm(Y~1|F1 + F2,data=dat)
其中dat是数据,F1,F2
是分类变量的列(要包括的固定效应)。
然而,predict(reg,dat2)
不适用于 lfe 包……正如 here.
所讨论的
不幸的是 lm
太慢了,因为我有大量的固定效果。
加快速度的方法是提取系数并手动执行矩阵运算。例如:
xtrain <- data.frame(x1=jitter(1:1000), x2=runif(1000), x3=rnorm(1000))
xtest <- data.frame(x1=jitter(1:1000), x2=runif(1000), x3=rnorm(1000))
y <- -(1:1000)
fit <- lm(y ~ x1 + x2 + x3, data=xtrain)
beta <- matrix(coefficients(fit), nrow=1)
xtest_mat <- t(data.matrix(cbind(intercept=1, xtest)))
predictions <- as.vector(beta %*% xtest_mat)
library(microbenchmark)
microbenchmark(as.vector(beta %*% xtest_mat),
predict(fit, newdata = xtest))
Unit: microseconds
expr min lq mean median uq max neval cld
as.vector(beta %*% xtest_mat) 8.140 10.0690 13.12173 12.372 15.852 26.292 100 a
predict(fit, newdata = xtest) 635.413 657.2515 745.94840 673.009 763.166 2363.065 100 b
所以你可以看到直接矩阵乘法比预测函数快 50 倍。
我想使用 R
来估计具有大量固定效应的回归。
然后我使用该回归来预测测试数据集。
但是,这需要非常快地完成,因为我想 bootstrap 我的标准错误并多次这样做。
我知道 R
中的 lfe
包可以做到这一点。例如
reg=felm(Y~1|F1 + F2,data=dat)
其中dat是数据,F1,F2
是分类变量的列(要包括的固定效应)。
predict(reg,dat2)
不适用于 lfe 包……正如 here.
不幸的是 lm
太慢了,因为我有大量的固定效果。
加快速度的方法是提取系数并手动执行矩阵运算。例如:
xtrain <- data.frame(x1=jitter(1:1000), x2=runif(1000), x3=rnorm(1000))
xtest <- data.frame(x1=jitter(1:1000), x2=runif(1000), x3=rnorm(1000))
y <- -(1:1000)
fit <- lm(y ~ x1 + x2 + x3, data=xtrain)
beta <- matrix(coefficients(fit), nrow=1)
xtest_mat <- t(data.matrix(cbind(intercept=1, xtest)))
predictions <- as.vector(beta %*% xtest_mat)
library(microbenchmark)
microbenchmark(as.vector(beta %*% xtest_mat),
predict(fit, newdata = xtest))
Unit: microseconds
expr min lq mean median uq max neval cld
as.vector(beta %*% xtest_mat) 8.140 10.0690 13.12173 12.372 15.852 26.292 100 a
predict(fit, newdata = xtest) 635.413 657.2515 745.94840 673.009 763.166 2363.065 100 b
所以你可以看到直接矩阵乘法比预测函数快 50 倍。