【问题标题】:Loop a linear regression over several dependant and independant variables in a data.table and store the results在 data.table 中对多个因变量和自变量进行线性回归并存储结果
【发布时间】:2018-03-08 10:13:53
【问题描述】:

我正在尝试对数据表中的变量对重复一组线性回归。我有三个自变量 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]

【问题讨论】:

  • 你能melt.data.table(d, id.vars = "country", measure.vars = patterns("x[0-9]", "y[0-9]")) 运行相同的代码,但使用by = c("country", "variable") 吗?
  • 谢谢休。我收到此错误: == c("country", "variable") 中的错误:比较 (1) 仅适用于原子类型和列表类型。我尝试了 d$country
  • 只使用一个 = 就像您在问题中所做的那样
  • 当然!谢谢 。有用 !如果可以的话,有什么快速的建议可以检索使用了哪个 x(从 1 到 10)和哪个 y(1 到 3)?比如带有“y1x1”、“y1x2”等的列?
  • 不确定 - 您的问题表明它们的大小相同,因此 variable 列将指定索引。

标签: r loops data.table lapply lm


【解决方案1】:

这是一个更基础的方法。您可以使用data.table::CJexpand.grid 生成x 和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

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

【讨论】:

  • 谢谢。有效!现在我需要找到一种方法来检索 r.squared 和 cooficients 和 p 值并以有效的方式映射它们!
  • 嗨@Anneclaire,您也可以在apply函数中检索它们。
猜你喜欢
  • 1970-01-01
  • 2020-05-20
  • 2020-03-06
  • 2020-10-31
  • 2019-04-16
  • 1970-01-01
  • 2017-09-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多