bayesglm 的回归 table?

Regression table for bayesglm?

stargazer is a great tool to generate a regression table if you are not using bayesglm。例如,假设我有以下数据:

library(dplyr)
set.seed(9782)
N<-1000
df1 <- data.frame(v1=sample(c(0,1),N,replace = T),
                  v2=sample(c(0,1),N,replace = T),
                  Treatment=sample(c("A", "B", "C"), N, replace = T),
                  noise=rnorm(N)) %>% 
  mutate(Y=0.5*v1-0.7*v2+2*I(Treatment=="B")+3*I(Treatment=="C")+noise)

我可以 运行 lm 然后为我的 r markdown 创建 html (或文本)输出:

lm(data = df1, formula = Y~Treatment+v1+v2) %>% 
  stargazer::stargazer(type="html", style = "qje")

有没有办法为 bayesglm 做类似的事情?在这种情况下,pointEstimate 具有系数,standardError 具有标准误差

library(arm)
fit <- bayesglm(data = df1, formula = Y~Treatment+v1+v2)
posteriorDraws <- coef(sim(fit, n.sims=5000))
pointEstimate <- colMeans(posteriorDraws)
standardError <- apply(posteriorDraws, 2, sd)

看起来像这样就可以了:

library(texreg)
htmlreg(fit)

对于文本:

screenreg(list(fit))

正如@rawr 在评论中指出的那样,stargazer 是——虽然有用——但不幸的是,它是以一种相当单一、难以扩展的风格编写的。 broom package 是 (IMO) 一个设计精美的 modular/object-oriented 框架,用于从大量模型类型中提取摘要信息,但它并不面向生成 textual/tabular 摘要。对于那些喜欢那种东西的人来说,如果 stargazer 前端可以嫁接到 broom 后端上就好了,但那将是 lot 工作的。与此同时,除了破解内部 stargazer:::.stargazer.wrap 函数之外,这种方法(欺骗 stargazer 相信 fit 实际上是一个 lm() 模型) 有点像 作品:

class(fit) <- c("glm","lm")
fit$call[1] <- quote(lm())
stargazer(fit)

它显示了 fit 对象中内置的系数和标准误差,而不是后验绘制的输出,但在这个例子中至少这些答案非常相似。

如果您对降价没问题,那么 generic pander S3 method 通常会做得很好:

> pander(fit, round = 4)

--------------------------------------------------------------
     &nbsp;        Estimate   Std. Error   t value   Pr(>|t|) 
----------------- ---------- ------------ --------- ----------
 **(Intercept)**    0.0864      0.0763      1.131     0.2581  

 **TreatmentB**     1.951       0.0826      23.62       0     

 **TreatmentC**     3.007       0.0802      37.49       0     

     **v1**         0.4555      0.0659      6.915       0     

     **v2**        -0.6845      0.0659     -10.39       0     
--------------------------------------------------------------

Table: Fitting generalized (gaussian/identity) linear model: Y ~ Treatment + v1 + v2

请注意,我在这个例子中强制对数字进行四舍五入,因为一些 P 值非常低,所以默认的 digits 和其他 global options 会导致非常宽的 table。但是还有一些您可能想要使用的其他参数,例如:

> pander(summary(fit), round = 4, add.significance.stars = TRUE, move.intercept = TRUE, summary = TRUE, split.cells = Inf)

----------------------------------------------------------------------
     &nbsp;        Estimate   Std. Error   t value   Pr(>|t|)         
----------------- ---------- ------------ --------- ---------- -------
 **TreatmentB**     1.951       0.0826      23.62       0       * * * 

 **TreatmentC**     3.007       0.0802      37.49       0       * * * 

     **v1**         0.4555      0.0659      6.915       0       * * * 

     **v2**        -0.6845      0.0659     -10.39       0       * * * 

 **(Intercept)**    0.0864      0.0763      1.131     0.2581          
----------------------------------------------------------------------


(Dispersion parameter for  gaussian  family taken to be  1.083267 )


-------------------- -----------------------------------
   Null deviance:     2803  on 999  degrees of freedom  

 Residual deviance:   1078  on 995  degrees of freedom  
-------------------- -----------------------------------