首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >变量名的r循环运行线性回归模型

变量名的r循环运行线性回归模型
EN

Stack Overflow用户
提问于 2017-09-29 16:15:59
回答 2查看 9.7K关注 0票数 3

首先,我对此非常陌生,所以我的方法/想法可能是错误的,我使用R和R将xlsx数据集导入到数据框架中。我希望能够循环通过列名,以获得所有的变量,其中正好有"10“,以便运行一个简单的线性回归。这是我的密码:

代码语言:javascript
复制
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循环:

代码语言:javascript
复制
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中的错误(公式= Total_Transactions ~ temp[i],:变量长度不同(在”temp[i]“中找到)”。如果有人能给我指明正确的方向,我将非常感激。谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-29 17:02:40

好的,我会发个答复。我将使用dataset mtcars作为示例。我相信它会适用于你的数据集。

首先,我创建了一个商店,lm.test,类list的一个对象。在您的代码中,每次通过循环分配lm(.)的输出,最后只有最后一个输出,所有其他输出都会被更新的代码重写。

然后,在循环中,使用函数reformulate将回归公式组合在一起。有其他方法可以做到这一点,但这个方法很简单。

代码语言:javascript
复制
# 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和朋友。

例如,提取系数:

代码语言:javascript
复制
cfs <- lapply(lm.test, coef)

为了得到摘要:

代码语言:javascript
复制
smry <- lapply(lm.test, summary)

一旦您熟悉了*apply函数,它就变得非常简单。

票数 7
EN

Stack Overflow用户

发布于 2017-09-29 16:44:31

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

坚持你的代码,这应该是可行的。

代码语言:javascript
复制
for(i in 1:length(col10)){
 tempSubset <- data[,c("Total_Transactions", col10[i]]
 lm.test <- lm(Total_Transactions ~ ., data = tempSubset)
 i + 1
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46493011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档