R Loop for Variable Names运行线性回归模型

时间:2017-09-29 16:16:00

标签: r loops linear-regression modeling

首先,我对此很新,所以我的方法/想法可能是错误的,我已经使用R和R studio将xlsx数据集导入数据框。我希望能够遍历列名称以获得所有变量" 10 "在它们中运行简单的线性回归。所以这是我的代码:

indx <- grepl('_10_', colnames(data)) #list returns all of the true values in the data set
col10 <- names(data[indx]) #this gives me the names of the columns I want

这是我有的for循环,它返回一个错误:

temp <- c()
for(i in 1:length(col10)){
   temp = col10[[i]]
  lm.test <- lm(Total_Transactions ~ temp[[i]], data = data)
  print(temp) #actually prints out the right column names
  i + 1
}

甚至可以运行循环将这些变量放在线性回归模型中吗?我得到的错误是:&#34; model.frame.default中的错误(公式= Total_Transactions~temp [[i]],:变量长度不同(找到&#39; temp [[i]]&#39 ;)&#34;。如果有人能指出我正确的方向,我将非常感激。谢谢。

2 个答案:

答案 0 :(得分:4)

好的,我会发一个答案。我将使用数据集mtcars作为示例。我相信它可以与您的数据集一起使用 首先,我创建了一个商店lm.test,一个类list的对象。在你的代码中,每次循环都会分配lm(.)的输出,最后你只有最后一个,所有其他的都会被新的重写。
然后,在循环内部,我使用函数reformulate将回归公式放在一起。还有其他方法可以做到这一点,但这个很简单。

# Use just some columns
data <- mtcars[, c("mpg", "cyl", "disp", "hp", "drat", "wt")]
col10 <- names(data)[-1]

lm.test <- vector("list", length(col10))

for(i in seq_along(col10)){
    lm.test[[i]] <- lm(reformulate(col10[i], "mpg"), data = data)
}

lm.test

现在,您可以将结果列表用于各种事物。我建议你开始使用lapply和朋友。
例如,要提取系数:

cfs <- lapply(lm.test, coef)

为了得到摘要:

smry <- lapply(lm.test, summary)

一旦您熟悉*apply功能,它就变得非常简单。

答案 1 :(得分:0)

您可以创建一个临时子集,在该子集中只选择回归中使用的列。这样,您就不需要在公式中注入临时名称。

坚持你的代码,这应该可以解决问题。

for(i in 1:length(col10)){
 tempSubset <- data[,c("Total_Transactions", col10[i]]
 lm.test <- lm(Total_Transactions ~ ., data = tempSubset)
 i + 1
}