Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Rによるやさしい統計学
第20章「検定力分析によるサンプル
サイズの決定」
株式会社リクルートコミュニケーションズ データサイエンティスト
尾崎 隆 (Takashi J. OZAKI, Ph. D.)

2014/2/20

1
一応、自己紹介を…
 このブログの中の人です

2014/2/20

2
注意点
 肝心の僕が『Rによるやさしい統計学』2月になるまで読んだこと
ありませんでした

 今回の講師も @yokkuns から

「TJOさんサンプルサイズのブログ記事
書いてたってことは詳しいと思うのでお願い
していいですよね?」
と頼まれて、一度断ったものの2回目に頼まれてさすがに断れな
かったのでお引き受けした次第

 よって内容は結構適当ですごめんなさい
2014/2/20

3
今回の課題図書

2014/2/20

4
今回の課題図書

今日話すのは
こちらの方

2014/2/20

こちらはより
深く学びたい
人向け

5
今回のレクチャーの前提

多重比較の問題と
第一種の過誤については
既に皆さん分かっているものとして
話を進めますので
忘れてる方は今のうちに復習を!

2014/2/20

6
「検定力」(検出力)とは何か?

2014/2/20

7
端的に言えば

1.対立仮説が真である時に
2.帰無仮説が棄却される確率
= P([帰無仮説を棄却] | [対立仮説が真])

2014/2/20

8
マトリクスでいうとココ

帰無仮説が
正しい

対立仮説が
正しい

帰無仮説を
採択する

①

②

帰無仮説を
棄却する

③

④

2014/2/20

9
こいつらが困りもの

帰無仮説が
正しい

対立仮説が
正しい

帰無仮説を
採択する

①

②

帰無仮説を
棄却する

③

④

2014/2/20

10
こいつらが困りもの

帰無仮説が
正しい

対立仮説が
正しい

帰無仮説を
採択する

①

第二種の過誤

帰無仮説を
棄却する

第一種の過誤

③

④

②

第一種の過誤も第二種の過誤も、本来正しいはずの仮説に
従わない偏った標本をうっかり掴まされたことで陥る
2014/2/20

11
こいつらが困りもの

帰無仮説が
正しい

対立仮説が
正しい

帰無仮説を
採択する

①

第二種の過誤

帰無仮説を
棄却する

第一種の過誤

③

④

2014/2/20

②

12
これが欲しい

帰無仮説が
正しい

対立仮説が
正しい

帰無仮説を
採択する

①

第二種の過誤

帰無仮説を
棄却する

第一種の過誤

③

④

②

検定力=1 – P(第二種の過誤)
2014/2/20

13
では、検定力とはどうやって決まる?

1.有意水準
2.対立仮説のもとでの母集団に
おける効果の大きさ
(効果量 effect size)
3.サンプルサイズ
2014/2/20

14
では、検定力とはどうやって決まる?

1.有意水準
2.対立仮説のもとでの母集団に
おける効果の大きさ
(効果量 effect size)
3.サンプルサイズ
3つのバランスによって検定力は決まる
2つを固定することで残り1つの最適値を決めることもできる
2014/2/20

15
では、検定力とはどうやって決まる?

1.有意水準
2.対立仮説のもとでの母集団に
おける効果の大きさ 検定力
(効果量 effect size) 分析
3.サンプルサイズ
3つのバランスによって検定力は決まる
2つを固定することで残り1つの最適値を決めることもできる
2014/2/20

16
なぜ検定力分析が必要なのか?

2014/2/20

17
検定力の大小で、検定の結果は変わってしまう

 事後分析

 既に結果の出た検定に対して「検定力が
○○だったから△△だった」というように原因
究明するためのもの

 事前分析

 (特に)「○○ぐらい検定力が欲しいので
サンプルサイズを◇◇ぐらいにしたい」という
ように、これから行う検定を最適化するため
のもの

2014/2/20

18
検定力を求めるシミュレーション

2014/2/20

19
モンテカルロ法の要領でやってみる
 検定力とは
 対立仮説が正しい時に有意な結果が得られる確率

 でも、あるサンプルサイズのデータの検定力を知るにはどうしたら
良い?
 1回こっきり検定しても何も分からない

 そこで、シミュレーションしてみよう
 意図的に、対立仮説が当てはまり、なおかつサンプルサイズの決
まった母集団を2つ用意する
 そこから標本をn回無作為に抽出して、毎回t検定する
 そのうち何回有意(ここではp < 0.05)だったかを見れば、検
