我有一堆对数线性模型,出于我们的目的,这些模型只是称为glm()
的mx, my, mz
对象。我想获得格式正确的xtable
来分析偏差,因此自然而然地我想执行xtable(anova(mx, my, mz, test = "Chisq"))
。xtable
的原始输出不包括模型规范。我想将这些用于我正在运行的所有ANOVA测试,因此,如果没有我缺少的参数,我可能只需要破解自己的解决方案即可。但是查看帮助页面,似乎没有一种简单的方法来包含模型规范。
有什么想法吗?备择方案?
如果有帮助,请在2.9.1中使用xtable 1.5-5完成。
最佳答案
如果a
是anova表对象,则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)
编辑以适应较长的公式:
如果您的公式较长,则需要进行两项更改:首先,我们必须确保
deparse
不会将其分成几行,然后我们需要制作 latex 以将公式包装在表中。第一个可以通过使用deparse的cutoff.width
参数来实现,第二个可以通过在 latex 中使用p{width}
列类型来实现。例如:# 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")
结果不是很漂亮,但是您的公式也不是很漂亮。在这种特殊情况下,我将使用
(sex + attend + birth + politics)^3
-指出要点,而且要短得多。