Frage

ich ein paar loglineare Modelle haben, die für unsere Zwecke nur glm() Objekte mx, my, mz genannt werden. Ich möchte eine schön formatierte xtable der Analyse von Devianz bekommen, so natürlich würde ich xtable(anova(mx, my, mz, test = "Chisq")) ausführen möchten.

Die Vanille-Ausgabe von xtable jedoch nicht enthalten sind die Modellspezifikationen. Ich möchte diejenigen, für alle die ANOVA-Tests umfassen ich laufen, so dass, wenn es keine param ist mir persönlich fehlt, dass dies tut werde ich wahrscheinlich muss nur meine eigene Lösung zerhacken. Aber ein Blick auf die Hilfeseite, scheint es keine einfache Art und Weise zu sein, um die Modellspezifikationen enthalten.

Alle Gedanken? Alternativen?

Wenn es dies hilft bei der 2.9.1 mit XTABLE 1,5-5 durchgeführt wurde.

War es hilfreich?

Lösung

Wenn a das anova Tabellenobjekt ist, dann tut attr(a,"heading") die Informationen enthalten, die Sie suchen, aber ich konnte nicht eine schöne Art und Weise zu extrahieren es herausfinden. So sah ich den Code von anova.glm auf, die mich auf den Code von anova.lmlist gerichtet, um herauszufinden, wie sie diese Informationen in der Rubrik stellen. Dies inspirierte zu folgenden Lösung:

# fake data
x <- 1:10
y <- x+ rnorm(10)

# two models
m1 <- glm(y~x)
m2 <- glm(y~x+I(x^2))
a <- anova(m1, m2)  # anova object to be printed

# get model formulas
flas <- sapply(list(m1,m2), function(x)paste(deparse(x$formula)))
rownames(a) <- flas  # add formulas as rownames

# convert to latex
xtable(a)

Bearbeiten gerecht zu werden für lange Formeln:
Wenn Sie lange Formeln haben, sind zwei Änderungen notwendig: Erstens müssen wir sicherstellen, dass deparse es nicht in Linien nicht bricht, und dann müssen wir die Formel in der Tabelle zu wickeln machen Latex. Die erste kann durch Verwendung des cutoff.width Argument Deparse erreicht werden, und die zweite von einem p{width} Spaltentyp in Latex verwendet wird. Zum Beispiel:

# add long formula
m2$formula <- freq ~ sex + attend + birth + politics + sex:attend + sex:birth + 
              sex:politics + attend:birth + attend:politics + birth:politics + 
              sex:attend:birth + sex:attend:politics + sex:birth:politics +
              attend:birth:politics
a <- anova(m1, m2) 

# use a large width
flas <- sapply(list(m1,m2), 
               function(x)paste(deparse(x$formula, cutoff.width=500)))
rownames(a) <- flas  # add formulas as rownames

# convert to latex with first column wrapped in a 5cm wide parbox
xtable(a, align="p{5cm}rrrr")

Das Ergebnis ist nicht übermäßig hübsch, aber Ihre Formel ist nicht recht nicht. In diesem speziellen Fall würde ich (sex + attend + birth + politics)^3 verwenden - erhält den Punkt herüber und ist viel kürzer.

Andere Tipps

Ich rechne damit, dass Sie LaTeX Tisch bekommen möchten, aber Sie können leicht zu bekommen HTML-Tabelle mit Modellformel.

# if we presuppose that <b>a</b> is object from @Aniko's reply
> class(a)
[1] "anova"      "data.frame"
# after doing a bit of that sapply magic you get
> a
Analysis of Deviance Table

Model 1: y ~ x
Model 2: y ~ x + I(x^2)
               Resid. Df Resid. Dev Df Deviance
y ~ x                  8     15.503            
y ~ x + I(x^2)         7     12.060  1   3.4428

Sie können etwas tun:

# load xtable library
library(xtable)
# sink output to html file
sink("~/anova_specs.html")  # suppose you're running R on Linux "~/"
print(xtable(a), type = "html")
sink()

Es ist nicht so hübsch wie LaTeX Tabelle, aber es hat Modellformel ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top