【问题标题】:Put all possible broom::glance statistics of lm() model combinations with 9 variables into a dataframe in R将具有 9 个变量的 lm() 模型组合的所有可能的 broom::glance 统计信息放入 R 中的数据框中
【发布时间】:2020-12-16 19:52:38
【问题描述】:

由于我刚刚学习 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 个模型(对象),我必须手动将它们放入 glancing 功能,然后组合成一个数据框。

有没有更简单的方法可以做到这一点?

我已经尝试将列表转换为数据框或向量,但由于该类是“公式”这一事实,它似乎失败了。

感谢您的帮助!

【问题讨论】:

  • 您正在为您的公式使用list,这很棒 - 也将您的模型放在list 中!然后您可以使用results &lt;- dplyr::bind_rows(lapply(model_list, glancing)) 获取您的结果摘要。
  • @GregorThomas 谢谢!你可能知道如何做到这一点?出于某种原因,我无法通过循环或使用 Glance 创建带有 (lm(formulas[[i]], data=training_data) 的列表。也许我做错了。

标签: r dataframe combinations formula broom


【解决方案1】:

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))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 1970-01-01
    • 2022-11-19
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多