Domanda

Ho un sacco di modelli loglineari, che, per i nostri scopi sarà solo essere glm() oggetti chiamati mx, my, mz. Voglio ottenere un xtable ben formattato dell'analisi della devianza, così naturalmente vorrei svolgere xtable(anova(mx, my, mz, test = "Chisq")).

L'uscita di vaniglia di xtable, tuttavia, non include le specifiche del modello. Mi piacerebbe includere quelle per tutti i test ANOVA Io corro, quindi se non v'è un parametro che mi manca che fa questo io probabilmente resta che incidere la mia propria soluzione. Ma guardando oltre la pagina di aiuto, non sembra essere un modo semplice per includere le specifiche del modello.

Qualche idea? Alternative?

Se aiuta questo è stato fatto in 2.9.1 con XTABLE 1,5-5.

È stato utile?

Soluzione

se a è l'oggetto tabella ANOVA, quindi attr(a,"heading") contiene le informazioni che state cercando, ma non riuscivo a capire un bel modo di estrarlo. Così ho guardato il codice di anova.glm, che mi hanno indicato il codice di anova.lmlist di capire come hanno messo le informazioni nella rubrica. Questo ha ispirato al seguente soluzione:

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

Modifica per soddisfare le formule lunghi:
Se si dispone di formule lunghe, sono necessari due cambiamenti: prima dobbiamo fare in modo che deparse non si rompe in linee, e quindi abbiamo bisogno di fare in lattice per avvolgere la formula nella tabella. Il primo può essere ottenuto utilizzando l'argomento cutoff.width di Deparse, e la seconda utilizzando un tipo di colonna p{width} in lattice. Ad esempio:

# 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")

Il risultato non è eccessivamente bella, ma la formula non è abbastanza neanche. In questo caso particolare vorrei usare (sex + attend + birth + politics)^3 - ottiene il punto attraverso ed è molto più breve.

Altri suggerimenti

Mi sa che si desidera ottenere tavolo LaTeX, ma si può facilmente ottenere tabella HTML con il modello formula.

# 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

Si può fare qualcosa di simile:

# 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()

Non è bella come tabella LaTeX, ma ha modello formula ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top