Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

113,158 views

Published on

R初心者向け講座「Rによるやさしい統計学第20章『検定力分析によるサンプルサイズの決定』」20140222 TokyoR #36

Published in: Technology
  • Be the first to comment

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

  1. 1. Rによるやさしい統計学 第20章「検定力分析によるサンプル サイズの決定」 株式会社リクルートコミュニケーションズ データサイエンティスト 尾崎 隆 (Takashi J. OZAKI, Ph. D.) 2014/2/20 1
  2. 2. 一応、自己紹介を…  このブログの中の人です 2014/2/20 2
  3. 3. 注意点  肝心の僕が『Rによるやさしい統計学』2月になるまで読んだこと ありませんでした  今回の講師も @yokkuns から 「TJOさんサンプルサイズのブログ記事 書いてたってことは詳しいと思うのでお願い していいですよね?」 と頼まれて、一度断ったものの2回目に頼まれてさすがに断れな かったのでお引き受けした次第  よって内容は結構適当ですごめんなさい 2014/2/20 3
  4. 4. 今回の課題図書 2014/2/20 4
  5. 5. 今回の課題図書 今日話すのは こちらの方 2014/2/20 こちらはより 深く学びたい 人向け 5
  6. 6. 今回のレクチャーの前提 多重比較の問題と 第一種の過誤については 既に皆さん分かっているものとして 話を進めますので 忘れてる方は今のうちに復習を! 2014/2/20 6
  7. 7. 「検定力」(検出力)とは何か? 2014/2/20 7
  8. 8. 端的に言えば 1.対立仮説が真である時に 2.帰無仮説が棄却される確率 = P([帰無仮説を棄却] | [対立仮説が真]) 2014/2/20 8
  9. 9. マトリクスでいうとココ 帰無仮説が 正しい 対立仮説が 正しい 帰無仮説を 採択する ① ② 帰無仮説を 棄却する ③ ④ 2014/2/20 9
  10. 10. こいつらが困りもの 帰無仮説が 正しい 対立仮説が 正しい 帰無仮説を 採択する ① ② 帰無仮説を 棄却する ③ ④ 2014/2/20 10
  11. 11. こいつらが困りもの 帰無仮説が 正しい 対立仮説が 正しい 帰無仮説を 採択する ① 第二種の過誤 帰無仮説を 棄却する 第一種の過誤 ③ ④ ② 第一種の過誤も第二種の過誤も、本来正しいはずの仮説に 従わない偏った標本をうっかり掴まされたことで陥る 2014/2/20 11
  12. 12. こいつらが困りもの 帰無仮説が 正しい 対立仮説が 正しい 帰無仮説を 採択する ① 第二種の過誤 帰無仮説を 棄却する 第一種の過誤 ③ ④ 2014/2/20 ② 12
  13. 13. これが欲しい 帰無仮説が 正しい 対立仮説が 正しい 帰無仮説を 採択する ① 第二種の過誤 帰無仮説を 棄却する 第一種の過誤 ③ ④ ② 検定力=1 – P(第二種の過誤) 2014/2/20 13
  14. 14. では、検定力とはどうやって決まる? 1.有意水準 2.対立仮説のもとでの母集団に おける効果の大きさ (効果量 effect size) 3.サンプルサイズ 2014/2/20 14
  15. 15. では、検定力とはどうやって決まる? 1.有意水準 2.対立仮説のもとでの母集団に おける効果の大きさ (効果量 effect size) 3.サンプルサイズ 3つのバランスによって検定力は決まる 2つを固定することで残り1つの最適値を決めることもできる 2014/2/20 15
  16. 16. では、検定力とはどうやって決まる? 1.有意水準 2.対立仮説のもとでの母集団に おける効果の大きさ 検定力 (効果量 effect size) 分析 3.サンプルサイズ 3つのバランスによって検定力は決まる 2つを固定することで残り1つの最適値を決めることもできる 2014/2/20 16
  17. 17. なぜ検定力分析が必要なのか? 2014/2/20 17
  18. 18. 検定力の大小で、検定の結果は変わってしまう  事後分析  既に結果の出た検定に対して「検定力が ○○だったから△△だった」というように原因 究明するためのもの  事前分析  (特に)「○○ぐらい検定力が欲しいので サンプルサイズを◇◇ぐらいにしたい」という ように、これから行う検定を最適化するため のもの 2014/2/20 18
  19. 19. 検定力を求めるシミュレーション 2014/2/20 19
  20. 20. モンテカルロ法の要領でやってみる  検定力とは  対立仮説が正しい時に有意な結果が得られる確率  でも、あるサンプルサイズのデータの検定力を知るにはどうしたら 良い?  1回こっきり検定しても何も分からない  そこで、シミュレーションしてみよう  意図的に、対立仮説が当てはまり、なおかつサンプルサイズの決 まった母集団を2つ用意する  そこから標本をn回無作為に抽出して、毎回t検定する  そのうち何回有意(ここではp < 0.05)だったかを見れば、検 定力の近似値が求まる! 2014/2/20 20
  21. 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
  22. 22. そこでt値の分布を見てみる > hist(tval,breaks=100,freq=F) # ヒストグラムを描く。縦軸はDensityに t分布っぽく見えるかも? 2014/2/20 22
  23. 23. そこで帰無仮説に従う自由度18のt分布を重ねてみる > curve(dt(x,df=18),add=T,col=‘blue’,lwd=2) # curve関数とdf関数を使う あれ、重ならない? 2014/2/20 23
  24. 24. 実は… こいつは非心t分布なのです 2014/2/20 24
  25. 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
  26. 26. ところで、非心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
  27. 27. そこで、非心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
  28. 28. 詳細について学びたければ改めてこちらを 非心t分布に拠った サンプルサイズの計算方法が これでもかというくらい 解説されています。。。 ※今回はその話はざっくり 割愛します 2014/2/20 28
  29. 29. Rで検定力分析を行う関数 (標準パッケージ) 2014/2/20 29
  30. 30. そもそもRのfor文はトロいので… モンテカルロ法なんて 毎回やりたくない(泣) Rの関数で片付けちゃいましょう 2014/2/20 30
  31. 31. とりあえず{stats}まわりではこの辺 power.t.test t検定の検定力分析 power.anova.test ANOVAの検定力分析 power.prop.test 比率の検定の検定力分析 2014/2/20 31
  32. 32. 先ほどの例をそのままやってみる(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
  33. 33. 先ほどの例をそのままやってみる(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
  34. 34. でもむしろ知りたいのはサンプルサイズだよね? どうせならサンプルサイズを 決めたいんだけど… 検定力を決め打ちにすればおk 2014/2/20 34
  35. 35. 先ほどの例で検定力を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
  36. 36. Rで検定力分析を行う関数 ({pwr}パッケージ) 2014/2/20 36
  37. 37. {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
  38. 38. 引数は4つ、3つを固定して残り1つをNULLにして求める d, h, k, w, f, f2, r Cohenのeffect size (後で) n サンプルサイズ sig.level 有意水準 power 検定力 (大体0.8ぐらいに 固定するのが普通) 2014/2/20 38
  39. 39. Effect size(効果量)とは?  端的に言えば「検定が有意な時にどれほどの効果が あるのか」を表すインデックス  例えば以下の2ケースを比べてみると:  鉛筆工場の製造ライン2つの鉛筆を比べたら、 p < 0.05で長さの平均値の差が0.1mm Effect sizeは小さい(意味のない有意差)  ある睡眠薬による睡眠時間の延長量を比べたら、 p < 0.05で差が2時間 Effect sizeは大きい(普通のヒトの睡眠時 間を考えたら2時間増は意味がある) 2014/2/20 39
  40. 40. Effect sizeは検定力と併せて検討すべし  一般に、サンプルサイズを大きくしようとすればするほどコストがかかる  Effect sizeが大きければサンプルサイズが小さくても有意になりやすいが、 その逆もまた然り  母集団にある程度のeffect sizeがあると仮定するなら、「確率0.8程度 の確かさ(=検定力)で有意な結果が得られたらハッピー」と期待して サンプルサイズを小さめに決めるという手もある  実際のeffect sizeが小さかったらその分有意になりづらいのでOK  例えば、effect sizeが小さいうちは有意にならなくてもよくて、effect sizeが大きければ有意になるようにしたければ、そのようにサンプルサイズ を小さめに決めれば良い  テキストの「新しく開発されたダイエット食品」の例  要は「何と何のトレードオフなら取れるか」でしかない 2014/2/20 40
  41. 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
  42. 42. 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
  43. 43. 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
  44. 44. 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
  45. 45. ややこしい例(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
  46. 46. ややこしい例(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
  47. 47. おまけ:直接effect sizeを Rで求める方法(dのみ) 2014/2/20 47
  48. 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
  49. 49. 今回語り尽くせなかったところは… ブログで補足記事を書くかも?(期待しないでください) 2014/2/20 49

×