r - 如果满足条件,如何在循环中更新 -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")。
解决方案
好吧,在这种情况下,您实际上不需要更改公式,您需要过滤传递给回归的数据。你可以做类似的事情
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
的行进行子集化。d1
d2
推荐阅读
- python-3.x - 如何在python中添加一个字段以根据其他列返回值?
- mongodb - 如何将存储在 mongodb 中的颜色应用于 ejs 模板?
- javascript - 为什么我的模块函数的 Jest 间谍在另一个模块中使用,在测试后一个模块的函数时没有被调用?
- python - 如何在 postgreSQL 中构建表
- java - 如何在场景构建器中添加我的自定义布局管理器?
- visual-c++ - rust 编译时 1 字节的结构成员对齐 (rustflags)
- javascript - 使用 For 循环在数组中递归搜索
- mysql - 如何在父查询案例语句中使用子查询的结果
- java - Thymeleaf 无法识别服务的属性
- xml - XPath 谓词仅使用节点集中的第一个节点进行匹配