[英]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
我正在使用掃帚package 來獲取這些統計信息,並為此創建了 function:
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=" + ")))
}
}
我還能夠將列表中的每個公式分配給具有線性 model 的 object:
#Assign each model to a variables
for(i in 1:length(formulas)) {
assign(paste0("model",i),lm(formulas[[i]], data=training_data))
}
這給我留下了 511 個模型(對象),我必須手動將它們放入掃視 function中,然后組合成一個數據框。
有沒有更簡單的方法可以做到這一點?
我已經嘗試將列表轉換為數據框或向量,但由於 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))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.