統計とR言語の勉強をしています。
「Rによるやさしい統計学」の写経で勉強。
#実行環境
- Windows10 Pro 64bit
- R:3.4.3
- RStudio:1.1.383
RStudioのConsoleを使って実行しています
#一元配置分散分析(対応あり)
3つ以上の平均値を比較するための統計的手法で分散分析があります。その対応ありバージョンです。例題から実施していきます。
項目 | 内容 |
---|---|
前提 | 5人の学生が線形代数、微分積分、確率統計に関する好感度のアンケートを取得。3つの好感度について有意な差があるといえるか |
帰無仮説 | 3科目の好感度の母平均は等しい |
対立仮説 | 3科目の好感度の母平均は等しくない ※3群のうち1つでも母平均が異なる場合も対立仮説が支持 |
検定統計量 | $\frac{\frac{条件平方和}{条件自由度}}{\frac{残差平方和}{残差自由度}}$ |
有意水準 | 5% |
対応なしとして検定をするとこんな感じです。p値が0.112で棄却域にないため、帰無仮説が支持されます。
> koukando <- c(7,8,9,5,6,5,4,7,1,3,8,6,7,2,5)
> kamoku <- factor(c(rep("線形代数",5),rep("微分積分",5),rep("確率統計",5)))
> summary(aov(koukando~kamoku))
Df Sum Sq Mean Sq F value Pr(>F)
kamoku 2 22.53 11.267 2.641 0.112
Residuals 12 51.20 4.267
今回は5人の学生個人を認識して対応させるので、人の変数を作って検定をしていきます。科目のp値が0.002095で棄却域にあるため、帰無仮説を棄却します(3科目の好感度の母平均は等しくない)。
> hito <- factor(rep(c("田中","岸","大引","吉川","荻野"),3))
> summary(aov(koukando~kamoku+hito))
Df Sum Sq Mean Sq F value Pr(>F)
kamoku 2 22.53 11.267 14.7 0.002095 **
hito 4 45.07 11.267 14.7 0.000931 ***
Residuals 8 6.13 0.767
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#全データ
> all_data <- matrix(c(7,8,9,5,6,5,4,7,1,3,8,6,7,2,5),nrow=5,ncol=3)
> all_data
[,1] [,2] [,3]
[1,] 7 5 8
[2,] 8 4 6
[3,] 9 7 7
[4,] 5 1 2
[5,] 6 3 5
#科目平均
> kamoku_average <- colMeans(all_data)
> kamoku_average
[1] 7.0 4.0 5.6
#人平均
> hito_average <- rowMeans(all_data)
> hito_average
[1] 6.666667 6.000000 7.666667 2.666667 4.666667
#全平均
> all_average <- mean(all_data)
> all_average
[1] 5.533333
#全平均行列
> all_average_matrix <- matrix(rep(all_average,15),nrow=5,ncol=3)
> all_average_matrix
[,1] [,2] [,3]
[1,] 5.533333 5.533333 5.533333
[2,] 5.533333 5.533333 5.533333
[3,] 5.533333 5.533333 5.533333
[4,] 5.533333 5.533333 5.533333
[5,] 5.533333 5.533333 5.533333
#科目平均行列
> kamoku_average_matrix <- matrix(rep(kamoku_average,5),nrow=5,ncol=3,byrow=TRUE)
> kamoku_average_matrix
[,1] [,2] [,3]
[1,] 7 4 5.6
[2,] 7 4 5.6
[3,] 7 4 5.6
[4,] 7 4 5.6
[5,] 7 4 5.6
#人平均行列
> hito_average_matrix <- matrix(rep(hito_average,3),nrow=5,ncol=3)
> hito_average_matrix
[,1] [,2] [,3]
[1,] 6.666667 6.666667 6.666667
[2,] 6.000000 6.000000 6.000000
[3,] 7.666667 7.666667 7.666667
[4,] 2.666667 2.666667 2.666667
[5,] 4.666667 4.666667 4.666667
#全体
> zentai <- all_data - all_average_matrix
> zentai
[,1] [,2] [,3]
[1,] 1.4666667 -0.5333333 2.4666667
[2,] 2.4666667 -1.5333333 0.4666667
[3,] 3.4666667 1.4666667 1.4666667
[4,] -0.5333333 -4.5333333 -3.5333333
[5,] 0.4666667 -2.5333333 -0.5333333
#条件
> jouken <- kamoku_average_matrix - all_average_matrix
> jouken
[,1] [,2] [,3]
[1,] 1.466667 -1.533333 0.06666667
[2,] 1.466667 -1.533333 0.06666667
[3,] 1.466667 -1.533333 0.06666667
[4,] 1.466667 -1.533333 0.06666667
[5,] 1.466667 -1.533333 0.06666667
#個人差
> kojinsa <- hito_average_matrix - all_average_matrix
> kojinsa
[,1] [,2] [,3]
[1,] 1.1333333 1.1333333 1.1333333
[2,] 0.4666667 0.4666667 0.4666667
[3,] 2.1333333 2.1333333 2.1333333
[4,] -2.8666667 -2.8666667 -2.8666667
[5,] -0.8666667 -0.8666667 -0.8666667
#残差
> zansa <- all_data - all_average_matrix - jouken - kojinsa
> zansa
[,1] [,2] [,3]
[1,] -1.1333333 -0.1333333 1.26666667
[2,] 0.5333333 -0.4666667 -0.06666667
[3,] -0.1333333 0.8666667 -0.73333333
[4,] 0.8666667 -0.1333333 -0.73333333
[5,] -0.1333333 -0.1333333 0.26666667
#全体平方和
> zentai_heihouwa <- sum(zentai^2)
> zentai_heihouwa
[1] 73.73333
#条件平方和
> jouken_heihouwa <- sum(jouken^2)
> jouken_heihouwa
[1] 22.53333
#個人差平方和
> kojin_heihouwa <- sum(kojinsa^2)
> kojin_heihouwa
[1] 45.06667
#残差平方和
> zansa_heihouwa <- sum(zansa^2)
> zansa_heihouwa
[1] 6.133333
#条件平方和 + 個人差平方和 + 残差平方和 = 全体平方和
> jouken_heihouwa + kojin_heihouwa + zansa_heihouwa
[1] 73.73333