我有一堆对数线性模型,出于我们的目的,这些模型只是称为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-指出要点,而且要短得多。

10-04 23:22