如何解决如何让 lm() 的输出包含 std错误和其他不使用 summary() 的观星者
我通过以下方式在 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 输出,std。错误等。但是 Stargazer() does not work with summary(lm()) (返回 error $ operator is invalid for atomic vectors
)。但是,如果我只在 regf_lm
的最后一行使用“fit”,则输出仅显示估计系数而不显示标准错误,R sq...和 gbind_lm()
将不起作用,因为我不能提取 ses 或 fit。
非常感谢任何建议。
解决方法
您可以使用包 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)
这段代码在我的本地运行没有问题,我认为您可以将其应用到您的工作流程中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。