回归数据框中的变量

时间:2015-12-09 02:07:02

标签: r regression lapply sapply

我有一个数据框:

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)

等。 (当然,真正的数据框有很多变量)。

我尝试将它们放在一个循环中,但它没有用。我也尝试使用lapply,但也无法产生预期的结果。有谁知道这个伎俩?

2 个答案:

答案 0 :(得分:0)

您可以使用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来获得更漂亮的&#34;每个模型中的形式

vars <- names(df)
result <- lapply(vars, function(resp) {
    do.call("lm", list(reformulate(".",resp), data=quote(df)))
})

这些方法中的每一个都返回一个列表。您可以使用result[[1]]result[[2]]

提取单个模型

答案 1 :(得分:0)

或者你可以试试这个......

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