渋谷駅前で働くデータサイエンティストのブログ

元祖「六本木で働くデータサイエンティスト」です / 道玄坂→銀座→東京→六本木→渋谷駅前

効果量(effect size)のはなし

統計学的検定の話を始めたら自分の勉強の方が止まらなくなってしまったので(笑)、ついでにやってみようと思います。ちなみにこの記事は前回のやたらブクマを集めた記事の続きみたいなものです。

例えば有意ではないという結果になった時にそれが「実際に帰無仮説が真」なのか「単にサンプルサイズが小さくて検出力が足りないだけ」なのか判断せよという問題。前者なら果てしなくサンプルサイズを大きくしても有意にはならないし、後者なら今度は効果量(effect size)のことを考えなければいけません。


というように前回の記事では検出力(statistical power)と効果量(effect size)について触れたんですが、タイムリーに先日の第36回TokyoRでその辺の話をしてきたので*1、そのslideshareを貼っておきます。



大体言いたいことは全部ここに載ってるんですが、TokyoRの会場でのみ話したことも踏まえて、いくつか補足しておきます。なお、ここでは検定力(or検出力: statistical power)は天下りに0.8固定みたいな雰囲気で話を進めていきますので悪しからず。ちなみに、僕はeffect sizeおよびメタアナリシスに関しては系統立てて学んでいないので、おかしなところがあったら是非どしどしご指摘ください*2


そもそもeffect sizeとは何か


これって実は他に表現のしようがなくて、「母集団における効果の大きさ」としか言いようがないんですよね(汗)。ただ、こいつは実は未知母数みたいな扱いをされるべきもので、しかも実測値を積極的に求めに行くというよりも、むしろeffect sizeとは「仮想上の未知母数として定めた上でその前提に基づいて実験計画を立てる」ためのもの、と見た方が良いのだと思います。


実際、得られた標本から直でeffect sizeを求めるようなケースがあっても、メタアナリシス以外のケースでそれ単体で何かするということはない印象です*3。ちなみにメタアナリシスについて、web上で参照できるノートと言えば古典ですがこちらが有名です。


下手にWikipediaとか見るよりも、こちらにちゃんとeffect sizeの統合の仕方とか正しいeffect sizeの求め方とか*4紹介されているので、単純に知識を得たい人には個人的にはこちらの方がお薦めです。


Effect sizeとはどうやって使うものなのか


先日のTokyoRで話した流れに沿って言えば*5、こんな感じになると思います。

  1. あらかじめ実験or測定する前から、想定される母集団に「○○ぐらいの大きさのeffect sizeがあるはずだ」という仮定を置く
  2. 仮定したeffect sizeのもとで、最小限となるサンプルサイズを決定する
  3. そのサンプルサイズのもとで実験or測定し、対立仮説が採択されれば「○○ほどのeffect sizeを伴う効果があった」と推定する
  4. 逆に帰無仮説が採択されれば「effect sizeが○○ほどなかった」と推定する


もっとメタな概念として言ってしまうと、「今相手にしている母集団には有意な効果があるとしたら○○ぐらいのeffect sizeがあるはずだ!そうでないなら検定で引っ掛からなくてもおk!」みたいな「信条」を置くってことですね。そうすることで、積極的に必要なサンプルサイズを決めるための基準が生まれるというわけです*6。一般に、

  • Effect sizeが大きければそれだけ第二種の過誤に至るような偏ったサンプルをつかまされることは少なく、その分サンプルサイズは小さめでもOK
  • Effect sizeが小さければ逆に第二種の過誤に至るような偏ったサンプルをつかまされやすく、それを避けるためにもサンプルサイズは大きめにすべし


ということが言えるので、これは完全に検定力分析の考え方と表裏一体の関係にあります。なのですが。そんなこと言われても、普通の人にとってはそもそものeffect sizeの定義を知らないと使いようがないと思うのです。端的に言えば、特にCohen's dと称される等分散な2群の平均値の差のt検定におけるeffect sizeは

d = [標本平均の差の絶対値] / [Common error variance(対照群の標準偏差で代用されることもある)]


で表されます。つまりこれは「測定単位とは無関係に2群で共通化された標準偏差で正規化した『平均値の差の大きさ』」であり、言い換えると「平均値の差を生み出す効果の大きさ」と見て良いと思います。これの大小で、先ほどの「信条」を決めてサンプルサイズを決めよう!というのが、この辺のもろもろを含めた検定力分析の考え方なんですね。


ところで、Cohenがどうのこうのと聞いて何じゃらほい?と思った方はこちらの書籍をどうぞ。


Statistical Power Analysis for the Behavioral Sciences

Statistical Power Analysis for the Behavioral Sciences


これはJacob Cohenによる検定力分析に関する大著なんですが、彼が提唱したのがいわゆる「Cohenのeffect size」というやつなんですね。Rの{pwr}パッケージでは以下の関数で検定力分析を行うことができるんですが、