定力の近似値が求まる!
2014/2/20

20
とりあえずベタっとやってみる
> 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
そこでt値の分布を見てみる
> hist(tval,breaks=100,freq=F) # ヒストグラムを描く。縦軸はDensityに

t分布っぽく見えるかも?

2014/2/20

22
そこで帰無仮説に従う自由度18のt分布を重ねてみる
> curve(dt(x,df=18),add=T,col=‘blue’,lwd=2) # curve関数とdf関数を使う

あれ、重ならない?

2014/2/20

23
実は…

こいつは非心t分布なのです

2014/2/20

24
一旦こいつから棄却域を出してみる
> 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
ところで、非心t分布のパラメータの求め方
 独立な2群のt検定では、検定統計量の標本分布の非心度δ
は



1   2

1 1


n1 n2

なので、それぞれ代入すると非心度は

0.0  0.5
 0.5


 1.118
1 1
1
1.0

10 10
5
※この辺の詳細は『サンプルサイズの決め方』参照のこと
2014/2/20

26
そこで、非心t分布を重ねてやる(dt関数でいける)
> hist(tval,breaks=100,freq=F)
> curve(dt(x,df=18, ncp=-0.5*sqrt(5)),add=T,col=‘col’,lwd=3)
# 引数ncpが非心度、無理数はできるだけ式の形で表す

2014/2/20

27
詳細について学びたければ改めてこちらを

非心t分布に拠った
サンプルサイズの計算方法が
これでもかというくらい
解説されています。。。
※今回はその話はざっくり
割愛します

2014/2/20

28
Rで検定力分析を行う関数
(標準パッケージ)

2014/2/20

29
そもそもRのfor文はトロいので…

モンテカルロ法なんて
毎回やりたくない(泣)

Rの関数で片付けちゃいましょう
2014/2/20

30
とりあえず{stats}まわりではこの辺

power.t.test

t検定の検定力分析

power.anova.test

ANOVAの検定力分析

power.prop.test

比率の検定の検定力分析

2014/2/20

31
先ほどの例をそのままやってみる(t検定の場合)

> power.t.test(n=10,delta=0.5,sd=1,sig.level=0.05,power=NULL,strict=T)
# n: サンプルサイズ, delta: 平均値の差, sd: 標準偏差
# sig.level: 有意水準, power: 検定力, strict: Trueだと厳密な両側検定
# 知りたい値をNULLにして空けておく
Two-sample t test power calculation
n = 10
delta = 0.5
sd = 1
sig.level = 0.05
power = 0.1850957 # ←モンテカルロ法の結果とほぼ同じ!
alternative = two.sided
NOTE: n is number in *each* group
2014/2/20

32
先ほどの例をそのままやってみる(t検定の場合)

> power.t.test(n=10,delta=0.5,sd=1,sig.level=0.05,power=NULL,strict=F)
# 両側検定の厳密性の指定を外してみた
Two-sample t test power calculation
n = 10
delta = 0.5
sd = 1
sig.level = 0.05
power = 0.1838375 # ←ちょっとずれた。。。
alternative = two.sided
NOTE: n is number in *each* group

2014/2/20

33
でもむしろ知りたいのはサンプルサイズだよね?

どうせならサンプルサイズを
決めたいんだけど…

検定力を決め打ちにすればおk
2014/2/20

34
先ほどの例で検定力を0.8にしてみる(t検定の場合)

> power.t.test(n=NULL,delta=0.5,sd=1,sig.level=0.05,power=0.8,strict=T)
Two-sample t test power calculation
n = 63.76561 # ←n = 64以上が良いという結論になった
delta = 0.5
sd = 1
sig.level = 0.05
power = 0.8
alternative = two.sided
NOTE: n is number in *each* group

2014/2/20

35
Rで検定力分析を行う関数
({pwr}パッケージ)

2014/2/20

36
{pwr}は色々あります

pwr.2p.test
pwr.2p2n.test
pwr.anova.test
pwr.chisq.test
pwr.f2.test
pwr.norm.test
pwr.p.test
pwr.r.test
pwr.t.test
pwr.t2n.test
2014/2/20

2群の比率の差の検定(サンプルサイズが等しい場合)
2群の比率の差の検定(サンプルサイズが異なる場合)
ANOVA
χ2二乗検定
一般化線形モデル
正規分布の平均値の検定(分散が既知の場合)
比率の検定(1標本)

