5

我有一堆对数线性模型,为了我们的目的,它们只是glm()称为mx, my, mz. 我想得到一个格式良好xtable的偏差分析,所以我自然会想要执行xtable(anova(mx, my, mz, test = "Chisq")).

但是,原始输出xtable不包括模型规格。我想将这些用于我正在运行的所有 ANOVA 测试,所以如果没有我遗漏的参数,我可能只需要破解我自己的解决方案。但是查看帮助页面,似乎没有一种简单的方法来包含模型规范。

有什么想法吗?备择方案?

如果有帮助,这是在 2.9.1 中使用 xtable 1.5-5 完成的。

4

2 回答 2

4

如果a是方差分析表对象,则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不会将其分成几行,然后我们需要制作乳胶以将公式包装在表格中。第一个可以通过使用cutoff.widthdeparse 的参数来实现,第二个可以通过使用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")

结果不是很漂亮,但你的公式也不是很漂亮。在这种特殊情况下,我会使用(sex + attend + birth + politics)^3- 理解要点并且要短得多。

于 2010-02-19T14:54:01.323 回答
1

我认为您想获得 LaTeX 表格,但您可以轻松获得带有模型公式的 HTML 表格。

# 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

你可以这样做:

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

它不像 LaTeX 表格那么漂亮,但它有模型公式......

于 2010-02-19T16:50:56.147 回答