最終更新日 : 2007.8.15
2つ以上の説明変数を使う
p54 「BOX 4.1 身長は数学的能力を説明できるか」
> dat <- excel.w(3) Read 96 items > AMA <- c(dat[,1]) > YEARS <- c(dat[,2]) > HGT <- c(dat[,3]) > box4.1 <- glm(AMA ~ HGT) > summary(aov(box4.1)) Df Sum Sq Mean Sq F value Pr(>F) HGT 1 412.77 412.77 726.87 < 2.2e-16 *** Residuals 30 17.04 0.57 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
p54 「BOX 4.2 身長の代わりに年齢で数学的能力を説明する」
> box4.2 <- glm(AMA ~ YEARS + HGT) > summary(aov(box4.2)) Df Sum Sq Mean Sq F value Pr(>F) YEARS 1 422.60 422.60 1702.4271 <2e-16 *** HGT 1 0.01 0.01 0.0317 0.8599 Residuals 29 7.20 0.25 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
p56 「BOX 4.3(a) 散水頻度のみでは最終樹高に違いは見られない」
> dat <- excel.w(3) Read 120 items > WATER <- as.factor(dat[,1]) > FINALHT <- c(dat[,2]) > INITHT <- c(dat[,3]) > box4.3a <- glm(FINALHT ~ WATER) > summary(aov(box4.3a)) Df Sum Sq Mean Sq F value Pr(>F) WATER 3 12.895 4.298 1.9721 0.1356 Residuals 36 78.461 2.179
p56 「BOX 4.3(b) 初期樹高を考慮に入れると散水頻度は最終樹高への有意な影響をもつ」
> box4.3b <- glm(FINALHT ~ WATER + INITHT) > summary(aov(box4.3b)) Df Sum Sq Mean Sq F value Pr(>F) WATER 3 12.895 4.298 793.55 < 2.2e-16 *** INITHT 1 78.272 78.272 14450.93 < 2.2e-16 *** Residuals 35 0.190 0.005 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
【補足】 p55の図4.1をRで描いてみる
> plot(dat[,1], dat[,2], xaxt="n", ylim=c(0,10), pch=18, + xlab="散水処理", ylab="最終樹高", main="4水準の散水処理における苗木の最終樹高") > x <- 1:4 > M <- apply(matrix(FINALHT, ncol=4, nrow=10), 2, mean) > points(x, M, pch=8, col="red") > axis(1, at=1:4)
p59 「BOX 4.4(a) 右足の長さで体重を予測する」
> dat <- excel.w(3) Read 300 items > LLEG <- c(dat[,1]) > RLEG <- c(dat[,2]) > WGHT <- c(dat[,3]) > box4.4a <- glm(WGHT ~ RLEG) > summary(aov(box4.4a)) Df Sum Sq Mean Sq F value Pr(>F) RLEG 1 3627.7 3627.7 125.75 < 2.2e-16 *** Residuals 98 2827.1 28.8 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
p59 「RLEGとLLEGのどちらも体重を有意に予測できない」
> box4.4b <- glm(WGHT ~ RLEG + LLEG) > summary(aov(box4.4b)) Df Sum Sq Mean Sq F value Pr(>F) RLEG 1 3627.7 3627.7 127.4416 <2e-16 *** LLEG 1 66.0 66.0 2.3173 0.1312 Residuals 97 2761.1 28.5 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
今までの内容でもこれらの2つの値は出てきていたのだが、この章で詳しく解説されているので、ここでタイプTの平方和とタイプVの平方和についての補足をしておこう。Rのanova()はタイプTの平方和を返すが、タイプUおよびタイプVの平方和を出す場合は新たにcarパッケージをダウンロードしてインストールする必要がある。
#CRANからcarパッケージをダウンロード・インストール > install.packages("car") #carパッケージの呼び出し > library(car) #carパッケージに含まれるAnova()で解析 > Anova(box4.4b, test="F") #引数type=""を省略した場合はタイプUの平方和 Anova Table (Type II tests) Response: WGHT SS Df F Pr(>F) RLEG 83.33 1 2.9275 0.09028 . LLEG 65.96 1 2.3173 0.13120 Residuals 2761.14 97 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 #タイプVの平方和を出すためには引数をtype="III"と指定する > Anova(box4.4b, test="F", type="III") Anova Table (Type III tests) Response: WGHT SS Df F Pr(>F) RLEG 83.33 1 2.9275 0.09028 . LLEG 65.96 1 2.3173 0.13120 Residuals 2761.14 97 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
通常はTypeTの平方和を用いれば問題ないが、どういうときにTypeUの平方和やTypeVの平方和を用いればよいのか?これについてはhttp://phi.med.gunma-u.ac.jp/swtips/Rnewsarchives.htmlのページ(下の方)にある「Type IIとType IIIの平方和について」の部分を読んでください。