在data.table中对几个相关和独立变量进行线性回归并存储结果

时间:2018-03-08 10:13:53

标签: r loops data.table lapply lm

我试图在数据表中对变量对重复一组线性回归。我有三个独立变量y1y2y3和10个解释变量x1x10。每个系列都缺少一些观察结果。

在下面的示例中,我想为每对ysxs重复第二行命令。

d <- data.table(country=rep(c('a','b','c'),c(10,10,10)),y1=rnorm(30),y2=rnorm(30),x1=runif(30),x2=runif(30))

d[(!is.na(y1) & !is.na(x1)), .(beta1=summary(lm(y1~x1))$coefficients[2,1],    p1=summary(lm(y1~x1))$coefficients[2,4])  ,by=country]

1 个答案:

答案 0 :(得分:1)

这是一个更基础的方法。您可以使用data.table::CJexpand.grid生成x&s和y的组合。然后浏览每个组合以执行线性回归。

combi <- CJ(grep("^x", names(d), value=TRUE),grep("^y", names(d), value=TRUE)) 

lmRes <- apply(combi, 1, function(x) {
    fml <- as.formula(paste(x["V2"],"~",x["V1"]))
    lm(fml, d)
})
lmRes

在加入组合之前,没有从d所有x和y组合生成大数据集,可能没有更简单的方法可以通过连接表来解决这个问题