関数名 検定の内容
pwr.2p.test 2群の比率の差の検定(サンプルサイズが等しい場合)
pwr.2p2n.test 2群の比率の差の検定(サンプルサイズが異なる場合)
pwr.anova.test ANOVA
pwr.chisq.test χ2二乗検定
pwr.f2.test 一般化線形モデル
pwr.norm.test 正規分布の平均値の検定(分散が既知の場合)
pwr.p.test 比率の検定(1標本)
pwr.r.test 相関係数の検定
pwr.t.test 平均値に関するt検定(1群、2群、対応あり)
pwr.t2n.test サンプルサイズの異なる独立な2群の平均値に関するt検定


それぞれに用いるべきCohenのeffect sizeは実はcohen.ES()関数で呼び出すことができます。ただし、これは単なるデータテーブルを読み出すだけの関数で、全部書き出すと以下のようになります。

関数名 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


この分類に従って、「この母集団のeffect sizeは大きそうかな~、小さそうかな~」と仮定を置いてサンプルサイズの決め方を考えれば良いということですね。ところで、effect sizeについて触れた和書って長らくなかったと思うんですが、Twitter上でこちらの書籍が最近出て評判が良いと聞いたので、未見ながら一応挙げておきます。


伝えるための心理統計: 効果量・信頼区間・検定力

伝えるための心理統計: 効果量・信頼区間・検定力


多分こちらの書籍を当たられた方が、こんな僕なんぞのいい加減なブログ記事よりも参考になるのではないかと思いますので(笑)、さらに深く勉強されたいという方はお試しあれ*7


ところでeffect sizeの実測値はどう求めるのか


とまぁ色々書いてきましたが、既に触れた通りメタアナリシスなどが必要なケースでは、effect sizeの実測値がないと議論にもならないことが多々あるわけです。実際、心理統計や計量社会学の世界などではeffect sizeを報告せよと論文投稿時に要求されることもあると聞きます。


「Effect sizeが小さく、取るに足らない些細な効果を、不必要に馬鹿でかいサンプルサイズで無理やり検出してないかどうか」「effect sizeが大きいと見込まれ、サンプルサイズも十分に大きいのに、帰無仮説が採択されるような不自然な比較をしてないかどうか」みたいなことを、おそらく問われるんじゃないかと思うのです。そういうメタなレベルでの妥当性を判定するためにeffect sizeが用いられるというのには、納得がいきますね。


全部挙げていくとキリがないので、2群の平均値の差のt検定におけるCohen's dをRコードで直接求める方法を以下に紹介しておきます。

> 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としては結構デカい方


ちなみに求めるための式を厳密に書き出すとこうなります。

d = \frac{\overline{x_1} - \overline{x_2}}{s}

ただし

s = \sqrt{\frac{(n_1-1)s_1^2 + (n_2-1)s_2^2}{n_1+n_2-2}}

s_k = \frac{1}{n_k - 1} \sum^{n_k}_{i=1} (x_{k,i} - \overline{x_k})^2


おそらく僕が知らないだけで、様々なeffect sizeの実測値を直接求めるCRANパッケージって探せば結構色々あるんじゃないでしょうか。例えば、カイ二乗検定であれば{vcd}パッケージで直接求められます。


ただし求まるのはCramer's Vみたいです。Cohenの提唱したもの以外にも様々なeffect sizeの定義があり、大体どの資料でも「Cohenのeffect sizeはあくまでもラフな目安であり絶対的なものではない」と断り書きがついているので、皆さん自身の目的に合ったものを調べてみるのが良いと思います。

追記 (Dec 22, 2018)

こちらに主要なCohen's Xの算出式が載っていました。そのままコピペしてRで実行するだけで求まります。

また、これらのCRANパッケージも有用です。

最後に


今回はまとまった文献を参照しなかったので、代わりに参考にした短い資料を列挙しておきます。


あと、Twitterでもよくお世話になってる[twitter:@smrmkt]さんの記事はシンプルかつコンパクトで分かりやすいかと。


本当はこの記事にかこつけて色々書かせていただくつもりだったのが、気が付いたらTokyoRの講師引き受けたりして話が膨らんでしまったので、いつの間にやらeffect sizeの話ばかり長々とやることになってしまったのでした。。。ということでお後がよろしいようで。

*1:物凄くタイムリーに@yokkunsが強要^H^H誘ってきたのでやることになったという

*2:いつもながらの炎上ラーニング(笑)

*3:メタアナリシスではeffect sizeを複数のスタディ間で統合するというやり方もありますね

*4:生のeffect sizeは不偏推定量ではないので、不偏にする方法まで載っている

*5:さらに言うと『Rによるやさしい統計学』第20章の内容に沿って言えば

*6:ちなみに一般にサンプルサイズを大きくするというのはコストがかかるということなので、最小限の値を取るというのが自然な流れだと僕は理解してます

*7:ちなみに僕は勁草書房さんの回し者ではないので念のため