Rによる二元配置要因分散分析
大学生の自習時間に関する学部別学年別調査データ(架空データ)を用いる。
ある大学で学生の一日あたりの平均自習時間を調査した。学生を学部ごと、学年ごとに無作為で4人抽出し、1ヶ月の平均時間を調査した。ただし回答漏れが存在している。
このデータから学部・学年の違いが自習時間に影響するかどうかついて分析せよ。
回答漏れがあることから、このデータは「非釣り合い型」となる。それに留意して分析を進める。
二元配置要因分散分析
スクリプト
data <- read.csv("http://kyoto-edu.sakura.ne.jp/weblesson/statistics/data/self-study2.csv",na.strings=99999, fileEncoding = "utf-8") fm1 <- time~grade*faculty #学年*学部 fm2 <- time~faculty*grade #学部*学年 #二元配置分散分析 source("http://kyoto-edu.sakura.ne.jp/weblesson/statistics/socialStatisticsBasic.R", encoding="UTF-8") output.twoway.anova <- twoway.factorial.anova(fm1,data,interaction=T) #結果出力 output.twoway.anova
twoway.factorial.anova関数(socialStatisticsBasic.Rで読み込まれる自作関数)
- twoway.factorial.anova(formula,data,type,interaction) 二元配置要因分散分析を行う。
-
- formula=「従属変数(検定変数)~因子1*因子2」
- data=モデル中の変数を含むデータフレーム(formulaが実体を持つ時は省略可)
- type=平方和のタイプ(1または2 初期値は2)
- interaction=グラフを出力するか(TRUE/FALSE 初期値はFALSE)
「非釣り合い型」データなので平方和計算をType2で分析を行う。
結果
$factor1 N df mean u2 Missing Value 1st 18 17 116.5556 102.2614 2 2nd 19 18 115.4211 250.7018 1 3rd 19 18 110.7895 223.7310 0 4th 20 19 102.1000 297.5684 0 Sum 76 72 111.0263 245.9193 4 $factor2 N df mean u2 Missing Value economy 14 13 106.6429 287.4780 1 law 15 14 104.4667 279.8381 1 literature 16 15 112.3750 160.6500 0 science 16 15 119.7500 138.7333 0 sociology 15 14 110.9333 295.4952 0 Sum 76 72 111.0263 245.9193 4 $mix.mean economy law literature science sociology 1st 121.6667 116.50 113.75 112.25 121.00 2nd 104.3333 104.25 118.75 124.50 122.50 3rd 113.7500 110.00 111.00 112.75 106.25 4th 90.0000 88.50 106.00 129.50 96.50 $anova Sum Sq df Mean Sq F P grade 2439.712 3 813.2373 4.745573 0.00510066 faculty 2089.115 4 522.2787 3.047710 0.02418242 mix 4246.336 12 353.8613 2.064926 0.03473388 Residual 9596.583 56 171.3676 NA NA
![](/weblesson/statistics/image/R/anova005.png)
学年・学部・交互作用、すべて有意である。
事後検定
学年についての多重比較検定
#学年要因が有意なので学年について多重比較検定を行う。 multiple.comparison.test(fm1,data,anova=output.twoway.anova)
結果
$Tukey mean diff SE t df p 1st vs. 2nd 2.166667 4.341708 0.4990355 56 0.958955806 1st vs. 3rd 6.283333 4.341708 1.4472030 56 0.475891596 1st vs. 4th 14.933333 4.275419 3.4928352 56 0.005065363 2nd vs. 3rd 4.116667 4.275419 0.9628686 56 0.770928990 2nd vs. 4th 12.766667 4.208085 3.0338422 56 0.018632358 3rd vs. 4th 8.650000 4.208085 2.0555667 56 0.180462377
1回生と4回生、2回生と4回生の間に差がある。
学部についての多重比較検定
#学部要因が有意なので学部について多重比較検定を行う。 multiple.comparison.test(fm2,data,anova=output.twoway.anova)
結果
$Tukey mean diff SE t df p economy vs. law 2.6250 4.909029 0.5347290 56 0.98333782 economy vs. literature -4.9375 4.817263 1.0249596 56 0.84277929 economy vs. science -12.3125 4.817263 2.5559119 56 0.09290377 economy vs. sociology -4.1250 4.909029 0.8402884 56 0.91682255 law vs. literature -7.5625 4.723715 1.6009645 56 0.50307599 law vs. science -14.9375 4.723715 3.1622356 56 0.02048691 law vs. sociology -6.7500 4.817263 1.4012106 56 0.62946323 literature vs. science -7.3750 4.628277 1.5934657 56 0.50776624 literature vs. sociology 0.8125 4.723715 0.1720044 56 0.99979762 science vs. sociology 8.1875 4.723715 1.7332756 56 0.42244487
法学部と理工学部の間に差がある。
単純主効果検定
#交互作用が有意なので単純主効果検定を行う。 simple.main.effects(fm1,data,anova=output.twoway.anova)
結果
$grade Sum Sq df Mean Sq F P economy 2003.131 3 667.7103 3.8963636 0.01341000 law 1690.983 3 563.6611 3.2891938 0.02713921 literature 340.250 3 113.4167 0.6618328 0.57900126 science 891.500 3 297.1667 1.7340894 0.17045596 sociology 1760.183 3 586.7278 3.4237972 0.02319165 Residual 9596.583 56 171.3676 NA NA $faculty Sum Sq df Mean Sq F P 1st 243.2778 4 60.81944 0.3549064 0.8395426985 2nd 1442.4649 4 360.61623 2.1043436 0.0923525241 3rd 134.9079 4 33.72697 0.1968107 0.9390393714 4th 4514.8000 4 1128.70000 6.5864275 0.0002039407 Residual 9596.5833 56 171.36756 NA NA
- 経済学部、法学部、社会学部において学年間に差がある。
- 4回生において学部間に差がある。
経済学部、法学部、社会学部での学年についての多重比較検定
#経済学部において学年要因が有意なので学年について多重比較検定を行う。 multiple.comparison.test(fm1,data,fact="economy",anova=output.twoway.anova) #法学部において学年要因が有意なので学年について多重比較検定を行う。 multiple.comparison.test(fm1,data,fact="law",anova=output.twoway.anova) #社会学部において学年要因が有意なので学年について多重比較検定を行う。 multiple.comparison.test(fm1,data,fact="sociology",anova=output.twoway.anova)
結果
経済学部
$Tukey mean diff SE t df p 1st vs. 2nd 17.333333 10.688547 1.6216735 56 0.37498039 1st vs. 3rd 7.916667 9.998220 0.7918076 56 0.85786669 1st vs. 4th 31.666667 9.998220 3.1672303 56 0.01293284 2nd vs. 3rd -9.416667 9.998220 0.9418343 56 0.78250133 2nd vs. 4th 14.333333 9.998220 1.4335885 56 0.48414173 3rd vs. 4th 23.750000 9.256553 2.5657498 56 0.06080695
法学部
$Tukey mean diff SE t df p 1st vs. 2nd 12.25 9.256553 1.3233867 56 0.5521753 1st vs. 3rd 6.50 9.998220 0.6501157 56 0.9150742 1st vs. 4th 28.00 9.256553 3.0248840 56 0.0190869 2nd vs. 3rd -5.75 9.998220 0.5751023 56 0.9391192 2nd vs. 4th 15.75 9.256553 1.7014972 56 0.3325762 3rd vs. 4th 21.50 9.998220 2.1503827 56 0.1500494
社会学部
$Tukey mean diff SE t df p 1st vs. 2nd -1.50 9.998220 0.1500267 56 0.99878185 1st vs. 3rd 14.75 9.998220 1.4752625 56 0.45903075 1st vs. 4th 24.50 9.998220 2.4504361 56 0.07930128 2nd vs. 3rd 16.25 9.256553 1.7555130 56 0.30546832 2nd vs. 4th 26.00 9.256553 2.8088208 56 0.03356738 3rd vs. 4th 9.75 9.256553 1.0533078 56 0.71896990
経済学部、法学部においては1回生と4回生の間に、社会学部においては2回生と4回生の間に差がある。
4回生での学部についての多重比較検定
#4回生において学部要因が有意なので学部について多重比較検定を行う。 multiple.comparison.test(fm2,data,fact="4th",anova=output.twoway.anova)
結果
$summary N df mean u2 Missing Value economy 4 3 90.0 99.33333 0 law 4 3 88.5 73.66667 0 literature 4 3 106.0 68.66667 0 science 4 3 129.5 92.33333 0 sociology 4 3 96.5 45.66667 0 Sum 20 15 102.1 297.56842 1 $Tukey mean diff SE t df p economy vs. law 1.5 9.256553 0.1620474 56 0.9998403025 economy vs. literature -16.0 9.256553 1.7285051 56 0.4252656470 economy vs. science -39.5 9.256553 4.2672471 56 0.0007112350 economy vs. sociology -6.5 9.256553 0.7022052 56 0.9551507818 law vs. literature -17.5 9.256553 1.8905525 56 0.3342894065 law vs. science -41.0 9.256553 4.4292944 56 0.0004139425 law vs. sociology -8.0 9.256553 0.8642526 56 0.9086736615 literature vs. science -23.5 9.256553 2.5387419 56 0.0965432822 literature vs. sociology 9.5 9.256553 1.0262999 56 0.8421510449 science vs. sociology 33.0 9.256553 3.5650418 56 0.0064988732
理工学部と文学部以外の他学部とに差がある。
事後検定で用いている関数
simple.main.effects関数(socialStatisticsBasic.Rで読み込まれる自作関数)
- simple.main.effects(formula,data,anova)
-
単純主効果検定を行う。
- formula=「従属変数(検定変数)~因子1*因子2」
- data=モデル中の変数を含むデータフレーム(formulaが実体を持つ時は省略可)
- anova=twoway.factorial.anova関数の戻り値の出力結果オブジェクト
multiple.comparison.test関数(socialStatisticsBasic.Rで読み込まれる自作関数)
- multiple.comparison.test(formula,data,anova,method,fact,summary)
-
多重比較検定を行う。
- formula=「従属変数(検定変数)~因子1*因子2」
- data=モデル中の変数を含むデータフレーム(formulaが実体を持つ時は省略可)
- anova=twoway.factorial.anova関数の戻り値の出力結果オブジェクト(二元配置分散分析のときは指定した方が検出力が上がる)
- method=事後比較の方法("Tukey","Games-Howell","bonferroni","holm","BH")。初期値はTukey
- fact=因子2の特定の値(指定するとその値を取るデータだけ抽出して検定を行う。単純主効果検定後の多重検定に用いる)
- summary=概要を出力するか(TRUE/FALSE 初期値はTRUE)
考察例
学年、学部の違いにより自習時間に差があるかどうかを二元配置要因分散分析(平方和Type2)を用いて検証を行った。
学年、学部双方の主効果において1%水準で有意性が見られた(学年 F(3,56)=4.75, p<.01、学部 F(4,56)=3.05, p<.01)。
また学年と学部の交互作用においても1%水準で有意であった(F(12,56)=2.06,p<0.01)。
この結果より学年・学部の違いにより自習時間に影響があり、さらに学部と学年の組合せによっても自習時間に影響が出ることが分かる。
事後検定より学部間では法学部と理工学部に自習時間に差があり、1,2回生と4回生でも異なっていることが分かる。
さらに4回生時の理工学部は文学部以外の他学部より自習時間は多く、また経済学部・法学部・社会学部は4回生になると1回生(経済法)または2回生(社会)と比較して自習時間が減少していることが分かる。