統計的有意性を超えて:効果量の理解
効果量は、標本サイズに依存しない差異や関連性の大きさを測定します。p値は効果が統計的に有意かどうかを示しますが、効果量はその効果が実用的にどれほど意味があるかを示します。研究、医療、教育、ビジネスにおけるエビデンスに基づく意思決定に、この区別は極めて重要です。
ある新薬がプラセボに対して統計的に有意な改善(p < 0.001)を示した製薬試験を考えてみてください。効果量がなければ、改善が0.1%なのか50%なのかわかりません。効果量はこの重要な文脈を提供し、その効果がコストや副作用、実施の手間に見合うかどうかを関係者が判断する助けとなります。
2つのグループを比較する際に最も一般的な効果量の指標はCohenのdで、平均の差を標準偏差の単位で表します。この標準化により、異なる研究や測定スケール間での比較が可能になります。
なぜ効果量が重要か
統計的有意性は標本サイズに大きく影響されます。十分に大きな標本があれば、些細な差でも「有意」になります。逆に、重要な効果が小さな標本では有意にならないこともあります。効果量は、標本サイズに依存しない指標を提供することでこの問題を解決します。
有意性の罠
効果量を使う主な理由:
- メタ分析: 効果量は複数の研究を統合して全体的な効果を推定できる
- 検出力分析: 将来の研究に必要な標本サイズを計算するために必須
- 実用的な判断: 介入の実施に値するかどうかの判断に役立つ
- 再現性: 再現研究が目標とすべき値を提供する
Cohenのd:標準的な効果量の指標
Cohenのdは、2つのグループの平均の差をプール標準偏差の単位で表します。
Cohenのd
M₁とM₂はグループの平均、spは以下のように計算されるプール標準偏差です。
プール標準偏差
dの符号は方向を示します。M₁ > M₂のとき正、M₁ < M₂のとき負。方向が文脈から明らかな場合は、絶対値|d|が報告されることが多いです。
なぜ標準偏差をプールするのか?
代替的な効果量の指標
Cohenのdが最も一般的ですが、特定の状況向けの代替指標もあります。
Hedgesのg:バイアス補正済みの効果量
Cohenのdは小さな標本で母集団の効果量をわずかに過大推定します。Hedgesのgは補正係数を適用します。
Hedgesのg補正
グループあたり20以上の標本では差はごくわずかです。小標本(n < 20)ではHedgesのgが推奨されます。
Glassのδ:分散が異なる場合
一方のグループが既知のばらつきを持つ対照群の場合、対照群の標準偏差のみを分母として使用します。
Glassのデルタ
処置が分散に影響を与える可能性がある場合(例:成績の低い学生ほど大きな効果を受ける介入)に有用です。
効果量の解釈:Cohenのガイドライン
Jacob Cohenはdの値を解釈するための以下の基準を提唱しました。
| 効果量 (d) | 解釈 | 重なり |
|---|---|---|
| 0.2 | 小さい | グループ間の85%が重なる |
| 0.5 | 中程度 | グループ間の67%が重なる |
| 0.8 | 大きい | グループ間の53%が重なる |
| 1.2 | 非常に大きい | グループ間の40%が重なる |
| 2.0 | 極めて大きい | グループ間の19%が重なる |
文脈が重要
計算例:教育的介入
ある学校が新しい読解プログラムをテストします。対照群 (n=25):平均=72、SD=12。介入群 (n=30):平均=79、SD=14。Cohenのdを計算します。
プール分散を計算する
プール標準偏差を計算する
Cohenのdを計算する
解釈する
これは、介入群からランダムに1人、対照群からランダムに1人を選んだ場合、介入群の学生が約64%の確率で高い得点を取ることを意味します(重なりの計算から)。
Python実装
信頼区間付きで効果量をプログラムで計算します。
import numpy as np
from scipy import stats
def cohens_d(group1, group2):
"""Calculate Cohen's d for two independent groups."""
n1, n2 = len(group1), len(group2)
var1, var2 = np.var(group1, ddof=1), np.var(group2, ddof=1)
# Pooled standard deviation
pooled_std = np.sqrt(((n1-1)*var1 + (n2-1)*var2) / (n1+n2-2))
# Cohen's d
d = (np.mean(group1) - np.mean(group2)) / pooled_std
return d
def hedges_g(group1, group2):
"""Calculate Hedges' g (bias-corrected effect size)."""
n1, n2 = len(group1), len(group2)
d = cohens_d(group1, group2)
# Correction factor for small sample bias
correction = 1 - 3 / (4*(n1+n2) - 9)
return d * correction
# Example usage
control = [68, 72, 75, 70, 69, 74, 71, 73, 76, 72]
treatment = [75, 79, 82, 78, 80, 77, 81, 76, 83, 79]
d = cohens_d(treatment, control)
g = hedges_g(treatment, control)
print(f"Cohen's d: {d:.3f}")
print(f"Hedges' g: {g:.3f}")