R线性模型函数(lm)不排除预测变量的预测变量
R linear model function (lm) doesn't exclude predicted variable from predictors
我有一个数据框,我想从其他变量中预测所有变量,所以我构建了一个这样的循环:
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 所期望的行为。
问题是:我错过了什么吗?这个函数有如此不舒服的行为是有原因的吗?万一前面问题的答案是"no",难道不应该改进一下吗?
这似乎是预料之中的,并且非常符合我对 R 的操作方式。您将 df
传递给 data
参数,但随后在您的公式中引用了不同的 df
(它是同一个,但此时是不同的对象引用。
在您的第一个示例中,您的 y
变量不是来自 data
,而是来自另一个 df
。因此,因此没有 data
列和 .
returns 全部。
在你的第二个例子中,你说要包括来自 data
的所有变量,但要排除来自其他数据框 df
的列。因此它从 df
中排除了该列,但仍然保留了 data
.
中的所有列
我认为这就是您所期待的:
mods = list()
for (i in 1:ncol(df)) {
mods[[i]] = lm(df[, i] ~ ., df[, -i])
}
它排除了名称,但该代码不使用任何名称。
df = iris
df$Species <- NULL
LM <- function(nm) {
fo <- paste(nm, "~.")
do.call("lm", list(fo, quote(df)))
}
Map(LM, names(df))
给出这个 4 元素列表(只显示第一个):
$Sepal.Length
Call:
lm(formula = "Sepal.Length ~.", data = df)
Coefficients:
(Intercept) Sepal.Width Petal.Length Petal.Width
1.8560 0.6508 0.7091 -0.5565
## ..snip...
我有一个数据框,我想从其他变量中预测所有变量,所以我构建了一个这样的循环:
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 所期望的行为。
问题是:我错过了什么吗?这个函数有如此不舒服的行为是有原因的吗?万一前面问题的答案是"no",难道不应该改进一下吗?
这似乎是预料之中的,并且非常符合我对 R 的操作方式。您将 df
传递给 data
参数,但随后在您的公式中引用了不同的 df
(它是同一个,但此时是不同的对象引用。
在您的第一个示例中,您的 y
变量不是来自 data
,而是来自另一个 df
。因此,因此没有 data
列和 .
returns 全部。
在你的第二个例子中,你说要包括来自 data
的所有变量,但要排除来自其他数据框 df
的列。因此它从 df
中排除了该列,但仍然保留了 data
.
我认为这就是您所期待的:
mods = list()
for (i in 1:ncol(df)) {
mods[[i]] = lm(df[, i] ~ ., df[, -i])
}
它排除了名称,但该代码不使用任何名称。
df = iris
df$Species <- NULL
LM <- function(nm) {
fo <- paste(nm, "~.")
do.call("lm", list(fo, quote(df)))
}
Map(LM, names(df))
给出这个 4 元素列表(只显示第一个):
$Sepal.Length
Call:
lm(formula = "Sepal.Length ~.", data = df)
Coefficients:
(Intercept) Sepal.Width Petal.Length Petal.Width
1.8560 0.6508 0.7091 -0.5565
## ..snip...