2010-02-19 6 views
5

Ho un sacco di modelli loglineari, che per i nostri scopi saranno solo glm() oggetti chiamati mx, my, mz. Voglio ottenere un xtable ben formattato dell'analisi della devianza, quindi naturalmente vorrei eseguire xtable(anova(mx, my, mz, test = "Chisq")).Incluse le specifiche del modello in xtable (anova (...))

L'output di vaniglia di xtable, tuttavia, non include le specifiche del modello. Mi piacerebbe includere quelli per tutti i test ANOVA in cui sono in esecuzione, quindi se non c'è un parametro mi manca questo probabilmente dovrò semplicemente modificare la mia soluzione. Ma guardando oltre la pagina di aiuto, non sembra essere un modo semplice per includere le specifiche del modello.

Qualche idea? Alternative?

Se questo è stato utile in 2.9.1 con xtable 1.5-5.

risposta

4

se a è l'oggetto tabella anova, quindi attr(a,"heading") contiene le informazioni che stai cercando, ma non sono riuscito a capire un buon modo per estrarlo. Quindi ho cercato il codice di anova.glm, che mi ha indirizzato al codice di anova.lmlist per capire come hanno inserito tali informazioni nell'intestazione. 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 lunghe:
Se avete formule lunghe, sono necessari due cambiamenti: prima dobbiamo fare in modo che deparse non si rompe in linee, e quindi dobbiamo fare in lattice per avvolgere la formula nella tabella. Il primo può essere ottenuto utilizzando l'argomento cutoff.width di deparse e il secondo utilizzando un tipo di colonna p{width} in latex. 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 carino, ma la tua formula non è carina. In questo caso particolare userò (sex + attend + birth + politics)^3 - ottiene il punto attraverso ed è molto più breve.

+0

Questo è un ottimo inizio, ma una sorta di suddivide ulteriormente la gerarchia di interazione. Ad esempio, se ho '[[3]] [1]" freq ~ sesso + frequentare + nascita + politica + sesso: frequentare + sesso: nascita + " [2]" sesso: politica + frequentare: nascita + frequentare : la politica + nascita: la politica + " [3]" sesso: frequentare: nascita + sex: frequentare: la politica + sex: la nascita: la politica + " [4]" Partecipare: nascita: la politica"' non lo fa lavoro! Così vicino però - sembra che la soluzione includa l'inserimento dei modelli long-form sul tavolo e la loro numerazione, e quindi solo il riferimento al numero nella tabella reale. – HamiltonUlmer

+0

Ho aggiunto un esempio con la tua formula lunga. – Aniko

1

Suppongo che desideri ottenere la tabella LaTeX, ma puoi facilmente ottenere la tabella HTML con la formula del modello.

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

Problemi correlati