2016-03-25 3 views
2

stargazer - отличный инструмент для создания таблицы регрессии, если вы не используете 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, а затем создать 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) 
+0

bayesglm Isnt в списке 'звездочет ::: \' Звездочет модели \ '' – rawr

+2

хороший господин, звездочет является [_a одной функции _] (? https://github.com/cran/stargazer/blob/master/R/stargazer-internal.R#L8), возможно, поэтому никто не сделал расширение для bayesglm – rawr

ответ

2

Похоже, это трюк:

library(texreg) 
htmlreg(fit) 

и для текста:

screenreg(list(fit)) 
1

Как @rawr точек в комментариях stargazer - в то время как полезный - к сожалению, написанный в довольно монолитном, жестком стиле. broom package представляет собой (ИМО) хорошо разработанную модульную/объектно-ориентированную структуру для извлечения сводной информации из большого диапазона типов моделей, но она не ориентирована на составление текстовых/табличных резюме. Для тех, кому это нравится, было бы здорово, если бы передний конец stargazer мог быть перенесен на задний конец broom, но это было бы лот работы. В том же время, короткий взлом внутренней stargazer:::.stargazer.wrap функции, этот метод (обманный stargazer, полагая, что fit на самом деле lm() модели) рода работ:

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

Он представляет коэффициенты и стандартные ошибки, которые построены в объект fit, а не на выход ваших задних рисунков, но в этом примере по крайней мере эти ответы очень похожи.

+1

, вот что я думал делать, но это не так работа - у меня не было второй линии. Мне понадобилось 'quote (lm())' для этого, чтобы работать, хотя – rawr

+0

yup. Я закончил хакерством через .stargazer.wrap, пока не нашел, что stargazer (ugh ugh ugh) использует специальную функцию 'model.identify()', которая смотрит на объект вызова, а также класс ... –

+0

Да, поэтому '' texreg'' использует общую функцию '' extract'', поэтому пользователи могут писать и регистрировать свои собственные методы. '' extract'' построен по аналогичному принципу, как '' метла'', хотя '' метла'' была разработана позже. Результирующие объекты '' texreg'' являются объектами S4, которые хранят соответствующие данные, такие как коэффициенты и т. Д., а затем функции '' texreg'', '' htmlreg'', '' screenreg'' и т. д. могут использовать эти данные для построения таблиц. Вы можете либо позволить функции '' texreg'' вызывать '' extract'' внутренне, либо вы можете сохранить промежуточные результаты и манипулировать ими, прежде чем передавать их на '' texreg''. –

1

Если вы ОК с уценкой, то 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 приведут к чрезвычайно широкой таблице. Но есть некоторые Othe PARAMS вы можете захотеть использовать, например:

> 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 
-------------------- -----------------------------------