用于变量名称的 R 循环以运行线性回归模型

标签 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
}

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

最佳答案

好的,我会发布一个答案。我将以数据集 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 和 friend 。
例如,提取系数:

cfs <- lapply(lm.test, coef)

为了获得摘要:

smry <- lapply(lm.test, summary)

熟悉了*apply函数后就变得非常简单了。

关于用于变量名称的 R 循环以运行线性回归模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46493011/

相关文章:

r - ggplotly() 停用轴标题和轴之间的距离并隐藏辅助轴标题

r - 从 R 中的正态分布样本生成多个置信区间

javascript - 遍历数组并将项目与 html 元素匹配

loops - 如何循环单元格范围并在相邻列中设置值

JavaScript - 当输入不是数字时提示

python - Pandas OLS - 拉动参数不起作用

math - 梯度下降算法中的delta到底是什么意思?

r - 是否有任何选项可以定义 dbGetQuery 的特定时间限制

r - 在circos中使用circos函数

r - 为什么 arm::standardize() 无法在循环中处理 lm 对象?