将具有 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))
刚学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))