R线性模型函数(lm)不从预测变量中排除预测变量

问题描述 投票:0回答:2

我有一个数据框,我想从其他变量中预测所有变量,所以我构建了一个像这样的循环:

df = iris
df$Species <- NULL

mods = list()
for (i in 1:ncol(df)) {
  mods[[i]] <- lm(df[, i] ~ ., df)
}

但是令我惊讶的是,每个变量都是它自己的预测变量;即使我这样做:

mods = list()
for (i in 1:ncol(df)) {
  mods[[i]] = lm(df[, i] ~ . - df[, i], df)
}

同样发生。

我知道我可以使用正确的名称在侧面创建正确的公式表达式,以此类推,但是我觉得这不是lm的理想行为。

问题是:我想念什么吗?有什么原因使此功能具有如此令人不适的行为?如果以前的问题的答案为“否”,是否应该加以改善?

r lm
2个回答
2
投票

这似乎是预料之中的,并且与R对我的运作方式非常一致。您正在将df传递到data参数中,但是随后在公式中引用了另一个df(这是相同的,但此时对象引用不同。)>

在您的第一个示例中,您的y变量不是来自data,而是来自另一个df。因此,没有data列,并且.返回全部。

在第二个示例中,您说要包括data中的所有变量,但要排除某些其他数据帧df中的列。因此,它从df中排除了该列,但仍然保留了data中的所有列。

我认为这是您所期望的:

mods = list()
for (i in 1:ncol(df)) {
  mods[[i]] = lm(df[, i] ~ ., df[, -i])
}

2
投票

它不包括名称,但是该代码不使用任何名称。

© www.soinside.com 2019 - 2024. All rights reserved.