簡體   English   中英

從多元回歸中提取系數、標准誤差、R2 等

[英]Extracting Coefficients, Std Errors, R2 etc from multiple regressions

我有以下回歸模型;

models <- lapply(1:25, function(x) lm(Y_df[,x] ~ X1))

它在Y_df數據Y_df 25 列上運行 25 次回歸。

輸出之一可以顯示為;

models[15] # Gives me the coefficients for model 15

Call:
lm(formula = Y_df[, x] ~ X1)

Coefficients:
(Intercept)         X1 
  0.1296812    1.0585835  

我可以將其存儲在單獨的 df 中。 我遇到的問題是關於 Std. 誤差、R2、殘留物等。

我也想將這些存儲到一個單獨的數據幀中。

我可以運行單獨的回歸並提取摘要,就像正常的 R 回歸輸出一樣。

ls_1 <- summary(models[[1]])
ls_1
ls_1$sigma

但是,我希望直接從運行 25 次回歸的代碼行中獲取值。

此代碼有效

> (models[[15]]$coefficients)
  (Intercept)          X1 
-0.3643446787  1.0789369642

然而; 這段代碼沒有。

> (models[[15]]$sigma)
NULL

我嘗試了各種不同的組合來嘗試提取這些結果,但沒有運氣。

以下完全符合我的要求。 我曾希望有一種方法可以用Std ErrorR2等替換coef一詞,但這不起作用。

models <- lapply(1:25, function(x) lm(Y_df[,x] ~ X1))
# extract just coefficients
coefficients <- sapply(Y_df, coef)

理想情況下,我想存儲上述模型的Std Error

如果模型被命名為 mod,您可以以與系數相同的方式獲得所有殘差:

mod$residuals

還有一些函數可以提取系數和殘差:

coef(mod)
resid(mod)

其他輸出,您可以通過summary提取:

summary(mod)$coef[,"Std. Error"]  # standard errors
summary(mod)$r.squared            # r squared
summary(mod)$adj.r.squared        # adjusted r squared

因此,您可以為每個模型創建一個包含這些結果的列表:

outputList <- lapply(models, function(x){
  coefs <- coef(mod)
  stdErr <- summary(mod)$coef[,"Std. Error"]
  rsq <- summary(mod)$r.squared
  rsq_adj <- summary(mod)$adj.r.squared
  rsd <- resid(mod)
  list(coefs = coefs, 
       stdErr = stdErr, 
       rsq = rsq, 
       rsq_adj = rsq_adj, 
       rsd = rsd)
})

例如,您可以通過outputList$mod1$rsq

或者您可以為每個創建單獨的數據框:

library(tidyverse)

# coefficients
coefs <- lapply(models, coef) %>%
  do.call(rbind, .) %>%
  as.data.frame() %>% # convert from matrix to dataframe
  rownames_to_column("model") # add original model name as a column in the dataframe

# standard errors
stdErr <- lapply(models, function(x){
  summary(mod)$coef[,"Std. Error"]
}) %>%
  do.call(rbind, .) %>%
  as.data.frame() %>% 
  rownames_to_column("model") 

# r squareds
rsq <- sapply(models, function(x){
  summary(mod)$r.squared
}) %>%
  as.data.frame() %>% 
  rownames_to_column("model")

# adjusted r squareds
rsq_adj <- sapply(models, function(x){
  summary(mod)$adj.r.squared
})%>%
  as.data.frame() %>% 
  rownames_to_column("model")

# residuals
rsd <- lapply(models, resid) %>%
  do.call(rbind, .) %>%
  as.data.frame() %>% 
  rownames_to_column("model") 

值得注意的是,如果您在 RStudio 中並將摘要分配給某些內容(即temp <- summary(mod) ),您可以鍵入對象的名稱,然后是“$”和所有其他對象的下拉列表可以從摘要中提取出現。

暫無
暫無

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

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