数据框中变量的回归
Regression of variables in a dataframe
我有一个数据框:
df = data.frame(x1 = rnorm(50), x2 = rnorm(50), x3 = rnorm(50), x4 = rnorm(50))
我想对每个变量与所有其他变量进行回归,例如:
fit1 <- lm(x1 ~ ., data = df)
fit2 <- lm(x2 ~ ., data = df)
等(当然,真正的dataframe有更多的变量)。
我试着把它们放在一个循环中,但没有用。我也尝试使用 lapply
但也无法产生所需的结果。有人知道诀窍吗?
您可以使用reformulate
动态构建公式
df = data.frame(x1 = rnorm(50), x2 = rnorm(50), x3 = rnorm(50), x4 = rnorm(50))
vars <- names(df)
result <- lapply(vars, function(resp) {
lm(reformulate(".",resp), data=df)
})
或者您可以使用 do.call 在每个模型中获得 "prettier" 公式
vars <- names(df)
result <- lapply(vars, function(resp) {
do.call("lm", list(reformulate(".",resp), data=quote(df)))
})
每个方法 returns 一个列表。您可以使用 result[[1]]
、result[[2]]
等
提取单个模型
或者你可以试试这个...
df = data.frame(x1 = rnorm(50), x2 = rnorm(50), x3 = rnorm(50), x4 = rnorm(50))
models = list()
for (i in (1: ncol(df))){
formula = paste(colnames(df)[i], "~ .", sep="")
models[[i]] = lm(formula, data = df)
}
这会将所有模型保存为列表
要检索存储的模型:
例如:模型在 x4 上回归
#retrieve model - replace modelName with the name of the required column
modelName = "x4"
out = models[[which( colnames(df)== modelName )]]
输出:
Call:
lm(formula = formula, data = df)
Coefficients:
(Intercept) x1 x2 x3
-0.17383 0.07602 -0.09759 -0.23920
我有一个数据框:
df = data.frame(x1 = rnorm(50), x2 = rnorm(50), x3 = rnorm(50), x4 = rnorm(50))
我想对每个变量与所有其他变量进行回归,例如:
fit1 <- lm(x1 ~ ., data = df)
fit2 <- lm(x2 ~ ., data = df)
等(当然,真正的dataframe有更多的变量)。
我试着把它们放在一个循环中,但没有用。我也尝试使用 lapply
但也无法产生所需的结果。有人知道诀窍吗?
您可以使用reformulate
动态构建公式
df = data.frame(x1 = rnorm(50), x2 = rnorm(50), x3 = rnorm(50), x4 = rnorm(50))
vars <- names(df)
result <- lapply(vars, function(resp) {
lm(reformulate(".",resp), data=df)
})
或者您可以使用 do.call 在每个模型中获得 "prettier" 公式
vars <- names(df)
result <- lapply(vars, function(resp) {
do.call("lm", list(reformulate(".",resp), data=quote(df)))
})
每个方法 returns 一个列表。您可以使用 result[[1]]
、result[[2]]
等
或者你可以试试这个...
df = data.frame(x1 = rnorm(50), x2 = rnorm(50), x3 = rnorm(50), x4 = rnorm(50))
models = list()
for (i in (1: ncol(df))){
formula = paste(colnames(df)[i], "~ .", sep="")
models[[i]] = lm(formula, data = df)
}
这会将所有模型保存为列表
要检索存储的模型:
例如:模型在 x4 上回归
#retrieve model - replace modelName with the name of the required column
modelName = "x4"
out = models[[which( colnames(df)== modelName )]]
输出:
Call:
lm(formula = formula, data = df)
Coefficients:
(Intercept) x1 x2 x3
-0.17383 0.07602 -0.09759 -0.23920