2016-03-25 22 views
2

stargazer ist ein großartiges Werkzeug, um eine Regressionstabelle zu generieren, wenn Sie nicht bayesglm verwenden. Zum Beispiel nehme ich die folgenden Daten haben:Regressionstisch für 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) 

ich lm laufen kann und dann erstellen HTML (oder Text) Ausgabe für meine r Abschlags:

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

Gibt es eine Möglichkeit, etwas Ähnliches zu tun für bayesglm? In diesem Fall hat pointEstimate die Koeffizienten und standardError die Standardfehler

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 ist nicht in der Liste 'Stargazer ::: \' Stargazer Modelle \ '' – rawr

+2

guter Herr, Stargazer ist [_a einzelne Funktion _] (? https://github.com/cran/stargazer/blob/master/R/stargazer-internal.R#L8), vielleicht hat deshalb niemand eine Erweiterung für bayesglm gemacht – rawr

Antwort

2

Es sieht wie folgt aus funktioniert der Trick:

library(texreg) 
htmlreg(fit) 

und für Text:

screenreg(list(fit)) 
1

Als @rawr Punkte in Kommentaren stargazer ist - obwohl nützlich - leider in einem eher monolithischen, schwer zu erweiternden Stil geschrieben. Die broom package ist (IMO) ein schön gestaltetes modulares/objektorientiertes Framework zum Extrahieren von Zusammenfassungsinformationen aus einer großen Anzahl von Modelltypen, aber es ist nicht auf die Erstellung von textuellen/tabellarischen Zusammenfassungen ausgerichtet. Für diejenigen, die diese Art von Sache mögen, wäre es großartig, wenn die stargazer Front-End auf ein broom Back-End gepfropft werden könnte, aber es wäre ein Los der Arbeit. In der Zwischenzeit kurz die interne stargazer:::.stargazer.wrap Funktion, diese Methode des Hacker (gläubigen trickst stargazer in die fit ist eigentlich eine lm() Modell) Art Werke:

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

Es stellt die Koeffizienten und Standardfehler, die gebaut werden in das fit Objekt und nicht in die Ausgabe Ihrer posterioren Draws, aber in diesem Beispiel sind zumindest diese Antworten extrem ähnlich.

+1

das ist was ich dachte, aber es tat es nicht Arbeit - Ich hatte nicht die zweite Zeile. Ich brauchte 'quote (lm())', damit das funktioniert, obwohl – rawr

+0

yup. Ich endete damit, durch '.stargazer.wrap' zu hacken, bis ich feststellte, dass der Stargazer mit einer speziellen' model.identify() '-Funktion arbeitet, die sowohl das Aufrufobjekt als auch die Klasse betrachtet ... –

+0

Ja, Aus diesem Grund verwendet '' texreg'' eine generische Funktion '' extract'', so dass Benutzer ihre eigenen Methoden schreiben und registrieren können. 'extract'' basiert auf einem ähnlichen Prinzip wie' 'besen'', obwohl' 'besen'' später entwickelt wurde. Die resultierenden "texreg" -Objekte sind S4-Objekte, die die relevanten Daten wie Koeffizienten usw. speichern.und dann können die Funktionen '' texreg'', '' htmlreg'', '' screenreg'' usw. diese Daten verwenden, um Tabellen zu konstruieren. Sie können entweder die Funktion '' texreg'' intern aufrufen, oder Sie können die Zwischenergebnisse speichern und manipulieren, bevor Sie sie an '' texreg'' übergeben. –

1

Wenn Sie mit Abschlag in Ordnung sind, dann ist die generic pander S3 method in der Regel hat einen ziemlich guten Job:

> 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 

Bitte beachten Sie, dass ich die Zahlen gezwungen, in diesem Beispiel gerundet werden, da einige P-Werte extrem niedrig waren, so würde der Standard digits und andere global options zu einer extrem großen Tabelle führen. Aber es gibt einige othe params Sie vielleicht verwenden möchten, zB:

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