簡體   English   中英

將 lm() model 組合與 9 個變量的所有可能的 broom::glance 統計信息放入 R 中的 dataframe 中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM