Pregunta

Tengo un montón de modelos log-lineales, que, para nuestros propósitos será sólo glm() objetos llamados mx, my, mz. Quiero conseguir un formato muy bien xtable-del análisis de la desviación, por lo que, naturalmente, me gustaría realizar xtable(anova(mx, my, mz, test = "Chisq")).

La salida de vainilla de xtable, sin embargo, no incluye las especificaciones del modelo. Me gustaría incluir aquellos para todas las pruebas de ANOVA estoy corriendo, por lo que si no hay un parámetro que me falta que hace esto probablemente voy a tener que cortar mi propia solución. Sin embargo, mirando por encima de la página de ayuda, no parece haber una manera fácil de incluir las especificaciones del modelo.

¿Alguna idea? Alternativas?

Si se ayuda a esto se hizo en 2.9.1 con xtable 1,5-5.

¿Fue útil?

Solución

Si a es el objeto de tabla ANOVA, entonces attr(a,"heading") contiene la información que está buscando, pero no pude encontrar una buena manera de extraerlo. Así que busqué el código de anova.glm, que me indicó que el código de anova.lmlist de averiguar cómo poner esa información en el encabezado. Esto inspiró a siguiente solución:

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

Editar para atender a las fórmulas largas:
Si tiene fórmulas largas, se necesitan dos cambios: primero hay que asegurarse de que no se rompa deparse en líneas, y entonces tenemos que hacer que el látex para envolver la fórmula de la tabla. El primero se puede lograr mediante el uso del argumento cutoff.width de deparse, y la segunda mediante el uso de un tipo de columna p{width} en látex. Por ejemplo:

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

El resultado no es muy bonita, pero su fórmula no es muy bien. En este caso particular, me gustaría utilizar (sex + attend + birth + politics)^3 - consigue el punto a través y es mucho más corto.

Otros consejos

Me parece que desea obtener la tabla de látex, pero se puede conseguir fácilmente tabla HTML con la fórmula de modelo.

# 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

Puede hacer algo como esto:

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

No es tan bonita como mesa de látex, pero tiene la fórmula modelo ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top