将具有 9 个变量的 lm() 模型组合的所有可能 broom::glance 统计数据放入 R 中的数据框中

Put all possible broom::glance statistics of lm() model combinations with 9 variables into a dataframe in R

刚学R,不知道怎么解决。我正在尝试获取显示以下内容的数据框:

Model Number | adj.r.squared | sigma   | statistic | df 
------------------------------------------------------
Model 1      | 0.465         | 0.437   |  459.0.   | 8
Model 2      | 0.0465        | 0.0437  |  659.0.   | 7

我正在使用 broom 包以通过 glance() 获取这些统计信息并为其创建了一个函数:

glancing <- function(x) {
  glance(x)[c("adj.r.squared", "sigma", "statistic", "df")]
}

我使用的数据集有 9 个变量(“可舞性”、“能量”、“响度”、“演讲度”、“声学度”、“活力”、“效价”、“速度”、“乐器性”)我需要线性回归的所有可能组合来预测受欢迎程度得分

我找到了一种将所有公式放在列表中的方法:

characteristics <- c("popularity","danceability","energy", "loudness", "speechiness", "acousticness", "liveness", "valence", "tempo", "instrumentalness")
N <- list(1,2,3,4,5,6,7,8,9)
COMB <- sapply(N, function(m) combn(x=characteristics[2:10], m))
formulas <- list()
k=0
for(i in seq(COMB)){
  tmp <- COMB[[i]]
  for(j in seq(ncol(tmp))){
    k <- k + 1
    formulas[[k]] <- formula(paste("popularity", "~", paste(tmp[,j], collapse=" + ")))
  }
}

我还能够将列表中的每个公式分配给具有线性模型的对象:

#Assign each model to a variables 
for(i in 1:length(formulas)) {                    
  assign(paste0("model",i),lm(formulas[[i]], data=training_data))
}

这给我留下了 511 个模型(对象),我必须手动将其放入 glance 函数,然后组合成一个数据框。

有更简单的方法吗?

我已经尝试将列表转换为数据框或向量,但似乎失败了,因为 class 是一个“公式”。

感谢您的帮助!

使用 assign 替换此循环:

for(i in 1:length(formulas)) {                    
  assign(paste0("model",i),lm(formulas[[i]], data=training_data))
}

在这个循环中使用列表:

model_list = list()
for(i in 1:length(formulas)) {                    
  model_list[[i]] = lm(formulas[[i]], data=training_data)
}

那么如果你想 glance 全部:

library(dplyr)
library(broom)
glance_results = bind_rows(lapply(model_list, glance))