Question

J'ai un tas de modèles loglinéaires, qui, pour nos besoins sera juste des objets glm() appelés mx, my, mz. Je veux obtenir un xtable bien formaté de l'analyse de la déviance, donc je voudrais naturellement effectuer xtable(anova(mx, my, mz, test = "Chisq")).

La sortie de la vanille de xtable, cependant, ne comprend pas les spécifications du modèle. Je voudrais inclure ceux pour tous les tests ANOVA je suis en cours d'exécution, donc s'il n'y a pas que je manque param qui fait cela, je vais probablement ai juste à pirater ma propre solution. Mais la recherche sur la page d'aide, il ne semble pas être un moyen facile d'inclure les spécifications du modèle.

Toutes les pensées? Alternatives?

Si elle aide cela a été fait en 2.9.1 avec XTABLE 1,5-5.

Était-ce utile?

La solution

si a est l'objet de la table ANOVA, puis attr(a,"heading") donne des renseignements de vous recherchez, mais je ne pouvais pas trouver un moyen agréable de l'extraire. Alors je regardais le code de anova.glm, qui m'a dirigé vers le code de anova.lmlist pour savoir comment ils ont mis cette information dans la rubrique. Ce qui a incité à la solution suivante:

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

Modifier pour répondre à des formules longues: Si vous avez des formules longues, deux changements sont nécessaires: d'abord, nous devons nous assurer que deparse ne se casse pas en lignes, et nous devons faire latex pour envelopper la formule dans le tableau. La première peut être obtenue en utilisant l'argument cutoff.width de Deparse, et la seconde en utilisant un type de colonne de p{width} en latex. Par exemple:

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

Le résultat est pas trop jolie, mais votre formule n'est pas assez non plus. Dans ce cas particulier, je voudrais utiliser (sex + attend + birth + politics)^3 - obtient le point à travers et est beaucoup plus courte.

Autres conseils

Je pense que vous voulez obtenir table LaTeX, mais vous pouvez facilement obtenir table HTML avec la formule du modèle.

# 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

Vous pouvez faire quelque chose comme ceci:

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

Il est pas aussi jolie que table de LaTeX, mais il répond à la formule modèle ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top