r-如何在不使用summary()的情况下让lm()的输出包括std.error和其他内容



我以以下方式拟合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),我可以生成带有估计系数、std.error等列的reg输出。但是Stargazer((不适用于summary(lm((((返回error $ operator is invalid for atomic vectors(。然而,如果我只是使用";"适合";在regf_lm的最后一行,输出只显示估计的系数,而不是std误差,R平方…和gbind_lm()不起作用,因为我无法提取ses或拟合。

如有任何建议,不胜感激。

您可以使用包broom以整洁的格式直接导出模型统计信息

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)

这段代码在我的本地工作时没有问题,我认为你可以在你的工作流程中应用它。

最新更新