頻度差の検定の効果量としてオッズ比を用いる

 コーパス分析で頻度差を検定する場合、カイ二乗検定対数尤度比検定がよく使われます。しかし、このような検定には、サンプル・サイズが大きくなれば、実質的な差がなくとも、「有意差あり」という誤った結果が得られる危険性があります。そのようなときには、検定の結果だけでなく、何らかの効果量を確認する必要があります。効果量には様々な指標がありますが、今回は、オッズ比を紹介します。*1
 例えば、異なる2つのコーパスから、特定の言語項目の正用と誤用の頻度を集計したとします。それらの頻度を2×2の分割表にするには、以下のようにします。

# 分割表の作成
dat <- matrix(c(700, 1002, 14, 51), nrow = 2)
rownames(dat) <- c("Corpus A", "Corpus B")
colnames(dat) <- c("Correct", "Error")
# 作成した分割表の確認
dat

 上記のスクリプトを実行すると、以下のような結果が表示されます。

         Correct Error
Corpus A     700    14
Corpus B    1002    51

 まず、この分割表に対して、カイ二乗検定イェーツの補正なし)を行うには、以下のようにします。

# カイ二乗検定(イェーツの補正なし)
chisq.test(dat, correct = F)

 上記のスクリプトを実行すると、以下のような結果が表示されます。ここでのp-valueは0.001584ですので、分析対象である言語項目の正用率に関して、2つのコーパス間で1%水準での有意差があることが分かります。

	Pearson's Chi-squared test

data:  dat 
X-squared = 9.9778, df = 1, p-value = 0.001584

 次に、同じ分割表からオッズ比を計算するには、vcdパッケージを使います。*2

# パッケージの読み込み
library(vcd)
# オッズ比 (Wald, unconditional)
oddsratio(dat, log = F)

 上記のスクリプトを実行すると、以下のような結果が表示されます。

[1] 2.54491

 そして、信頼区間やp値を求めるには、以下のようにします。*3

# 信頼区間
confint(oddsratio(dat, log = F))
# p値
summary(oddsratio(dat))

 上記のスクリプトを実行すると、以下のような結果が表示されます。論文では、p値だけでなく、オッズ比と信頼区間を合わせて報告することで、メタ分析につながります。*4

# 信頼区間
          lwr      upr
[1,] 1.409835 4.593849

# p値
     Log Odds Ratio Std. Error z value  Pr(>|z|)    
[1,]        0.93410    0.30134  3.0998 0.0009684 ***
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1 

 最後になりましたが、正用率の分析にオッズ比を用いることに関して、関西大学水本篤先生と北海学園大学浦野研先生よりアドバイスを頂きました。記して、感謝を申し上げます。

(追記)頻度差の検定の効果量としてファイ係数とクラメールのVを用いるという本記事の続編を書きました。

*1:効果量としてのオッズ比に関しては、こちらも参照してください。

*2:オッズ比の計算方法には様々なものがあり、それを計算するためのRパッケージもいくつか存在します。詳しくは、こちらを参照してください。

*3:独立性検定のp値とオッズ比のp値を一致させるには、exact2x2パッケージなどを使います。その使い方に関しては、こちらが参考になります。

*4:オッズ比の解釈に関して、三重大学奥村晴彦先生からこのようなご指摘を頂きました。どうもありがとうございました。