第四回(10月22日) Task Check and Weekly Assignment

統計的仮説検定

To Do □ 統計的仮説検定の手続きについて理解する。 □ χ二乗検定をやってみる。 □ t検定をやってみる □ t検定の検定力をチェックしておく □ 分散分析をやってみる(aov関数) □ 分散分析をやってみる(anovakun関数)

Assignment □算数のテストを四段階評価(優,良,可,不可)にわけたときクラス別の評価に有意な差があるといってよいか検定し,答えなさい。 □ 国語の点数に男女差があるといってよいか,検定し答えなさい。 □ 算数の点数にクラス差があるといってよいか,検定し答えなさい。 □ 理科の点数に性差とクラス差があるといってよいか,検定し答えなさい。

以下のような分割表があったとする

data <- matrix(c(20, 30, 10, 40, 30, 20), byrow = T, nrow = 3)
data
##      [,1] [,2]
## [1,]   20   30
## [2,]   10   40
## [3,]   30   20

χ二乗検定をするにはchisq.test関数

chisq.test(data)
## 
##  Pearson's Chi-squared test
## 
## data:  data
## X-squared = 16.67, df = 2, p-value = 0.0002404

ファイルから読み込む場合。いつもの下処理をしてから。

sample <- read.csv("sample_win_.csv", na.strings = "*")
sample$sex <- factor(sample$sex, labels = c("male", "female"))

国語の点数を,優良可不可に区分してみる。

sample$kokugo.class <- ifelse(sample$kokugo > 80, 1, ifelse(sample$kokugo > 
    70, 2, ifelse(sample$kokugo > 60, 3, 4)))
sample$kokugo.class <- factor(sample$kokugo.class, labels = c("A", "B", "C", 
    "D"))

集計と検定,一通り。

tabs <- xtabs(~kokugo.class + sex, data = sample)
chisq.test(tabs)
## 
##  Pearson's Chi-squared test
## 
## data:  tabs
## X-squared = 2.345, df = 3, p-value = 0.5041
res.chisq <- chisq.test(tabs)

残差の分析。1.96が目安。

res.chisq$stdres
##             sex
## kokugo.class    male  female
##            A -0.5786  0.5786
##            B  1.5043 -1.5043
##            C -0.3968  0.3968
##            D -0.5361  0.5361

t-testの例。まずはデータを二分割(別にしなくても良いけど,わかりやすくするため)。

height.male <- subset(sample$height, sample$sex == "male")
height.female <- subset(sample$height, sample$sex == "female")

正規性の検定。コルモゴロフスミルノフ検定。

# ks.test
ks.test(height.male, mean(height.male), sd(height.male))
## 
##  Two-sample Kolmogorov-Smirnov test
## 
## data:  height.male and mean(height.male)
## D = 0.56, p-value = 0.902
## alternative hypothesis: two-sided
ks.test(height.female, mean(height.female), sd(height.female))
## 
##  Two-sample Kolmogorov-Smirnov test
## 
## data:  height.female and mean(height.female)
## D = 0.52, p-value = 0.9804
## alternative hypothesis: two-sided
# each data set over 0.05 -> H0:this data seems to be normal curve
var.test(height.male, height.female)
## 
##  F test to compare two variances
## 
## data:  height.male and height.female
## F = 2.361, num df = 49, denom df = 49, p-value = 0.003206
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
##  1.34 4.16
## sample estimates:
## ratio of variances 
##              2.361

問題なければt検定に進める。

result.ttest <- t.test(height ~ sex, data = sample, var.equal = F)
result.ttest
## 
##  Welch Two Sample t-test
## 
## data:  height by sex
## t = 10.58, df = 84.2, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  10.69 15.63
## sample estimates:
##   mean in group male mean in group female 
##                158.0                144.8

検定力分析。pwr関数を使う。 ちなみにt検定において検定力が大きいってどれぐらいの数字?

library(pwr)
cohen.ES(test = "t", size = "large")
## 
##      Conventional effect size from Cohen (1982) 
## 
##            test = t
##            size = large
##     effect.size = 0.8

