5

私はたくさんの対数線形モデルを持っていますが、私たちの目的のために、それは単に とglm()呼ばれるオブジェクトになりますmx, my, mz。逸脱の分析をきれいにフォーマットxtableしたいので、当然、実行したいと思いますxtable(anova(mx, my, mz, test = "Chisq"))

ただし、のバニラ出力にxtableは、モデルの仕様が含まれていません。私が実行しているすべての ANOVA テストにそれらを含めたいので、これを行うために欠落しているパラメーターがない場合は、おそらく独自のソリューションをハックする必要があります。しかし、ヘルプページを見てみると、モデルの仕様を含める簡単な方法はないようです。

何かご意見は?代替案?

それが役立つ場合、これは xtable 1.5-5 を使用して 2.9.1 で行われました。

4

2 に答える 2

4

aが anova テーブル オブジェクトである場合、探しattr(a,"heading")ている情報が含まれていますが、それを抽出する良い方法がわかりませんでした。そこで、 のコードを調べたところ、 のコードanova.glmanova.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)

長い数式に対応するための編集: 長い数式
がある場合は、2 つの変更が必要です。まず、数式が複数のdeparse行に分かれていないことを確認する必要があります。次に、表内の数式をラップするためにラテックスを作成する必要があります。cutoff.width1 つ目は deparseの引数を使用して実現でき、2 つ目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 に答える