簡體   English   中英

如何讓 lm() 中的 output 包含標准。 錯誤和其他沒有使用 summary() 的 stargazer

[英]How to have output from lm() include std. error and others without using summary() for stargazer

我通過以下方式在 r 中擬合幾個線性模型:

set.seed(12345)
n = 100
x1 = rnorm(n)
x2 = rnorm(n)+0.1
y = x + rnorm(n)

df <- data.frame(x1, x2, y)
x_str <- c("x1", "x1+x2")

regf_lm <- function(df,y_var, x_str ) {
  frmla <- formula(paste0(y_var," ~ ", x_str ))
  fit <- lm(frmla, data = df ) 
  summary(fit) #fit
}

gbind_lm <- function(vv) {
  n <-  vv %>% length()
  fits <- list()
  coefs <- list()
  ses <- list()
  for (i in 1:n ) {
    coefs[[i]] <- vv[[i]]$coefficients[,1]
    ses[[i]] <- vv[[i]]$coefficients[,2]
    fits[[i]] <- vv[[i]]
  }
  
  list("fits" = fits, "coefs" = coefs, "ses" = ses)
}
  
stargazer_lm <- function(mylist, fname, title_str,m_type = "html",...) {
    stargazer(mylist$fits, coef =  mylist$coefs,
              se = mylist$ses,
              type = m_type, title = title_str, 
              out = paste0("~/projects/outputs",fname),  single.row = T ,...)
}

p_2 <- map(x_str, 
           ~ regf_lm (df = df ,
                      y_var = "y", x_str = .))
m_all <- do.call(c, list(p_2)) %>% gbind_lm()
stargazer_lm(m_all,"name.html","My model", m_type = "html")

regf_lm中,如果我在最后一行使用summary(fit) ,我可以生成帶有估計系數列的 reg output,std。 錯誤等。但 Stargazer() 不適用於 summary(lm()) (返回error $ operator is invalid for atomic vectors )。 但是,如果我只在regf_lm的最后一行使用“fit”,則 output 僅顯示估計系數而不顯示標准錯誤, R sq...和gbind_lm()將不起作用,因為我無法提取 ses 或 fit。

任何意見是極大的贊賞。

您可以使用 package broom以整潔的格式直接導出 model 統計數據

library(broom)

set.seed(12345)
n = 100
x1 = rnorm(n)
x2 = rnorm(n)+0.1
y = x1 + rnorm(n)

df <- data.frame(x1, x2, y)
x_str <- c("x1", "x1+x2")

regf_lm <- function(df,y_var, x_str ) {
  frmla <- formula(paste0(y_var," ~ ", x_str ))
  fit <- lm(frmla, data = df ) 
  return(list(fit,select(broom::tidy(fit),std.error))) #fit
}

exm_model <- regf_lm(iris,'Sepal.Width','Sepal.Length')

stargazer(exm_model[[1]], coef =  exm_model[[2]], title = 'x_model', 
              out ='abc',  single.row = T)

這段代碼在我的本地工作沒有問題,我認為你可以在你的工作流程中應用它。

暫無
暫無

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

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