なるほど,では今回はどうだったか。 効果量esを計算してから関数に代入する。

es <- result.ttest$statistic * sqrt((50 + 50)/(50 * 50))
power.t.test(n = 50, d = es)
## 
##      Two-sample t test power calculation 
## 
##               n = 50
##           delta = 2.116
##              sd = 1
##       sig.level = 0.05
##           power = 1
##     alternative = two.sided
## 
## NOTE: n is number in *each* group

次に分散分析。aov関数。

result.aov <- aov(height ~ class, data = sample)
summary(result.aov)
##             Df Sum Sq Mean Sq F value Pr(>F)
## class        2    116    58.2    0.71    0.5
## Residuals   97   8000    82.5

複数の要因が入っている場合は独立変数を*で追加

result.aov2 <- aov(height ~ class * sex, data = sample)
summary(result.aov2)
##             Df Sum Sq Mean Sq F value Pr(>F)    
## class        2    116      58    1.51   0.23    
## sex          1   4354    4354  112.75 <2e-16 ***
## class:sex    2     15       8    0.20   0.82    
## Residuals   94   3630      39                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

anovakunというと便利な関数でやってみよう。 まずはanovakunソースを読み込む

source("anovakun_433.txt")

画面上は何の変化もないが,workspaceのfuunctionsになにか追加されているはず。 実行にあたっては,まず分析専用のファイルを作るところから始める。 たとえば,性別とクラスを独立変数,国語の点数を従属変数とした分析をする。

sampleK <- subset(sample, select = c("sex", "class", "kokugo"))
anovakun(sampleK, "ABs", 2, 3, peta = TRUE)
## 
## [ ABs-Type Design ] 
##  
## This output was generated via anovakun 4.3.3 at R version 3.0.2. 
## It was executed on Tue Oct 22 11:48:26 2013. 
##  
##  
## << DESCRIPTIVE STATISTICS >>
## 
## ----------------------------------------------------
##    A    B       N         Mean        S.D.   
## ----------------------------------------------------
##   a1   b2      17      68.5294      9.4281   
##   a1   b1      17      64.2941     14.5635   
##   a1   b3      15      62.5333     11.8072   
##   a2   b2      16      66.8750     13.0735   
##   a2   b1      17      63.9412     14.0822   
##   a2   b3      17      60.6471     14.5771   
## ----------------------------------------------------
## 
## 
## << ANOVA TABLE >>
## 
## == This data is UNBALANCED!! ==
## == Type III SS is applied. ==
## == The number of removed case is 1. ==
## 
## --------------------------------------------------------------------------------------------------------------
##  Source            SS    df          MS    F-ratio     p-value             p.eta^2   
## --------------------------------------------------------------------------------------------------------------
##       A       41.5966     1     41.5966     0.2432      0.6230   ns         0.0026   
##       B      612.9299     2    306.4650     1.7921      0.1723   ns         0.0371   
##     AxB       11.3897     2      5.6948     0.0333      0.9673   ns         0.0007   
##   Error    15904.0716    93    171.0115                  
## --------------------------------------------------------------------------------------------------------------
##   Total    16586.7273    98  
##                                                                    +p < .10, *p < .05, **p < .01, ***p < .001    
## 
##  
## output is over --------------------///

今回の例では下位検定まで行われないが,効果があれば自動的に算出してくれます。 最後に分散分析の検定力分析。例によって,どの程度の数字があれば普通の検定力があったのかを調べてから。 効果量f2はpetaから算出する。

cohen.ES(test = "f2", size = "medium")
## 
##      Conventional effect size from Cohen (1982) 
## 
##            test = f2
##            size = medium
##     effect.size = 0.15
pwr.f2.test(u = 1, v = 93, f2 = 0.0026/(1 - 0.0026))
## 
##      Multiple regression power calculation 
## 
##               u = 1
##               v = 93
##              f2 = 0.002607
##       sig.level = 0.05
##           power = 0.07822