簡體   English   中英

將來自多個樣本的回歸摘要輸出組合到 R 中的單個數據幀中

[英]Combining regression summary outputs from multiple samples into a single dataframe in R

我正在嘗試將多個lm輸出組合到一個數據框中,以進行進一步的計算。 我有一個包含 1000 個觀察值和 62 個變量的數據集。 該項目是隨機分割數據集 63/37,訓練模型,重復 1000 次並保存所有 1000 次運行的系數、擬合值和 r2。 所以我在這里做大部分(使用mtcars ):

data("mtcars")
f <- function () {
  fit <- lm(mpg ~ ., data = mtcars, subset = sample <- sample.int(n = nrow(mtcars), size = floor(.63*nrow(mtcars)), replace = F))
  coef(fit)
}
output <- t(replicate(1000, f()))

我知道我可以使用summary(fit)$r.squared獲得 rsq 值,並且我可以使用predict()來獲得擬合值。 我只是在苦苦思索如何使用保存的系數將它們放入數據框中。

下面應該做

get_model <- function (input_data) {
    fit <- lm(mpg ~ ., 
              data = mtcars, 
              subset = sample <- sample.int(n = nrow(mtcars), 
                     size = floor(.63*nrow(mtcars)), replace = F)
             )      
    return(fit)
}

get_results <- function(lm_model){
    data <- data.frame()
    data <- rbind(data, coef(lm_model))
    data <- cbind(data, summary(lm_model)$r.squared)
    colnames(data) <- c(names(mtcars), "rsquared")
    return(data)
}


# running the above
input_data <- mtcars
general_df <- data.frame()

for(i in 1:1000){
    my_model   <- get_model(input_data)
    final_data <- get_results(my_model)
    general_df <- rbind(general_df, final_data)
}

你非常接近:

library(tidyverse)
library(modelr)
data("mtcars")

get_data_lm <- function(data_df, testPCT = 0.37){

    data_resample <- modelr::crossv_mc(data_df, n = 1, test = testPCT)
    fit <- lm(mpg ~ ., data = as.data.frame(data_resample$train))

    stats <- c(coef(fit),
               "R2" = summary(fit)$r.squared,
               "AdjR2" = summary(fit)$adj.r.squared)
    pred_vals <- predict(fit, newdata = as.data.frame(data_resample$test))

    c(stats, pred_vals)

}

output <- t(replicate(1000, get_data_lm(mtcars)))

您唯一需要做的就是連接您想要的其他統計數據和預測值。 或者,您可以使用並行sapply()變體來顯着加快模擬速度。

另一條評論:我使用來自modelr::包的crossv_mc()函數來創建一個測試和訓練分區。 但是,我本可以在函數外使用n = 1000來代替; 這將在我的工作環境中創建一個重采樣數據框,供我apply()一個函數。 有關更多信息,請參閱modelr:: GitHub 頁面

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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