Pergunta

Eu tenho um monte de modelos loglineares, que, para nossos propósitos, serão apenas glm() objetos chamados mx, my, mz. Eu quero ficar bem formatado xtable da análise do desvio, então naturalmente eu gostaria de realizar xtable(anova(mx, my, mz, test = "Chisq")).

A saída de baunilha de xtable, no entanto, não inclui as especificações do modelo. Eu gostaria de incluir aqueles para todos os testes ANOVA que estou executando; portanto, se não houver um parâmetro que eu esteja perdendo, isso provavelmente terei que hackear minha própria solução. Mas, olhando a página de ajuda, não parece haver uma maneira fácil de incluir as especificações do modelo.

Alguma ideia? Alternativas?

Se ajudar, isso foi feito em 2.9.1 com Xtable 1.5-5.

Foi útil?

Solução

E se a é o objeto da tabela ANOVA, então attr(a,"heading") contém as informações que você está procurando, mas não consegui descobrir uma boa maneira de extraí -las. Então eu procurei o código de anova.glm, que me direcionou para o código de anova.lmlist Para descobrir como eles colocam essas informações no título. Isso inspirou a seguir a solução:

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

Edite para atender a longas fórmulas:
Se você tem fórmulas longas, são necessárias duas alterações: primeiro temos que ter certeza de que deparse Não o divide em linhas e, em seguida, precisamos fazer o látex embrulhar a fórmula na tabela. O primeiro pode ser alcançado usando o cutoff.width argumento de deparse, e o segundo usando um p{width} Tipo de coluna no látex. Por exemplo:

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

O resultado não é excessivamente bonito, mas sua fórmula também não é bonita. Neste caso em particular, eu usaria (sex + attend + birth + politics)^3 - Alega o ponto e é muito mais curto.

Outras dicas

Eu acho que você deseja obter a tabela de látex, mas pode facilmente obter a tabela HTML com a fórmula do 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

Você pode fazer algo assim:

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

Não é tão bonito quanto a tabela de látex, mas tem uma fórmula de modelo ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top