R按顺序运行回归


set.seed(1)
data=data.frame(

student=1:5000,
alfa =runif(5000), 
bravo =runif(5000), 
charlie =runif(5000), 
delta =runif(5000), 
echo =runif(5000), 
foxtrot =runif(5000), 
golf =runif(5000), 
hotel =runif(5000), 
india =runif(5000), 
juliett =runif(5000), 
kilo =runif(5000), 
lima =runif(5000), 
mike =runif(5000), 
november =runif(5000), 
oscar =runif(5000), 
papa =runif(5000), 
GROUP = sample(0:1, r=T))

##########################

COVS1 = c(golf, hotel, india)
COVS2 = c(juliett, kilo)
COVS3 = c(lima, mike, november, oscar, papa)

## OVERALL
lm(alpha ~ delta +  golf + hotel + india, data = data)
lm(alpha ~ delta +  golf + hotel + india + juliett + kilo, data = data)
lm(alpha ~ delta +  golf + hotel + india + juliett + kilo + lima + mike + november + oscar + papa, data = data)
lm(alpha ~ echo +  golf + hotel + india, data = data)
lm(alpha ~ echo +  golf + hotel + india + juliett + kilo, data = data)
lm(alpha ~ echo +  golf + hotel + india + juliett + kilo + lima + mike + november + oscar + papa, data = data)
lm(alpha ~ foxtrot +  golf + hotel + india, data = data)
lm(alpha ~ foxtrot +  golf + hotel + india + juliett + kilo, data = data)
lm(alpha ~ foxtrot +  golf + hotel + india + juliett + kilo + lima + mike + november + oscar + papa, data = data)
lm(bravo ~ delta +  golf + hotel + india, data = data)
lm(bravo ~ delta +  golf + hotel + india + juliett + kilo, data = data)
lm(bravo ~ delta +  golf + hotel + india + juliett + kilo + lima + mike + november + oscar + papa, data = data)
lm(bravo ~ echo +  golf + hotel + india, data = data)
lm(bravo ~ echo +  golf + hotel + india + juliett + kilo, data = data)
lm(bravo ~ echo +  golf + hotel + india + juliett + kilo + lima + mike + november + oscar + papa, data = data)
lm(bravo ~ foxtrot +  golf + hotel + india, data = data)
lm(bravo ~ foxtrot +  golf + hotel + india + juliett + kilo, data = data)
lm(bravo ~ foxtrot +  golf + hotel + india + juliett + kilo + lima + mike + november + oscar + papa, data = data)
lm(charlie ~ delta +  golf + hotel + india, data = data)
lm(charlie ~ delta +  golf + hotel + india + juliett + kilo, data = data)
lm(charlie ~ delta +  golf + hotel + india + juliett + kilo + lima + mike + november + oscar + papa, data = data)
lm(charlie ~ echo +  golf + hotel + india, data = data)
lm(charlie ~ echo +  golf + hotel + india + juliett + kilo, data = data)
lm(charlie ~ echo +  golf + hotel + india + juliett + kilo + lima + mike + november + oscar + papa, data = data)
lm(charlie ~ foxtrot +  golf + hotel + india, data = data)
lm(charlie ~ foxtrot +  golf + hotel + india + juliett + kilo, data = data)
lm(charlie ~ foxtrot +  golf + hotel + india + juliett + kilo + lima + mike + november + oscar + papa, data = data)
## GROUP == 0
lm(alpha ~ delta +  golf + hotel + india, data ~ subset(data, GROUP == 0)
lm(alpha ~ delta +  golf + hotel + india + juliett + kilo, data ~ subset(data, GROUP == 0)
lm(alpha ~ delta +  golf + hotel + india + juliett + kilo + lima + mike + november + oscar + papa, data ~ subset(data, GROUP == 0)
lm(alpha ~ echo +  golf + hotel + india, data ~ subset(data, GROUP == 0)
lm(alpha ~ echo +  golf + hotel + india + juliett + kilo, data ~ subset(data, GROUP == 0)
lm(alpha ~ echo +  golf + hotel + india + juliett + kilo + lima + mike + november + oscar + papa, data ~ subset(data, GROUP == 0)
lm(alpha ~ foxtrot +  golf + hotel + india, data ~ subset(data, GROUP == 0)
lm(alpha ~ foxtrot +  golf + hotel + india + juliett + kilo, data ~ subset(data, GROUP == 0)
lm(alpha ~ foxtrot +  golf + hotel + india + juliett + kilo + lima + mike + november + oscar + papa, data ~ subset(data, GROUP == 0)
lm(bravo ~ delta +  golf + hotel + india, data ~ subset(data, GROUP == 0)
lm(bravo ~ delta +  golf + hotel + india + juliett + kilo, data ~ subset(data, GROUP == 0)
lm(bravo ~ delta +  golf + hotel + india + juliett + kilo + lima + mike + november + oscar + papa, data ~ subset(data, GROUP == 0)
lm(bravo ~ echo +  golf + hotel + india, data ~ subset(data, GROUP == 0)
lm(bravo ~ echo +  golf + hotel + india + juliett + kilo, data ~ subset(data, GROUP == 0)
lm(bravo ~ echo +  golf + hotel + india + juliett + kilo + lima + mike + november + oscar + papa, data ~ subset(data, GROUP == 0)
lm(bravo ~ foxtrot +  golf + hotel + india, data ~ subset(data, GROUP == 0)
lm(bravo ~ foxtrot +  golf + hotel + india + juliett + kilo, data ~ subset(data, GROUP == 0)
lm(bravo ~ foxtrot +  golf + hotel + india + juliett + kilo + lima + mike + november + oscar + papa, data ~ subset(data, GROUP == 0)
lm(charlie ~ delta +  golf + hotel + india, data ~ subset(data, GROUP == 0)
lm(charlie ~ delta +  golf + hotel + india + juliett + kilo, data ~ subset(data, GROUP == 0)
lm(charlie ~ delta +  golf + hotel + india + juliett + kilo + lima + mike + november + oscar + papa, data ~ subset(data, GROUP == 0)
lm(charlie ~ echo +  golf + hotel + india, data ~ subset(data, GROUP == 0)
lm(charlie ~ echo +  golf + hotel + india + juliett + kilo, data ~ subset(data, GROUP == 0)
lm(charlie ~ echo +  golf + hotel + india + juliett + kilo + lima + mike + november + oscar + papa, data ~ subset(data, GROUP == 0)
lm(charlie ~ foxtrot +  golf + hotel + india, data ~ subset(data, GROUP == 0)
lm(charlie ~ foxtrot +  golf + hotel + india + juliett + kilo, data ~ subset(data, GROUP == 0)
lm(charlie ~ foxtrot +  golf + hotel + india + juliett + kilo + lima + mike + november + oscar + papa, data ~ subset(data, GROUP == 0)
## GROUP == 1
lm(alpha ~ delta +  golf + hotel + india, data ~ subset(data, GROUP == 1)
lm(alpha ~ delta +  golf + hotel + india + juliett + kilo, data ~ subset(data, GROUP == 1)
lm(alpha ~ delta +  golf + hotel + india + juliett + kilo + lima + mike + november + oscar + papa, data ~ subset(data, GROUP == 1)
lm(alpha ~ echo +  golf + hotel + india, data ~ subset(data, GROUP == 1)
lm(alpha ~ echo +  golf + hotel + india + juliett + kilo, data ~ subset(data, GROUP == 1)
lm(alpha ~ echo +  golf + hotel + india + juliett + kilo + lima + mike + november + oscar + papa, data ~ subset(data, GROUP == 1)
lm(alpha ~ foxtrot +  golf + hotel + india, data ~ subset(data, GROUP == 1)
lm(alpha ~ foxtrot +  golf + hotel + india + juliett + kilo, data ~ subset(data, GROUP == 1)
lm(alpha ~ foxtrot +  golf + hotel + india + juliett + kilo + lima + mike + november + oscar + papa, data ~ subset(data, GROUP == 1)
lm(bravo ~ delta +  golf + hotel + india, data ~ subset(data, GROUP == 1)
lm(bravo ~ delta +  golf + hotel + india + juliett + kilo, data ~ subset(data, GROUP == 1)
lm(bravo ~ delta +  golf + hotel + india + juliett + kilo + lima + mike + november + oscar + papa, data ~ subset(data, GROUP == 1)
lm(bravo ~ echo +  golf + hotel + india, data ~ subset(data, GROUP == 1)
lm(bravo ~ echo +  golf + hotel + india + juliett + kilo, data ~ subset(data, GROUP == 1)
lm(bravo ~ echo +  golf + hotel + india + juliett + kilo + lima + mike + november + oscar + papa, data ~ subset(data, GROUP == 1)
lm(bravo ~ foxtrot +  golf + hotel + india, data ~ subset(data, GROUP == 1)
lm(bravo ~ foxtrot +  golf + hotel + india + juliett + kilo, data ~ subset(data, GROUP == 1)
lm(bravo ~ foxtrot +  golf + hotel + india + juliett + kilo + lima + mike + november + oscar + papa, data ~ subset(data, GROUP == 1)
lm(charlie ~ delta +  golf + hotel + india, data ~ subset(data, GROUP == 1)
lm(charlie ~ delta +  golf + hotel + india + juliett + kilo, data ~ subset(data, GROUP == 1)
lm(charlie ~ delta +  golf + hotel + india + juliett + kilo + lima + mike + november + oscar + papa, data ~ subset(data, GROUP == 1)
lm(charlie ~ echo +  golf + hotel + india, data ~ subset(data, GROUP == 1)
lm(charlie ~ echo +  golf + hotel + india + juliett + kilo, data ~ subset(data, GROUP == 1)
lm(charlie ~ echo +  golf + hotel + india + juliett + kilo + lima + mike + november + oscar + papa, data ~ subset(data, GROUP == 1)
lm(charlie ~ foxtrot +  golf + hotel + india, data ~ subset(data, GROUP == 1)
lm(charlie ~ foxtrot +  golf + hotel + india + juliett + kilo, data ~ subset(data, GROUP == 1)
lm(charlie ~ foxtrot +  golf + hotel + india + juliett + kilo + lima + mike + november + oscar + papa, data ~ subset(data, GROUP == 1)

我想知道,怎么可能使用某种函数来运行所有这些回归?基本上,回归在COVS1上回归为"阿尔法",然后在COVS2和COVS1中回归为"alpha",再在COVS3和COVS2中回归为。这是对整个数据执行的,然后分别对GROUP==0和GROUP==1执行。重复同样的过程,将"alpha"替换为"bravo",然后再替换为"charlie",所以我只想运行所有这些,然后存储所有输出的模型、系数估计和标准误差。。

我们可以创建一个循环来完成这个

COVS1 <- c('golf', 'hotel', 'india')
COVS2 <- c('juliett', 'kilo')
COVS3 <- c('lima', 'mike', 'november', 'oscar', 'papa')

COVS <- list(COVS1, COVS2, COVS3)

df1 <- expand.grid(resp = c('alfa', 'bravo', 'charlie'),
pred = c('delta', 'echo', 'foxtrot'), stringsAsFactors = FALSE)

df1 <- df1[order(df1$resp),]

library(broom)
lst_mod <-  lapply(seq_along(COVS), function(i) 
lapply(seq_along(COVS), function(j) {
fmla <- reformulate(c(df1$pred[i], unlist(COVS[seq_len(j)])), 
response = df1$resp[i])
tidy(lm(fmla, data = data))
}))

或者如果我们需要单个数据集

library(dplyr)
library(purrr)
out_dat <- lapply(seq_along(COVS), function(i) 
map_dfr(seq_along(COVS), ~ {
fmla <- reformulate(c(df1$pred[i], unlist(COVS[seq_len(.x)])), 
response = df1$resp[i])
tidy(lm(fmla, data = data)) %>% 
mutate(response_variable = df1$resp[i], formula = list(fmla))
})) %>%
bind_rows

如果我们需要将lm应用于数据的subset,则将数据子集

dat0 <- subset(data, GROUP == 0)
dat1 <- subset(data, GROUP == 1)

并将lm中的data更改为"dat0"、"dat1">

最新更新