相関係数の検定
平均値に関するt検定(1群、2群、対応あり)
サンプルサイズの異なる独立な2群の平均値に関するt検定
37
引数は4つ、3つを固定して残り1つをNULLにして求める

d, h, k, w, f, f2, r

Cohenのeffect size
(後で)

n

サンプルサイズ

sig.level

有意水準

power

検定力
(大体0.8ぐらいに
固定するのが普通)

2014/2/20

38
Effect size(効果量)とは?

 端的に言えば「検定が有意な時にどれほどの効果が
あるのか」を表すインデックス
 例えば以下の2ケースを比べてみると:
 鉛筆工場の製造ライン2つの鉛筆を比べたら、
p < 0.05で長さの平均値の差が0.1mm
Effect sizeは小さい(意味のない有意差)
 ある睡眠薬による睡眠時間の延長量を比べたら、
p < 0.05で差が2時間
Effect sizeは大きい(普通のヒトの睡眠時
間を考えたら2時間増は意味がある)
2014/2/20

39
Effect sizeは検定力と併せて検討すべし
 一般に、サンプルサイズを大きくしようとすればするほどコストがかかる
 Effect sizeが大きければサンプルサイズが小さくても有意になりやすいが、
その逆もまた然り
 母集団にある程度のeffect sizeがあると仮定するなら、「確率0.8程度
の確かさ(=検定力)で有意な結果が得られたらハッピー」と期待して
サンプルサイズを小さめに決めるという手もある
 実際のeffect sizeが小さかったらその分有意になりづらいのでOK

 例えば、effect sizeが小さいうちは有意にならなくてもよくて、effect
sizeが大きければ有意になるようにしたければ、そのようにサンプルサイズ
を小さめに決めれば良い
 テキストの「新しく開発されたダイエット食品」の例

 要は「何と何のトレードオフなら取れるか」でしかない
2014/2/20

40
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
t検定のサンプルサイズを求める

> pwr.t.test(n=NULL,d=0.5,sig.level=0.05,power=0.8)
# Cohen’s d = 0.5(中)で固定
Two-sample t test power calculation
n = 63.76561 # n = 64が必要ということ
d = 0.5
sig.level = 0.05
power = 0.8
alternative = two.sided

NOTE: n is number in *each* group

2014/2/20

42
t検定のサンプルサイズを求める

> pwr.t.test(n=NULL,d=0.8,sig.level=0.05,power=0.8)
# Cohen’s d = 0.8(大)に上げてみた
Two-sample t test power calculation
n = 25.52457 # n = 26と、小さいサンプルサイズに
d = 0.8
sig.level = 0.05
power = 0.8
alternative = two.sided

NOTE: n is number in *each* group

2014/2/20

43
cohen.ES関数でeffect sizeを呼び出す

実はcohen.ES関数で、Cohenが提唱した小・中・大
それぞれのeffect sizeの値を呼び出すことができる
> cohen.ES(test=“t”,size=“medium”) # t検定の「中」
Conventional effect size from Cohen (1982)
test = t
size = medium
effect.size = 0.5
> cohen.ES(test=“anov”,size=“large”) # ANOVAの「大」
Conventional effect size from Cohen (1982)
test = anov
size = large
effect.size = 0.4
2014/2/20

44
ややこしい例(1): ANOVA

> pwr.anova.test(n=NULL,f=0.25,k=5,sig.level=0.05,power=0.8)
Balanced one-way analysis of variance power calculation
k = 5 # 群の数
n = 39.1534 # 群ごとのサンプルサイズ
f = 0.25
sig.level = 0.05
power = 0.8
NOTE: n is number in each group

2014/2/20

45
ややこしい例(2): 一般化線形モデル

> pwr.f2.test(u=4,v=NULL,f2=0.35,sig.level=0.05,power=0.8)
# 一般化線形モデルについては与える引数が独特
# u: 説明変数側の自由度, v: 目的変数側の自由度
Multiple regression power calculation

u = 4 # 「説明変数の自由度を」4に固定
v = 34.14884 # 「目的変数の自由度が」35以上
f2 = 0.35
sig.level = 0.05
power = 0.8

2014/2/20

46
おまけ:直接effect sizeを
Rで求める方法(dのみ)

2014/2/20

47
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
今回語り尽くせなかったところは…

ブログで補足記事を書くかも?(期待しないでください)

2014/2/20

49

More Related Content

Rによるやさしい統計学第20章「検定力分析によるサンプルサイズの決定」