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"
で取り出せます。