【发布时间】:2022-01-14 02:53:21
【问题描述】:
我正在寻找一种在 R 中使用 broom 和 dplyr 执行“多步”回归的方法。我使用“多步”作为回归分析的占位符,您可以在其中集成先前回归的最终回归模型元素模型,例如拟合或残差。这种“多步”回归的一个例子是用于工具变量 (IV) 回归的 2SLS 方法。
我的(分组的)数据如下所示:
df <- data.frame(
id = sort(rep(seq(1, 20, 1), 5)),
group = rep(seq(1, 4, 1), 25),
y = runif(100),
x = runif(100),
z1 = runif(100),
z2 = runif(100)
)
其中id 和group 是标识符,y 是因变量,而x、z1 和z2 是预测变量。在 IV 设置中,x 将是一个内生预测因子。
以下是“多步”回归的示例:
library(tidyverse)
library(broom)
# Nest the data frame
df_nested <- df %>%
group_by(group) %>%
nest()
# Run first stage regression and retrieve residuals
df_fit <- df_nested %>%
mutate(
fit1 = map(data, ~ lm(x ~ z1 + z2, data = .x)),
resids = map(fit1, residuals)
)
# Run second stage with residuals as control variable
df_fit %>%
mutate(
fit2 = map2(data, resids, ~ tidy(lm(y ~ x + z2 + .y["resids"], data = .x)))
) %>%
unnest(fit2)
这会产生一个错误,表明 .x 和 .y 的长度不同。将残差(在此尝试中将 .y["resids"] 整合到第二个回归中作为控制变量的解决方案是什么?
【问题讨论】:
标签: r dplyr regression tidyr broom