【发布时间】:2021-02-23 17:40:58
【问题描述】:
我有一个这样的数据集:
df <- data.frame(country = rep(c("W", "Q"), 500),
v1 = rnorm(1000, 10, 2),
v2 = rnorm(1000, 8, 1))
df$a1 <- rnorm(1000, 2, 0.1) + df$v1*rnorm(1000, 2, 0.1)-df$v2
df$a2 <- df$v1*rnorm(1000, 1, 0.2)+df$v2*rnorm(1000, 2, 0.2)
数据按country分组,我想计算许多变量(即a1、a2、v1、v2)的lm()系数和置信区间(CI)。为此,我想使用dplyr 中的group_by 按国家/地区分组,并使用for loop 指定我要为其计算beta 系数和CI 的变量。
到目前为止,我已经设法创建了一个几乎可以做到这一点的函数,但是当应用于分组数据集时,它只返回第一个系数和计算的 CI。
betas <- function(dat, atts, socs){
for (i in 1:length(atts)) {
for (j in 1:length(socs)) {
mod <- lm(paste0(atts[[i]], "~", socs[[j]]), dat)
mod.s <- summary(mod)$coefficients
cis <- confint(mod, socs[[j]], level=0.95)
dat <- dat %>% mutate(!!paste0(atts[[i]], ".", socs[[j]], ".b") := mod.s[socs[[j]], 1],
!!paste0(atts[[i]], ".", socs[[j]], ".l") := cis[socs[j], 1],
!!paste0(atts[[i]], ".", socs[[j]], ".u") := cis[socs[j], 2])
}
}
return(dat)
}
df1 <- df %>% group_by(country) %>% betas(., atts = c("a1", "a2"), socs = c("v1", "v2"))
#To see how the output is all the same.
hist(df1$a2.v2.b)
如何计算按国家分组的数据集的多对变量的系数和 CI?
【问题讨论】: