関数anova()が返す結果ー関数lm()の結果に適用したとき

2008.4.30より 2008.7.18最終修正

 lm()が返す結果のページと同じ例を使います。関数lm()の結果のオブジェクトに関数anova()を適用し分散分析表を出させます(関数anova.lm()を適用したということになります)。

> anova(res1)

Analysis of Variance Table

Response: y1
Df Sum Sq Mean Sq F value Pr(>F)
x1 1 3.3820 3.3820 4.444 0.06124 .
Residuals 10 7.6103 0.7610
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

最初の行()は、分散分析表であること
2行目は、目的変数がy1であること
3行目から5行目が、分散分析表で、
 3行目は各項目は何か
 4行目が説明変数x1により説明される部分
 5行目は残差
です。

区切りの線があって、その次の、最後の行は、有意確率の大きさを視覚的に示す記号の説明です。0と0.001の間は***で、0.1と1の間は何もなしと読みます。
この記号自体は説明変数の行の有意確率の値の後につきます(この例でもよく見ると、3行目の最後に、0.05と0.1の間であることを示す.があります)。有意確率の値そのものも表示されるので、とくに必要というわけではありませんが。

分散分析表の各項目は、Df が自由度、Sum Sqが平方和、 Mean Sqが平均平方、 F valueがF統計量の値、 Pr(>F)はF検定の有意確率です。

たとえば、この例では残差の自由度は10で、残差の平均平方は0.7610です。

項目の文字列なども取り出すことができます(あまり意味はないかもしれませんが)

> names(anova(res1))

[1] "Df" "Sum Sq" "Mean Sq" "F value" "Pr(>F)"

> names(anova(res1))[1]

[1] "Df"

また、先頭にあるとAnalysis of Variance Tableから始まる文字列を取り出したければ

> attr(anova(res1),"heading")

[1] "Analysis of Variance Table\n" "Response: y1"

なぜ、こうなるのかは後で見ていきます。


> class(anova(res1)

[1] "anova" "data.frame"

クラスanovaのオブジェクトであるとともに、データフレームでもあることがわかります。

関数str()でオブジェクトの中味を見ると

> str(anova(res1))

Classes ‘anova’ and 'data.frame': 2 obs. of 5 variables:
$ Df : int 1 10
$ Sum Sq : num 3.38 7.61
$ Mean Sq: num 3.382 0.761
$ F value: num 4.44 NA
$ Pr(>F) : num 0.0612 NA
- attr(*, "heading")= chr "Analysis of Variance Table\n" "Response: y1"

となります。5つの項目について、2つの”変数”についての要素がある、2×5のデータフレームであることがわかります。個々の要素は、名前付きのデータフレームから、要素を取り出す方法で得られます。

 Analysis of Variance Tableで始まる文字列は以下のように取り出せることも、最後の行からわかります、

> attr(anova(res1),"heading")

[1] "Analysis of Variance Table\n" "Response: y1"

str()の結果からは、x1やresudualsといった文字列をどう取り出すのかは直ちにはわからないが、res1はデータフレームでもあるから、

> rownames(anova(res1))

[1] "x1" "Residuals"

で取り出せます。