Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

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

113 213 vues

Publié le

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

Publié dans : Technologie
  • Soyez le premier à commenter

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

×