我有一堆对数线性模型,为了我们的目的,它只是被glm()称为对象mx, my, mz.我想得到一个很好的格式化xtable的偏差分析,所以我自然会想要执行xtable(anova(mx, my, mz, test = "Chisq")).
xtable但是,香草输出不包括型号规格.我想把我正在运行的所有ANOVA测试都包括在内,所以如果没有一个参数,我就错过了这样做,我可能只需要破解我自己的解决方案.但是查看帮助页面,似乎没有一种简单的方法来包含模型规范.
有什么想法吗?备择方案?
如果有帮助,这是在2.9.1使用xtable 1.5-5完成的.
ifa是方差分析表对象,则attr(a,"heading")确实包含您正在查找的信息,但我无法找到提取它的好方法。所以我查找了 的代码anova.glm,它引导我找到 的代码,anova.lmlist以弄清楚他们如何将该信息放入标题中。这启发了以下解决方案:
# 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)
Run Code Online (Sandbox Code Playgroud)
编辑以适应长公式:
如果您有长公式,则需要进行两处更改:首先我们必须确保deparse不会将其分成几行,然后我们需要制作乳胶以将公式包裹在表格中。cutoff.width第一个可以通过使用deparse 参数来实现,第二个可以通过使用p{width}Latex 中的列类型来实现。例如:
# 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")
Run Code Online (Sandbox Code Playgroud)
结果并不太漂亮,但你的公式也不太漂亮。在这种特殊情况下,我会使用(sex + attend + birth + politics)^3- 来表达要点,而且要短得多。