【发布时间】: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 <- dplyr::bind_rows(lapply(model_list, glancing))获取您的结果摘要。 -
@GregorThomas 谢谢!你可能知道如何做到这一点?出于某种原因,我无法通过循环或使用 Glance 创建带有 (lm(formulas[[i]], data=training_data) 的列表。也许我做错了。
标签: r dataframe combinations formula broom