如何解决使用R从多个线性回归中提取beta
我使用函数lm()完成了34个回归分析,分别针对不同的市镇进行了回归,我想制作一张表格,列出市镇名称和每个回归的第三个beta 我使用此循环创建了回归
for ( i in 1:34 ){
#create a subset data
data_sub <- subset(dif_dif,Comuna_subida == comunas[i])
assign(paste("lm",comunas[i],sep = "_"),lm(log(viajes) ~
# Explanatory variables
cierre_colegio + Cuarentena.x +
dias_en_cuarentena +
# Control variables
n_comunas_cuarentena +
personas_en_cuarentena +
# Time Variables
dia_semana_Tuesday + dia_semana_Wednesday +
dia_semana_Thursday + dia_semana_Friday +
mes_4 + mes_5 + mes_6 + mes_7 + semana +
semana_corta + ano,data = data_sub))
}
comunas是列出所有市政名称的列表。
所以,现在我有34个称为lm_X的回归,并且我想要一个这样的表:
Municipality beta_Cuarentena.x
X1 0.08
X2 0.15
X3 0.42
...etc
非常感谢!
解决方法
您可以创建列表,而不是将结果分配给具有不同名称的变量。
例如:
library(purrr)
library(dplyr)
# Calculate regressions
lmcalc <- list()
for (i in 1:3) {
x <- 1:20
y <- 2 * x+rnorm(20)
lmcalc[[paste("Municipality",LETTERS[i])]] <- lm(y~x)
}
lmcalc %>% imap(~{data.frame( beta = setNames(.x$coefficients[2],.y))}) %>%
bind_rows
#> beta
#> Municipality A 2.023770
#> Municipality B 1.981352
#> Municipality C 2.015938
由reprex package(v0.3.0)于2020-09-22创建
imap
函数允许在列表上循环,其中.x
代表列表中的当前对象,其名称.y
。
用两列初始化for循环之外的data.frame。我们称之为df
。然后在for循环中,添加一行代码,为每个lm模型创建一个新行。它应该类似于:df[i,] <- c(comunas[i],get(paste("lm",comunas[i],sep = "_"))$coefficients[3])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。