草薙の研究ログ

英語の先生をやってます。

効果量(Cohen's d)と分布の重なり:RでCohen's dから共有面積への変換スクリプト

背景

効果量のCohen's dは2変数の分布の重なりの程度だとも解釈できる。

こういうこと。

f:id:kusanagik:20150713234535p:plain

くわしくは浦野先生(2013)など。

 

LET2013 workshop | ひとりごと

 

ただし,これは(想定上の)母集団についての話。

さらにCohen's dは,プールされた標準偏差を使う。これは実際のそれぞれの変数の標準偏差の値とは異なる。なので,母集団において,両変数が(同一の)プール化された標準偏差を持つとみなしたときに,という前提がつく。そうした条件下においてのみ,dは分布の重なりと一致する。具体的には以下のような関数になる。

もちろん,正規分布しないデータにこれを考えるのは不毛。そういうときは,Cliff's deltaなどを使用したらいいと思う。

f:id:kusanagik:20150713234319p:plain

dが大きくなると,共有された面積は単調に低下していく。

効果量の値を具体的にイメージするために,この面積を知りたい,ということとしよう。

Rでdから変換する

どうやったらこの面積をもとめられるだろう?

面積なんだから素直にグラフ上で考える。まず,1変数は標準正規分布N(0,1)。もう1変数はN(d, 1)。

f:id:kusanagik:20150713235141p:plain

 

ほい。次に2つの交点を考える。

これ,実はd/2。*1

f:id:kusanagik:20150713235253p:plain

なので,負の無限からこの交点までを2関数について数値積分でもして,実際に面積を…ってもとめなくともよいwww

正規分布には累積分布関数があるから。

結局は単にそれぞれの関数,交点についての累積確率を考える。

f:id:kusanagik:20150713235633p:plain

赤い面積はN(d, 1)の交点における累積確率。

黒い面積と赤い面積の和は,N(0,1)の交点における累積確率。

ここで,交点を境界にして左右対称だってことを考える。

左右対称なので,ここでは黒+赤面積に対する赤面積の比率のみを考えればよい。

これで共有面積が分かるってわけ。

文系にもわかるくらい単純だwww

 

これをRの関数にする。

d2area<-function(d){
intersection<-d/2 #交点
area<-pnorm(intersection,d,1)/pnorm(intersection,0,1) #共有面積
area #出力
}

なかにdを入れるだけで変換できる。

d2area(1)

[1] 0.4462101

 

もちろんベクトルいれてもいい。

d2area(seq(0,1,.25))
[1] 1.0000000 0.8190476 0.6702680 0.5475809 0.4462101

ほい。

 

記述統計から直接計算するときは,

area<-function(n1,n2,m1,m2,s1,s2){
md<-m2-m1 #平均差
pooledsd<-sqrt( ( ( (n1-1)*s1^2) + ( (n2-1) * s2^2) )/(n1+n2) ) #プール標準偏差
d<-md/pooledsd #d
intersection<-d/2 #交点
area<-pnorm(intersection,d,1)/pnorm(intersection,0,1) #面積
list("d"=d,"Area"=area) #dと面積をリストで出力
}

 

これを使えばいい。効果量と共有面積をリストでだす。

area(10,10,50,60,10,10)
$d
[1] 1.054093

$Area
[1] 0.4266978

 

 

*1:嘘だと思ったら実際optimでもしろよー,10分くらいそれでやって馬鹿らしいって気づいた