Weitere ähnliche Inhalte
Mehr von Takashi J OZAKI (17)
Rによるやさしい統計学第20章「検定力分析によるサンプルサイズの決定」
- 20. モンテカルロ法の要領でやってみる
検定力とは
対立仮説が正しい時に有意な結果が得られる確率
でも、あるサンプルサイズのデータの検定力を知るにはどうしたら
良い?
1回こっきり検定しても何も分からない
そこで、シミュレーションしてみよう
意図的に、対立仮説が当てはまり、なおかつサンプルサイズの決
まった母集団を2つ用意する
そこから標本をn回無作為に抽出して、毎回t検定する
そのうち何回有意(ここではp < 0.05)だったかを見れば、検
定力の近似値が求まる!
2014/2/20
20
- 21. とりあえずベタっとやってみる
> tval<-numeric(length=10000)
# t値を格納する変数
> count_sig<-0
# 有意な結果を返す検定の総回数
> for (i in 1:10000) { # 10000回のモンテカルロシミュレーション
+ # 母集団を以下の通りサンプルサイズn = 10で2つ定める
+ group1<-rnorm(n=10,mean=0,sd=1) # 平均0、標準偏差1
+ group2<-rnorm(n=10,mean=0.5,sd=1) # 平均0.5、標準偏差1
+ res<-t.test(group1,group2,var.equal=T) # 結果を一時格納
+ tval[i]<-res[[1]] # t値そのものを格納する
+ count_sig<-count_sig+ifelse(res[[3]]<0.05,1,0) # 有意ならカウント
+}
> count_sig/10000 # 最終的に有意だった割合=検定力は?
[1] 0.1849 # サンプルサイズ10の時の検定力は0.185ぐらい
2014/2/20
21
- 25. 一旦こいつから棄却域を出してみる
> qt(0.025,df=18) # 下側5%棄却域
[1] -2.100922
> qt(0.025,df=18,lower.tail=F) # 上側5%棄却域
[1] 2.100922
> length(tval[abs(tval)>qt(0.025,df=18,lower.tail=F)]) # 棄却域の値を出す
[1] 1849
> count_sig
[1] 1849 # 上の値と一致してますね!
2014/2/20
25
- 40. Effect sizeは検定力と併せて検討すべし
一般に、サンプルサイズを大きくしようとすればするほどコストがかかる
Effect sizeが大きければサンプルサイズが小さくても有意になりやすいが、
その逆もまた然り
母集団にある程度のeffect sizeがあると仮定するなら、「確率0.8程度
の確かさ(=検定力)で有意な結果が得られたらハッピー」と期待して
サンプルサイズを小さめに決めるという手もある
実際のeffect sizeが小さかったらその分有意になりづらいのでOK
例えば、effect sizeが小さいうちは有意にならなくてもよくて、effect
sizeが大きければ有意になるようにしたければ、そのようにサンプルサイズ
を小さめに決めれば良い
テキストの「新しく開発されたダイエット食品」の例
要は「何と何のトレードオフなら取れるか」でしかない
2014/2/20
40
- 41. Cohen’s dなど「Cohenのeffect size」とは?
Jacob Cohenが“Statistical Power Analysis for the Behavioral
Sciences” (1988)で提唱したeffect sizeの小・中・大の基準
関数名
Cohen’s
小
中
大
pwr.2p.test
h
0.2
0.5
0.8
pwr.2p2n.test
h
0.2
0.5
0.8
pwr.anova.test
f
0.1
0.25
0.4
pwr.chisq.test
w
0.1
0.3
0.5
pwr.f2.test
f2
0.02
0.15
0.35
pwr.norm.test
d
0.2
0.5
0.8
pwr.p.test
h
0.2
0.5
0.8
pwr.r.test
r
0.1
0.3
0.5
pwr.t.test
d
0.2
0.5
0.8
pwr.t2n.test
d
0.2
0.5
0.8
2014/2/20
41
- 48. Stack Overflowに出ていたやり方(2群のt検定)
> set.seed(45) # 単に再現性を出すため
> x <- rnorm(10, 10, 1)
> y <- rnorm(10, 5, 5)
>
> cohens_d <- function(x, y) {
+ lx <- length(x)- 1
+ ly <- length(y)- 1
+ md <- abs(mean(x) - mean(y)) # 平均値の差
+ csd <- lx * var(x) + ly * var(y)
+ csd <- csd/(lx + ly)
+ csd <- sqrt(csd) # Common error varianceはこれで出せる
+
+ cd <- md/csd # これでCohen’s dが求まる
+}
> res <- cohens_d(x, y)
> res
[1] 0.5199662 # 0.5はCohen’s dとしては結構デカい方
2014/2/20
48