首页 > 解决方案 > 如果满足条件,如何在循环中更新 -lm- 的因变量

问题描述

我正在尝试运行回归并在虚拟/二元变量取值为 1 时运行它。我有一组 5 个虚拟变量并想要 5 个回归,它们都具有相同的因变量:Y|d1==1 ~ x1 + x2, Y|d2==1 ~ x1 + x2。我有以下最小的工作示例:

set.seed(123)
df <- data.frame(
  x1 = rnorm(10, mean=0, sd=1),
  x2 = rnorm(10, mean=0, sd=1),
  Y = rnorm(10, mean=0, sd=1),
  d1 = sample(0:1, 10000, replace=T),
  d2 = sample(0:1, 10000, replace=T)
)

n <- 2
regList <- vector(mode = "list", length = n)
names(regList) <- c("first", "second")

for(i in seq_along(regList)){
  regList[[i]] <- lm(Y ~ x1 + x2, df)
}

我不确定如何“更新”因变量。我正在考虑使用:

form <- update(form, ...)

在 -lm- 部分之前的循环中,但不确定如何正确使用它。我对此很陌生。任何事情都会有所帮助,我找不到足够相似的问题,如果我错过了,请告诉我。我在 -lm- 的开头只有“Y”,但很明显,这只是给了我 n 次相同的输出。不确定如何实现 if 函数或对其进行分层的方法。我想在数据框中使用相同的 Y,但前提是该特定虚拟变量包含 1,或者如果我可以使用原始字符串变量并在 X* 上回归 Y(如果 string=="name")。

标签: rfor-loopregression

解决方案


好吧,在这种情况下,您实际上不需要更改公式,您需要过滤传递给回归的数据。你可以做类似的事情

n <- 2
regList <- vector(mode = "list", length = n)    
for(i in seq_along(regList)){
  regList[[i]] <- lm(Y ~ x1 + x2, df[df[[paste0("d", i)]]==1, ])
}

在这里,我们仅对每次迭代中或为 1df的行进行子集化。d1d2


推荐阅读