数据框中变量的回归

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