【发布时间】:2019-12-30 22:41:27
【问题描述】:
我有以下代码:
reg <- lm(Y ~ x1 + x1_sq + x2 + x2_sq + x1x2 + d2 + d3 + d4, df)
其中所有 x_i 都是连续变量,d_i 是互斥虚拟变量(d1 存在但排除以避免完美的多重共线性)。我不想包括虚拟变量,而是想对每个虚拟变量 == 1 运行单独的回归。我希望通过以下形式的循环来实现这一点:
dummylist <- list("d1", "d2", "d3", "d4")
for(i in dummylist){
if(i==1){
ireg <- lm(Y ~ x1 + x1_sq + x2 + x2_sq + x1x2, df)
} else {
Unsure what to put here
}
}
我的三个(?)问题是:
- 在 -if- 函数的第一部分,我是否只在“reg”之前包含“i”,以便我的代码生成结果“d1reg、d2reg 等”?并且,
- 包含在上面的代码中,我应该在 -else- 语句之后添加什么?
- 这一切都引出了一个问题,将 if-else 语句 within 放在 -for- 循环中是错误的方法/是否有更合适的循环?
对不起,如果这太多了,请告诉我是否是这样,我可以将其删减或分成多个问题。我找不到类似的问题,可能是因为我对在 R 中运行循环比较陌生,不知道要寻找什么。
【问题讨论】:
-
是的,去掉 ifelse ,因为你不希望该回归有任何假人 - 只需在循环外运行它,然后从列表中删除 d1 。 (目前,
i == 1永远不会为真;i 是“d1”、“d2”、“d3”或“d4”,但绝不是 1。)不,您不能只将 i 添加到变量名中。但是您可以在循环之前执行regs <- list(),然后在其中执行regs[[i]] <- lm(...)。一般来说,如果你有很多相似的东西,你应该把它们放在一个列表中,而不是放在几个名称相似的变量中。
标签: r for-loop if-statement linear-regression dummy-variable