我见过很多类似的问题,但是我试图写的循环中缺少一个关键。我有一组包含约 4,000 个不同键的数据集,对于每个键,有约 1,000 个观察值。我过滤掉了一个键来隔离该键的观察结果,运行线性回归,检查模型假设,一切看起来都不错。但是,我想循环该数据集并为每个键运行线性回归。然后我想要存储系数、p值、R^2 等并一起查看它们。
这是我的数据示例:
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
我跑了:
datA <- data %>% filter(key=='A')
lm(y1 ~ x1 + x2, data = datA)
然后对键 B 和 C 重复该操作。我在这里看到的每个问题都是针对整个集合的不同变量进行循环,而不是拆分行上的数据。
但我还需要再做 4,000 次。任何编写此循环的帮助将不胜感激(我不擅长编写循环)。
你可以split
数据并应用lm
到每个块。
list_models <- lapply(split(df, df$Key), function(x) lm(y1 ~ x1 + x2, data = x))
A tidyverse
方式是:
library(dplyr)
library(purrr)
list_models <- df %>% group_split(Key) %>% map(~lm(y1 ~ x1 + x2, data = .x))
它返回每个人的模型Key
.
list_models
#$A
#Call:
#lm(formula = y1 ~ x1 + x2, data = x)
#Coefficients:
#(Intercept) x1 x2
# 9 1 NA
#$B
#Call:
#lm(formula = y1 ~ x1 + x2, data = x)
#Coefficients:
#(Intercept) x1 x2
# 9 1 NA
#$C
#Call:
#lm(formula = y1 ~ x1 + x2, data = x)
#Coefficients:
#(Intercept) x1 x2
# 9.00e+00 1.00e+00 7.86e-16
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)