【发布时间】:2020-04-08 00:19:29
【问题描述】:
我已经问过一个先前的问题 (Splitting data and running linear regression loop),使用 tidyverse 和管道提供了一个很好的解决方案。我正在为数据中的 4,000 个“键”保存参数的 p 值,将它们放入单独的数据框中,然后运行一些直方图和其他视觉效果来检查 4,000 个键中每个键的参数的重要性。这在我运行它的前几次有效,但是在不同的参数/预测器上运行完全相同的代码,我不断收到一条错误消息:
Error in summary(lm(y1 ~ x1 + x2 ))$coefficients['x1', : subscript out of bounds
如果我在该键上运行单个模型并查看摘要,pvalue 肯定存在于位置[x1,4] 或[2,4],但它不会在模型中返回。有时它会运行,但随后会在 [3,4] 或 [4,4] 等上炸毁。
有人建议 tidyverse 正在杀死内存,从而将其炸毁。我知道这不是代码,因为它有时会起作用,或者有时会比其他时候进步得更远,但这似乎很奇怪。那么,data.table 会是循环整个数据集的更好解决方案吗?我不熟悉如何将data.table 链接在一起,那么我将如何使用data.table 重新创建以下代码,以在我拥有的 4,000 个键中的每一个上运行一个模型,并使用我拥有的 10 多个参数。
df
Key y1 x1 x2
A 10 1 3
A 11 2 4
A 12 3 5
B 13 4 6
B 14 5 7
B 15 6 8
C 16 7 9
C 17 8 1
C 18 9 2
df %>% group_by(Key) %>%
summarise(Intercept = lm(y1 ~ x1 + x2)$coefficients[1],
Coeff_x1 = lm(y1 ~ x1 + x2)$coefficients[2],
Coeff_x2 = lm(y1 ~ x1 + x2)$coefficients[3],
R2 = summary(lm(y1 ~ x1 + x2))$r.squared,
pvalue = summary(lm(y1 ~ x1 + x2))$coefficients["x1",4])
# A tibble: 3 x 6
Key Intercept Coeff_x1 Coeff_x2 R2 pvalue
<chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 A 9. 1.00 NA 1 8.00e-16
2 B 9. 1.00 NA 1 7.00e-16
3 C 9. 1.00 7.86e-16 1 NaN
【问题讨论】:
-
您可以使用
lapply循环遍历key的唯一值,并让函数返回具有所需系数的data.frame -
这是上一篇文章中的建议,但我收到了一个错误
Error: cannot allocate vector of size XX.x Mb,所以我认为我的机器可能太弱了……这太疯狂了,因为它非常高端18 个月前.... -
好吧,让我测试一下。
标签: r data.table regression