Σ
SDCalc
中級応用·12 min

Cohenのdと効果量の計算

Cohenのd、Hedgesのg、Glassのデルタなどの効果量の計算をマスター。p値を超えた実質的な有意性を標準偏差を使って測定する方法を解説。

統計的有意性を超えて:効果量の理解

効果量は、標本サイズに依存しない差異や関連性の大きさを測定します。p値は効果が統計的に有意かどうかを示しますが、効果量はその効果が実用的にどれほど意味があるかを示します。研究、医療、教育、ビジネスにおけるエビデンスに基づく意思決定に、この区別は極めて重要です。

ある新薬がプラセボに対して統計的に有意な改善(p < 0.001)を示した製薬試験を考えてみてください。効果量がなければ、改善が0.1%なのか50%なのかわかりません。効果量はこの重要な文脈を提供し、その効果がコストや副作用、実施の手間に見合うかどうかを関係者が判断する助けとなります。

2つのグループを比較する際に最も一般的な効果量の指標はCohenのdで、平均の差を標準偏差の単位で表します。この標準化により、異なる研究や測定スケール間での比較が可能になります。

なぜ効果量が重要か

統計的有意性は標本サイズに大きく影響されます。十分に大きな標本があれば、些細な差でも「有意」になります。逆に、重要な効果が小さな標本では有意にならないこともあります。効果量は、標本サイズに依存しない指標を提供することでこの問題を解決します。

有意性の罠

n=10,000の研究で、100点満点のスケールで0.5点の差がp < 0.001になることがあります。統計的には有意ですが、実用的には無意味です(d ≈ 0.05)。p値と合わせて常に効果量を報告してください。

効果量を使う主な理由:

  • メタ分析: 効果量は複数の研究を統合して全体的な効果を推定できる
  • 検出力分析: 将来の研究に必要な標本サイズを計算するために必須
  • 実用的な判断: 介入の実施に値するかどうかの判断に役立つ
  • 再現性: 再現研究が目標とすべき値を提供する

Cohenのd:標準的な効果量の指標

Cohenのdは、2つのグループの平均の差をプール標準偏差の単位で表します。

Cohenのd

d = (M₁ - M₂) / sp

M₁とM₂はグループの平均、spは以下のように計算されるプール標準偏差です。

プール標準偏差

sp = √[((n₁-1)s₁² + (n₂-1)s₂²) / (n₁+n₂-2)]

dの符号は方向を示します。M₁ > M₂のとき正、M₁ < M₂のとき負。方向が文脈から明らかな場合は、絶対値|d|が報告されることが多いです。

なぜ標準偏差をプールするのか?

プールは両グループの母分散が等しいことを仮定します。いずれか一方のSDだけを使うよりも安定した推定値を与え、独立標本t検定の仮定と整合します。

代替的な効果量の指標

Cohenのdが最も一般的ですが、特定の状況向けの代替指標もあります。

Hedgesのg:バイアス補正済みの効果量

Cohenのdは小さな標本で母集団の効果量をわずかに過大推定します。Hedgesのgは補正係数を適用します。

Hedgesのg補正

g = d × (1 - 3/(4(n₁+n₂) - 9))

グループあたり20以上の標本では差はごくわずかです。小標本(n < 20)ではHedgesのgが推奨されます。

Glassのδ:分散が異なる場合

一方のグループが既知のばらつきを持つ対照群の場合、対照群の標準偏差のみを分母として使用します。

Glassのデルタ

Δ = (M₁ - M₂) / s_control

処置が分散に影響を与える可能性がある場合(例:成績の低い学生ほど大きな効果を受ける介入)に有用です。

効果量の解釈:Cohenのガイドライン

Jacob Cohenはdの値を解釈するための以下の基準を提唱しました。

効果量 (d)解釈重なり
0.2小さいグループ間の85%が重なる
0.5中程度グループ間の67%が重なる
0.8大きいグループ間の53%が重なる
1.2非常に大きいグループ間の40%が重なる
2.0極めて大きいグループ間の19%が重なる

文脈が重要

これらは大まかなガイドラインであり、絶対的なルールではありません。分野によっては、d = 0.2が非常に意味のある場合もあり(例:心臓発作リスクの低減)、d = 0.8が当然と見なされる場合もあります(例:指導を受けた場合と受けない場合の比較)。

計算例:教育的介入

ある学校が新しい読解プログラムをテストします。対照群 (n=25):平均=72、SD=12。介入群 (n=30):平均=79、SD=14。Cohenのdを計算します。

1

プール分散を計算する

sp² = [(25-1)(12)² + (30-1)(14)²] / (25+30-2) = [24×144 + 29×196] / 53 = [3456 + 5684] / 53 = 172.45
2

プール標準偏差を計算する

sp = √172.45 = 13.13
3

Cohenのdを計算する

d = (79 - 72) / 13.13 = 7 / 13.13 = 0.53
4

解釈する

中程度の効果量(d = 0.53)。介入群は対照群よりも約半分の標準偏差分高い得点を示しています。

これは、介入群からランダムに1人、対照群からランダムに1人を選んだ場合、介入群の学生が約64%の確率で高い得点を取ることを意味します(重なりの計算から)。

Python実装

信頼区間付きで効果量をプログラムで計算します。

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}")