論文一覧に戻る 📚 用語集トップ 🗺 概念マップ
📚 用語解説
📚 用語解説
効果量
Effect Size
推測統計
別称: エフェクトサイズ / Cohen's d

🔖 キーワード索引

本ページで扱うキーワード(クリックで対応セクションへ):

#Cohen's d #Hedges' g #η² #ω² #相関r #オッズ比OR #リスク比RR #実用的有意性 #統計的有意性 #メタアナリシス #検出力 #G*Power #Cliff's δ #Common Language ES #プール標準偏差 #信頼区間

💡 30秒で分かる結論

🍰 まずはやさしく

差の大きさを測る共通の物差しです。

結果がどれくらい重要かを知るために使います。

テストの点数の差がわずかか大きいかを判断します。

代表的な指標と目安について読みましょう。

効果量(Effect Size, ES):群間の差や変数間の関連の大きさを、サンプル数に依存しない形で標準化した指標。

📍 あなたが今見ているもの

🍰 まずはやさしく

データの差を比べるための道具です。

いろいろなデータを同じ基準で比べるために使います。

都道府県ごとの高齢化率の差を調べます。

この用語の詳しい解説と使い方を読みましょう。

このページは 推測統計 カテゴリの「効果量(Effect Size)」用語解説です。「群間差」「変数間関連」の大きさを共通の物差しに乗せる指標群を扱います。Jacob Cohen が 1969 年の著作で体系化して以来、心理学・医学・社会科学・教育・経済の論文で必須報告項目に近い扱いを受けています。

関連用語:p値仮説検定サンプルサイズ信頼区間。読む順番は「30秒結論→直感→数式→記号→実値→Python」を推奨。

本ページの題材データは SSDSE-B-2026(独立行政法人統計センター)。47都道府県×多年データから「高齢化率」「年少人口比率」を抽出して効果量を算出します。

🎨 直感で掴む

🍰 まずはやさしく

差の「本当の大きさ」をあぶり出す方法です。

人数に左右されずに差の強さを知るために使います。

身長の差が1センチか10センチかを区別します。

p値との違いと、物差しを揃える考え方を読みましょう。

「2 群間に有意差あり(p<0.01)」と言われても、その差が 1cm なのか 10cm なのかは分かりません。サンプル数が大きいほど些細な差でも p<0.05 になります(例:n=100,000 なら d=0.01 でも p<0.001)。そこで「差の絶対的な大きさ」を標準化して表すのが 効果量 です。

最も有名なのは Cohen's d。「2 群の平均差を共通の標準偏差で割った値」です。単位が消えるので、cm でも kg でも点数でも同じ尺度で比較できます。「身長差 5cm を SD=10cm で割れば d=0.5」、これだけで世界中の研究と直接比べられます。

物差しを揃える発想

p 値は「差があるか」を判定しますが、効果量は「差はどれくらいあるか」を測ります。たとえば医療研究で「降圧薬 A は対照群より有意に血圧が低い(p=0.001)」と書かれても、平均差が 0.5 mmHg なら臨床的にはほぼ無意味です。効果量は「臨床的意義」を捉える鍵になります。

3 つの家族

「平均差なら d、関連なら r、確率比なら OR」と覚えれば 8 割は対応できます。論文を読むときは、どの族の効果量かを最初にチェックする習慣を。

📐 定義・数式

🍰 まずはやさしく

効果量を計算するための数式です。

単位をなくして、純粋な大きさを出すために使います。

部活の記録やテストの点数を計算して比べます。

5つの代表的な計算式について読みましょう。

代表的な効果量を 5 種類まとめます。すべて無次元量(単位なし)であることが重要です。

【① Cohen's d(2群の平均差)】
$$ d = \frac{\bar{x}_1 - \bar{x}_2}{s_{\text{pooled}}}, \quad s_{\text{pooled}}=\sqrt{\frac{(n_1-1)s_1^2+(n_2-1)s_2^2}{n_1+n_2-2}} $$
【② Hedges' g(小標本でのバイアス補正版)】
$$ g = d \cdot \left(1 - \frac{3}{4(n_1+n_2)-9}\right) $$
【③ η²(ANOVA における分散説明率)】
$$ \eta^2 = \frac{SS_{\text{between}}}{SS_{\text{total}}} $$
【④ 相関 r(連続量同士の関連強度)】
$$ r = \frac{\sum (x_i-\bar{x})(y_i-\bar{y})}{\sqrt{\sum (x_i-\bar{x})^2 \sum (y_i-\bar{y})^2}} $$
【⑤ オッズ比 OR(二値アウトカム)】
$$ OR = \frac{p_1/(1-p_1)}{p_2/(1-p_2)} = \frac{a \cdot d}{b \cdot c} \quad (\text{2x2 表}) $$

これらは「①〜⑤のどれが目的に合うか」をデータ型(連続 / カテゴリ)と研究設計(2 群比較 / 多群 / 関連)で選びます。次の表が決定ガイドです。

研究設計推奨効果量小/中/大 目安
独立 2 群の平均差Cohen's d / Hedges' g0.2 / 0.5 / 0.8
対応のある 2 群d_z(差分の SD で割る)0.2 / 0.5 / 0.8
3 群以上の平均比較η² / ω² / Cohen's f0.01 / 0.06 / 0.14(η²)
連続量同士の関連相関 r / 偏相関0.1 / 0.3 / 0.5
2x2 クロス集計OR / RR / φ係数OR=1.5 / 2.5 / 4.0
多カテゴリ間連関Cramer's V0.1 / 0.3 / 0.5
回帰モデル全体R² / 調整済み R²0.02 / 0.13 / 0.26
順序尺度Cliff's δ0.147 / 0.33 / 0.474

🎮 触って理解する

ここまで見た Cohen's d を、実際にスライダーで手を動かして体感します。2 群の正規分布を重ねて描き、平均差と標準偏差を変えると d・重なり率・優越確率 がリアルタイムで再計算されます。さらに標本サイズ n を動かすと「n を増やすと p 値は小さくなるが、効果量 d は変わらない」——すなわち統計的有意性実質的重要性が別物であることを目で確かめられます。計算はすべてこのブラウザ内で完結し、外部通信・外部ライブラリは一切ありません(オフライン動作)。

🎚 デモ1:2 群の分布を重ねて d・重なり・優越確率を見る

平均差 Δ(青い群 A − 橙の群 B)と共通の標準偏差 σ を動かしてください。青と橙の山がどれだけずれる/重なるかで、効果量 $d=\Delta/\sigma$ の大きさが視覚化されます。灰色に塗られた領域が2 分布の重なりで、これが小さいほど「2 群がよく分離している=効果量が大きい」ことを意味します。プリセットで d=0.2(小)/0.5(中)/0.8(大) の Cohen の目安を、重なり具合として直感してください。

重なり率(OVL)=2 分布が共有する面積。等分散なら $\text{OVL}=2\Phi(-|d|/2)$。優越確率(CLES)=群 A から 1 人、群 B から 1 人をランダムに選んだとき A のほうが大きい確率で、$P(A>B)=\Phi\!\big(d/\sqrt{2}\big)$。d=0.2 でも優越確率は約 56%(コイン投げの 50% に近く、実感としては「わずかな差」)、d=0.8 でも約 71% で、片方が常に上回るわけではないことが分かります。

📉 デモ2:n を増やすと p は下がる、でも d は動かない

デモ1 で決めた効果量 d を「母集団の真の差」とみなし、各群の標本サイズ n を動かします。同じ効果量でも n が大きいほど t 統計量 $t=d\sqrt{n/2}$ は大きくなり、p 値はどんどん小さくなります。一方 効果量 d はサンプル数に依存しないので一定のまま。これが「p<0.05 になった=重要な差」とは限らない理由です(p値検出力)。

→ 曲線は「同じ d のもとで n を変えたときの両側 p 値」。赤い水平線 p=0.05 を下回る n が「有意になる最小サンプル数」に相当します。実測の SSDSE-B(東西高齢化率, d≈-0.235, n≈24/群)は p≈0.42 で有意でない——しかし効果量は小〜中。「有意でない=差が無い」ではなく検出力不足の保留である好例です(サンプルサイズ検出力分析)。

🧭 整理:効果量が答える問い ―「有意か」ではなく「どれだけか」

2 つのデモを踏まえ、効果量をめぐる要点を「よくある誤解 ↔ 正しい理解」で整理します。効果量は標準化された差の大きさ(単位に依存しない物差し)であり、p 値が答える「偶然かどうか」とは別の問い=「実質的にどれだけ大きいか」に答えます。

❌ ありがちな誤解✅ 正しい理解
「p が小さい=効果が大きい」p 値は効果量ではない。デモ2 の通り n を増やせば些細な差でも p<0.001 になる。大きさは効果量(p値参照)で測る
「有意差なし=差が無い」「棄却できない」は保留検出力不足の可能性があり、効果量+信頼区間で「どこまで差を否定できるか」を見る
「d=0.8 なら片方が必ず上回る」d=0.8 でも優越確率は約 71%、重なりは約 69%。大きな効果でも分布は大きく重なる(デモ1 で体感)
「Cohen の 0.2/0.5/0.8 は絶対基準」あくまで分野横断の便宜的目安。教育・医療・素粒子など分野で「大きい」の水準は大きく異なる(下の目的別表を参照)
「効果量は 1 種類(d)だけ」データ型で使い分ける(次項)。平均差→d、関連→r、分散説明→η²、二値→オッズ比

🧩 目的別:どの効果量を使う?(他の効果量との関係)

効果量は「差」だけではありません。データの型と設計に応じて代表的な指標を選びます。いずれも無次元で、相互に近似変換もできます(d⇔r⇔OR)。

場面効果量小/中/大の目安
2 群の平均差Cohen's d / Hedges' g(小標本補正)0.2 / 0.5 / 0.8
連続量どうしの関連相関 r相関0.1 / 0.3 / 0.5
3 群以上の分散説明η²・ω²分散分析0.01 / 0.06 / 0.14
二値アウトカム(有無・成否)オッズ比 OR・リスク比(オッズ比1.5 / 2.5 / 4.0

💡 相互変換:$r=d/\sqrt{d^2+4}$、$d=\ln(OR)\times\sqrt{3}/\pi$ などで橋渡しできます。分野をまたぐ研究を同じ尺度に載せられるのが効果量の強みです。

🌐 メタ分析・検出力分析での役割

効果量は 2 つの重要な文脈で「主役」になります。

→ まとめると効果量は「報告(p 値と併記して大きさを伝える)」「統合(メタ分析)」「設計(検出力分析で n を決める)」の 3 場面を貫く共通言語です。p値が「偶然か」を、効果量が「どれだけか」を、信頼区間が「どこまで確からしいか」を担い、三位一体で解釈します。

🔬 数式を言葉で読み解く

Cohen's d の式 $ d = (\bar{x}_1 - \bar{x}_2)/s_{\text{pooled}} $ を、日本語で逐一読み下します。数式が抽象的に見える人ほど、ここで時間を使うと残りの作業が劇的に楽になります。

分子:$\bar{x}_1 - \bar{x}_2$(群間の平均差)

$\bar{x}_1$ は群 1(例:東日本 23 都道府県)の平均値、$\bar{x}_2$ は群 2(例:西日本 24 都道府県)の平均値。引き算しただけなので単位を持ったまま。SSDSE-B の高齢化率なら「0.3118 − 0.3197 = −0.0079」(単位は比率)。この「素の差」を残すと、cm/kg/点数など別のデータと比較できないので、次のステップで標準化します。記号 $\bar{x}$ の上の横線は「平均」を表す慣習で、母平均は $\mu$、標本平均は $\bar{x}$ と書き分けます。

分母:$s_{\text{pooled}}$(プールされた標準偏差)

「2 群を 1 つのバラツキ尺度にまとめた値」で、$s_p = \sqrt{[(n_1-1)s_1^2 + (n_2-1)s_2^2]/(n_1+n_2-2)}$ で計算します。各群の分散 $s_i^2$ を「自由度 $n_i - 1$」で重み付け平均して、ルートを取ったものです。なぜ「重み付き平均」かというと、サンプル数の多い群ほど分散の推定が安定するので、その情報を優先したいから。$s_{\text{pooled}}$ は群が違ってもバラツキは同じと仮定したときの共通 SD で、独立 2 標本 t 検定の母分散等質性 (homoscedasticity) と同じ仮定です。等質でないときは Welch 補正版や Glass's Δ(対照群の SD だけで割る)を使います。

割り算の意味:「物差し換算」

「平均差を SD で割る」のは、「1 SD あたり何個分の差があるか」を数えていることに相当します。たとえば d=0.5 なら「群 1 の平均は群 2 より 0.5 SD だけ高い」、d=1.0 なら「1 SD だけ高い」。SD は単位を持つ(cm なら cm)ので、平均差 / SD は単位がキャンセルして無次元になります。これが、cm でも kg でも点数でも同じスケールで比較できる秘密です。

符号の解釈

d>0 なら「群 1 が群 2 より大きい」、d<0 なら逆。SSDSE-B の例では d≈-0.24 なので「東日本の高齢化率は西日本より、SD 単位で 0.24 個分低い」と読みます。論文では絶対値で報告し、本文で方向を明記するのが一般的です。

記号定義の早見表

$d$
Cohen's d。0.2/0.5/0.8 が小/中/大の慣例目安(Cohen 1988)。
$\bar{x}_i$
群 $i$ の標本平均($i=1,2$)。
$s_i$
群 $i$ の標本標準偏差(不偏推定、分母 $n_i-1$)。
$n_i$
群 $i$ のサンプルサイズ。
$s_{\text{pooled}}$
プールされた標準偏差(自由度で加重平均したルート)。
$\eta^2$
分散説明率。ANOVA の群間平方和÷総平方和。0〜1。
$\omega^2$
$\eta^2$ の不偏推定。小標本でやや小さめに出る。
$r$
Pearson 相関係数。−1〜+1。$r^2$ が分散説明率。
$OR$
オッズ比。$OR=1$ なら関連なし、$OR>1$ なら正の関連。
$NNT$
Number Needed to Treat。「1 人助けるのに何人治療する必要があるか」。臨床で多用。

🔬 上級トピック

標準化平均差 (SMD) のバリエーション

指標分母推奨ケース
Cohen's d$s_{pooled}$標準(等分散仮定)
Hedges' g$s_{pooled} \cdot c(N)$小標本での補正版
Glass's Δ$s_{control}$(対照群のみ)等分散性が崩れているとき
Cohen's $d_z$差分の SD対応のある(同一被験者)2 群
Cohen's $d_{av}$2 群 SD の単純平均分散等質性が不明な対応のあるデザイン

η² の家族(多群比較)

指標定義特性
$\eta^2$$SS_{between}/SS_{total}$標準。バイアスあり(過大評価)
partial $\eta^2$$SS_{effect}/(SS_{effect}+SS_{error})$多元配置 ANOVA で主流
$\omega^2$補正項あり不偏推定(推奨)
$\epsilon^2$$(SS_b - (k-1)MS_e)/SS_{total}$$\omega^2$ より保守的
Cohen's f$\sqrt{\eta^2/(1-\eta^2)}$検出力分析で使用(G*Power)

確率比の効果量(疫学)

指標定義用途
オッズ比 OR$(a \cdot d)/(b \cdot c)$ケースコントロール研究
リスク比 RR$p_1 / p_2$コホート研究、RCT
リスク差 RD$p_1 - p_2$絶対リスク(公衆衛生)
NNT$1/RD$臨床コミュニケーション
ハザード比 HRCox 回帰の係数生存時間解析

ノンパラメトリック効果量

機械学習における効果量類似指標

🌍 分野別の効果量目安

Cohen の 0.2/0.5/0.8 はあくまで「全般目安」。実際の分野ごとに「典型的に観察される効果量分布」が大きく違います。

分野典型的中央値「大」の閾値出典・備考
社会心理学d ≈ 0.36d ≈ 0.65+Richard et al. (2003) 25,000 件メタ分析
教育介入d ≈ 0.40d ≈ 0.60+Hattie (2009) Visible Learning
臨床心理学(治療効果)d ≈ 0.46d ≈ 0.80+Smith & Glass (1977)
医薬品 RCTd ≈ 0.20–0.30d ≈ 0.50+CONSORT 報告統計
経済政策評価β ≈ 0.03–0.10β ≈ 0.20+Card & Krueger 系研究
UX / A/B テストd ≈ 0.05–0.20d ≈ 0.30+Kohavi et al. (2020)
脳画像研究 (fMRI)d ≈ 0.50d ≈ 1.0+Poldrack et al. (2017)
遺伝学 GWASr² ≈ 0.001–0.01r² ≈ 0.05+「ポリジェニックスコア」で大量集約

👉 重要:「あなたの分野では何が大か」を確認してから報告する。Cohen の 0.2/0.5/0.8 は「分野不明時のデフォルト」と捉える。

📈 効果量の可視化テクニック

「d = 0.5」と数値で言うより、図にすると一気に伝わります。代表的な 4 つの可視化を紹介。

① 密度プロット重ね合わせ

2 群の分布を半透明で重ね、重なり度合いを目で見せる。d=0.5 だと「重なり 67%」、d=1.0 で「45%」と直感的に伝わります。matplotlib の fill_between または seaborn の kdeplot で実装可。

② Raincloud Plot(雨雲プロット)

バイオリンプロット + 散布ドット + 箱ひげの三位一体。生データ・分布形状・要約統計量を 1 枚で見せる現代的手法。Python では ptitprince パッケージで実装。

③ Forest Plot(メタアナリシス)

複数研究の効果量を信頼区間とともに横棒で並べる。垂直線「0」と比較して「ほぼ全研究が右側 → 一貫した効果」と読める。Python では forestplot、R では metafor::forest()

④ Estimation Plot(Gardner-Altman)

2 群の生データ散布図と、その差分の bootstrap 分布 を並べる。「点推定 + 95% CI」が一目瞭然。Python では dabest パッケージで実装可能。

✅ 実務チェックリスト(拡張版)

① 研究計画フェーズ

② データ収集フェーズ

③ 分析フェーズ

④ 報告フェーズ

⑤ 統合・メタ分析フェーズ

🎯 このページのまとめ

📌 1 ページまとめ

効果量(Effect Size):差や関連の大きさを標準化した、サンプル数非依存の指標。

  • 代表式: Cohen's d = (平均差) / プール SD
  • Cohen の目安: 0.2 (小) / 0.5 (中) / 0.8 (大) — ただし分野依存
  • 族別: d 族(平均差)/ r 族(関連)/ OR 族(確率比)/ δ 族(順序)
  • SSDSE 実値: 東西高齢化率の Cohen's d ≈ -0.235(小〜中、有意でないが効果量はあり)
  • 報告セット: p, 効果量, 95%CI, n の 4 点(APA 7th 標準)
  • 応用: 検出力分析・サンプルサイズ計算・メタアナリシスの中核指標

次のステップ: p 値サンプルサイズブートストラップA/B テスト のページへ進むと、実務応用が完結します。

🧮 SSDSE-B 実値で計算してみる

SSDSE-B-2026(47 都道府県、2023 年)の高齢化率を「東日本 23 県 vs 西日本 24 県」で比較して Cohen's d を求めます。実データなので結果は固定値。

データ出典:SSDSE-B-2026(独立行政法人統計センター)

STEP 1:データ読込と高齢化率の計算

SSDSE-B には「総人口」「65 歳以上人口」が含まれるので、$高齢化率 = 65歳以上 / 総人口$ を作ります。

指標東日本 (n=23)西日本 (n=24)
平均 $\bar{x}$0.31180.3197
標準偏差 $s$0.03620.0307
最大値秋田県 0.3906高知県 0.3634
最小値東京都 0.2275沖縄県 0.2384

STEP 2:プールされた標準偏差

$ s_p = \sqrt{\dfrac{(23-1)(0.0362)^2 + (24-1)(0.0307)^2}{23+24-2}} = \sqrt{\dfrac{22 \cdot 0.001311 + 23 \cdot 0.000942}{45}} \approx 0.0335 $

STEP 3:Cohen's d を計算

$ d = \dfrac{0.3118 - 0.3197}{0.0335} = \dfrac{-0.0079}{0.0335} \approx -0.235 $

STEP 4:解釈

|d|≈0.24 → 「小〜中の効果量」。東日本のほうが西日本よりやや高齢化率が低い方向(東京都・神奈川県・埼玉県などの大都市が東日本に多いことが影響)。検出力分析的には n=47 では p<0.05 になるかどうか微妙なライン(実際 t 検定で p≈0.42)。「有意差なし」だが効果量は中程度という「サンプル不足を効果量が補強する」典型例です。

STEP 5:Hedges' g に補正

$ g = d \cdot \left(1 - \dfrac{3}{4 \cdot 47 - 9}\right) = -0.235 \cdot \left(1 - \dfrac{3}{179}\right) \approx -0.235 \cdot 0.9832 \approx -0.231 $

n=47 と少ないが、補正の影響は約 2% 程度。小標本ほど g/d の差が出ます(n=10 で約 7%、n=4 で約 22%)。

🧮 数式に値を入れて手で計算する — Cohen's d 完全展開

小さな合成データ (各群 5 件、 多様な整数) を Cohen's d の数式に代入し、 Step 1〜4 で計算過程を完全に展開する。 同じ計算を Python (NumPy) で再現し、 手計算と完全一致することを確認する。 本セクションでは効果量の「定義式 → 中間量 → 最終値」を 1 枚で追えるようにしている。

📐 用語の主要数式 (再掲)

$$ d = \frac{\bar{x}_1 - \bar{x}_2}{s_{\text{pooled}}}, \quad s_{\text{pooled}}=\sqrt{\frac{(n_1-1)s_1^2+(n_2-1)s_2^2}{n_1+n_2-2}} $$

Step 1: データ準備 (合成、 多様な整数)

「介入群 (group 1)」と「対照群 (group 2)」の架空のスコア各 5 件。 値はすべて多様な整数で、 1 偏重や同値連続を避けてある。

サンプルgroup 1 (介入)group 2 (対照)
A108
B129
C1410
D117
E1311

Step 2: 群ごとの平均と分散 (不偏分散、 分母 n-1)

項目計算結果
x̄₁(10+12+14+11+13) / 5 = 60 / 512.0
x̄₂(8+9+10+7+11) / 5 = 45 / 59.0
s₁² (n₁-1=4)[(10-12)² + (12-12)² + (14-12)² + (11-12)² + (13-12)²] / 4 = [4+0+4+1+1] / 42.5
s₂² (n₂-1=4)[(8-9)² + (9-9)² + (10-9)² + (7-9)² + (11-9)²] / 4 = [1+0+1+4+4] / 42.5

Step 3: プールされた標準偏差 spooled

項目計算結果
分子 (n₁-1)s₁² + (n₂-1)s₂²4 × 2.5 + 4 × 2.5 = 10 + 1020
分母 n₁ + n₂ - 25 + 5 - 28
プール分散20 / 82.5
spooled√2.51.581139

Step 4: Cohen's d 最終値

項目計算結果
分子 x̄₁ - x̄₂12.0 - 9.03.0
Cohen's d3.0 / 1.5811391.8974
Cohen 基準0.2 / 0.5 / 0.81.90 → 「非常に大きい」

🐍 同じ計算を Python で再現

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
import numpy as np

# Step 1: 合成データ
g1 = np.array([10, 12, 14, 11, 13])
g2 = np.array([8, 9, 10, 7, 11])
n1, n2 = len(g1), len(g2)

# Step 2: 平均と不偏分散
m1, m2 = g1.mean(), g2.mean()
v1, v2 = g1.var(ddof=1), g2.var(ddof=1)
print(f'x̄1 = {m1}, x̄2 = {m2}')
print(f's1^2 = {v1}, s2^2 = {v2}')

# Step 3: プール標準偏差
sp = np.sqrt(((n1-1)*v1 + (n2-1)*v2) / (n1+n2-2))
print(f's_pooled = {sp:.6f}')

# Step 4: Cohen's d
d = (m1 - m2) / sp
print(f"Cohen's d = {d:.4f}")

📤 実行結果

x̄1 = 12.0, x̄2 = 9.0 s1^2 = 2.5, s2^2 = 2.5 s_pooled = 1.581139 Cohen's d = 1.8974

💬 手計算 (Step 4: d = 1.8974) と Python 出力 (1.8974) が小数第 4 位まで完全一致。 spooled = √2.5 = 1.581139 も一致。 d ≈ 1.90 は Cohen 基準 (0.2 小, 0.5 中, 0.8 大) を大きく超え、 「2 群は大きな実質差を持つ」と判断できる。 本ページの SSDSE-B-2026 47 都道府県演習と組み合わせれば、 「定義式 → 合成データでの完全展開 → 実データ応用」の三段階で効果量を体得できる。

🐍 Python 実装

SSDSE-B-2026 を読み、東日本 vs 西日本の Cohen's d を計算する完全コードです。コピペで動きます。

スニペット① Cohen's d ハンド実装

🎯 目的:東日本(北海道〜愛知県)と西日本(三重県〜沖縄県)の高齢化率に Cohen's d で「効果量」の大きさを与える。
📥 入力:data/raw/SSDSE-B-2026.csv(47 都道府県×2018-2023 年、cp932 エンコーディング)。
📤 出力:Cohen's d の数値 1 つ(符号付き)。SSDSE-B-2026 の 2023 年データなら d ≈ -0.235。
💬 ひとこと:効果量はサンプル数に依存しないので、n=47 でも n=47,000 でも同じ尺度。p 値とは独立に「差の大きさ」を測る。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
import pandas as pd
import numpy as np

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=1)
df = df[df['年度'] == 2023].reset_index(drop=True)
df['高齢化率'] = df['65歳以上人口'] / df['総人口']

east_pref = ['北海道','青森県','岩手県','宮城県','秋田県','山形県','福島県',
             '茨城県','栃木県','群馬県','埼玉県','千葉県','東京都','神奈川県',
             '新潟県','富山県','石川県','福井県','山梨県','長野県','岐阜県',
             '静岡県','愛知県']
east = df.loc[df['都道府県'].isin(east_pref), '高齢化率']
west = df.loc[~df['都道府県'].isin(east_pref), '高齢化率']

n1, n2 = len(east), len(west)
s_p = np.sqrt(((n1-1)*east.var() + (n2-1)*west.var()) / (n1+n2-2))
d = (east.mean() - west.mean()) / s_p
print(f"東日本 n={n1}, mean={east.mean():.4f}, sd={east.std():.4f}")
print(f"西日本 n={n2}, mean={west.mean():.4f}, sd={west.std():.4f}")
print(f"Cohen's d = {d:.4f}")
🎯 目的:上のコードを動かしたあとに「実は scipy/pingouin に既製関数がある」事実を確認する。
📥 入力:前のスニペット① と同じ east, west シリーズ。
📤 出力:scipy / pingouin の Cohen's d と Hedges' g(バイアス補正版)。ハンド計算と一致するか確認。
💬 ひとこと:実務では pingouin が圧倒的に楽。pingouin.compute_effsize(east, west, eftype='cohen') の一行で済む。

スニペット② pingouin / scipy 既製関数

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# pip install pingouin
import pandas as pd
import pingouin as pg

# ── この抜粋だけで動くように、east / west を数値の系列として作り直す ──
_e = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=1)
_e = _e[_e['年度'] == 2023].reset_index(drop=True)
for _c in ['総人口', '65歳以上人口']:
    _e[_c] = pd.to_numeric(_e[_c], errors='coerce')
_e['高齢化率'] = _e['65歳以上人口'] / _e['総人口']
_east_pref = ['北海道','青森県','岩手県','宮城県','秋田県','山形県','福島県',
              '茨城県','栃木県','群馬県','埼玉県','千葉県','東京都','神奈川県',
              '新潟県','富山県','石川県','福井県','山梨県','長野県','岐阜県',
              '静岡県','愛知県']
east = _e.loc[_e['都道府県'].isin(_east_pref), '高齢化率']
west = _e.loc[~_e['都道府県'].isin(_east_pref), '高齢化率']

d_pg = pg.compute_effsize(east, west, eftype='cohen')
g_pg = pg.compute_effsize(east, west, eftype='hedges')
print(f"pingouin Cohen's d = {d_pg:.4f}")
print(f"pingouin Hedges' g = {g_pg:.4f}")

# 信頼区間つきの効果量(独立2標本 t)
res = pg.ttest(east, west)
# 列名は pingouin の版で 'p-val'/'cohen-d'/'CI95%' と 'p_val'/'cohen_d'/'CI95' の
# 2 通りがあるので、実際にある列だけを選ぶ
_want = ['T', 'p-val', 'p_val', 'cohen-d', 'cohen_d', 'CI95%', 'CI95']
print(res[[c for c in _want if c in res.columns]])
🎯 目的:η²、相関 r、オッズ比 OR など「複数族」の効果量を 1 ファイルで横並びに計算する。
📥 入力:SSDSE-B のうち(都道府県 × 高齢化率・年少人口比率・東日本フラグ)。
📤 出力:Cohen's d、Hedges' g、相関 r、η²、オッズ比 OR の 5 つの値が辞書として表示。
💬 ひとこと:効果量は「どの族か」を最初に決めれば計算は機械的。論文では複数族を併記するのが理想。

スニペット③ 5 種類の効果量を一括計算

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import pandas as pd, numpy as np
from scipy import stats
import pingouin as pg

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=1)
df = df[df['年度'] == 2023].reset_index(drop=True)
df['高齢化率'] = df['65歳以上人口'] / df['総人口']
df['年少率']   = df['15歳未満人口'] / df['総人口']

east_pref = ['北海道','青森県','岩手県','宮城県','秋田県','山形県','福島県',
             '茨城県','栃木県','群馬県','埼玉県','千葉県','東京都','神奈川県',
             '新潟県','富山県','石川県','福井県','山梨県','長野県','岐阜県',
             '静岡県','愛知県']
df['東日本'] = df['都道府県'].isin(east_pref)
east = df.loc[df['東日本'], '高齢化率']
west = df.loc[~df['東日本'], '高齢化率']

# (a) Cohen's d / Hedges' g
print("Cohen's d =", pg.compute_effsize(east, west, eftype='cohen'))
print("Hedges' g =", pg.compute_effsize(east, west, eftype='hedges'))

# (b) 相関 r(年少率 × 高齢化率)
r, p = stats.pearsonr(df['年少率'], df['高齢化率'])
print(f"相関 r = {r:.4f} (p={p:.3g})")

# (c) η² (一元配置 ANOVA)
groups = [east.values, west.values]
F, p = stats.f_oneway(*groups)
ss_b = sum(len(g)*(g.mean()-df['高齢化率'].mean())**2 for g in groups)
ss_t = sum((df['高齢化率']-df['高齢化率'].mean())**2)
eta2 = ss_b / ss_t
print(f"η² = {eta2:.4f}")

# (d) オッズ比(中央値で2値化)
df['高齢化率_high'] = (df['高齢化率'] >= df['高齢化率'].median()).astype(int)
ct = pd.crosstab(df['東日本'], df['高齢化率_high'])
OR = (ct.iat[0,0]*ct.iat[1,1])/(ct.iat[0,1]*ct.iat[1,0])
print(f"オッズ比 OR = {OR:.4f}")
🎯 目的:Cohen's d の信頼区間 (CI95%) をブートストラップ法で算出し、効果量の不確実性を表現する。
📥 入力:east, west シリーズ。bootstrap 反復回数 B=10000、シード 0。
📤 出力:Cohen's d とその 95% 信頼区間。CI が 0 をまたぐ → 「効果量の方向不確定」。
💬 ひとこと:実務では「点推定 d=0.235, 95%CI=[-0.31, +0.77]」のような形で報告。CI が 0 をまたいで不確かさが大きい例。

スニペット④ ブートストラップ CI

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
import numpy as np
rng = np.random.default_rng(0)

def cohens_d(a, b):
    n1, n2 = len(a), len(b)
    s_p = np.sqrt(((n1-1)*a.var(ddof=1) + (n2-1)*b.var(ddof=1)) / (n1+n2-2))
    return (a.mean() - b.mean()) / s_p

e = east.values
w = west.values
boot_d = []
for _ in range(10000):
    es = rng.choice(e, size=len(e), replace=True)
    ws = rng.choice(w, size=len(w), replace=True)
    boot_d.append(cohens_d(es, ws))
ci = np.percentile(boot_d, [2.5, 97.5])
print(f"点推定 d = {cohens_d(e, w):.4f}")
print(f"95% CI = [{ci[0]:.4f}, {ci[1]:.4f}]")
🎯 目的:Cohen's d を可視化(密度プロット重ね合わせ+差分の影付け)して、d の大きさを直感的に伝える。
📥 入力:east, west シリーズと matplotlib。
📤 出力:東西の高齢化率分布の重なり具合を示すグラフ。出力ファイル effect_size_density.png。
💬 ひとこと:図示で d=0.5 は「分布の重なりが 60% 程度」と直感的に伝わる。論文でも要約図として効果的。

スニペット⑤ 密度プロットで効果量を可視化

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
import matplotlib.pyplot as plt
import numpy as np
from scipy import stats

x = np.linspace(0.2, 0.42, 200)
kde_e = stats.gaussian_kde(east.values)
kde_w = stats.gaussian_kde(west.values)

fig, ax = plt.subplots(figsize=(8, 4.5))
ax.fill_between(x, kde_e(x), alpha=0.4, label=f"東日本 (n={len(east)})", color='#1E88E5')
ax.fill_between(x, kde_w(x), alpha=0.4, label=f"西日本 (n={len(west)})", color='#E53935')
ax.axvline(east.mean(), color='#1E88E5', linestyle='--', alpha=0.7)
ax.axvline(west.mean(), color='#E53935', linestyle='--', alpha=0.7)
ax.set_xlabel('高齢化率')
ax.set_ylabel('密度')
ax.set_title(f"高齢化率の分布: Cohen's d = {cohens_d(east.values, west.values):.3f}")
ax.legend()
plt.tight_layout()
plt.savefig('effect_size_density.png', dpi=150)
🎯 目的:G*Power 相当の検出力分析を Python で行い、d=0.235 を 80% で検出するのに必要な n を逆算する。
📥 入力:想定効果量 d=0.235、有意水準 α=0.05、検出力 1-β=0.80(両側 t 検定)。
📤 出力:必要なサンプルサイズ n_per_group。SSDSE-B の n=23/24 では検出力不足を確認。
💬 ひとこと:n=47 では d=0.235 を検出する検出力はわずか 17%。だから「有意でない」のは「効果量がない」と同義ではない。

スニペット⑥ 検出力分析(必要 n の逆算)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
from statsmodels.stats.power import TTestIndPower

analysis = TTestIndPower()
# 1) 必要なサンプルサイズ
n_required = analysis.solve_power(effect_size=0.235, alpha=0.05, power=0.80,
                                  alternative='two-sided')
print(f"d=0.235 を 80% で検出するのに必要な n = {n_required:.0f} per group")

# 2) 逆に n=23/24 のときの検出力
power_current = analysis.solve_power(effect_size=0.235, nobs1=23, ratio=24/23,
                                     alpha=0.05, alternative='two-sided')
print(f"n=23/24, d=0.235 のときの検出力 = {power_current:.3f}")
🎯 目的:効果量を「2 群間で個人をランダムに選んだとき、どちらが大きいかの確率」(CLES) に変換する。
📥 入力:Cohen's d = -0.235(点推定)と仮定し、正規性を仮定。
📤 出力:CLES = P(東日本 > 西日本) ≈ 43.4%。「ランダム 1 ペアで西日本のほうが大きい」確率が 56.6%。
💬 ひとこと:d だけだと「結局どう大きい?」が伝わりにくい。CLES に変換すると非専門家にも刺さる説明になる。

スニペット⑦ Cohen's d → CLES 変換

 1
 2
 3
 4
 5
 6
 7
from scipy import stats

d = -0.235
# CLES (Common Language Effect Size) = P(X_1 > X_2)
cles = stats.norm.cdf(d / (2 ** 0.5))
print(f"CLES (d={d}) = {cles:.4f}")
print(f"→ ランダムに 1 ペアを選んだとき、東日本のほうが高齢化率が高い確率 = {cles*100:.1f}%")

🐍 Python 実装(拡張版):応用編

基本編に続いて、上級者向け実装パターンを 4 つ追加します。実務でよく要求される機能を網羅します。

🎯 目的:効果量が「臨床的に意味のある最小差 (MCID)」を超えているかを TOST (Two One-Sided Tests) で検証する。
📥 入力:東日本・西日本の高齢化率データと、臨床閾値 ±0.5 SD。
📤 出力:TOST の p 値 2 つ。両方とも p<0.05 なら「等価性が確認できた」と結論。
💬 ひとこと:「差なし」を積極的に証明したいときは equivalence testing。pingouin.tost() で 1 行実装可能。

スニペット⑧ TOST による等価性検定

 1
 2
 3
 4
 5
 6
 7
 8
import pingouin as pg

# 例:東西の高齢化率に「実質的な差はない (|d| < 0.5)」を示したい
# 等価性マージンは 0.5 SD(業務文脈で決める)
result = pg.tost(east, west, bound=0.5 * 0.0335, paired=False)
print(result)
print(f"等価性 p 値 = {result['pval'].max():.4f}")
print("→ p<0.05 なら「両群の差は実質的にゼロ」と主張可")
🎯 目的:対応のあるデザイン(同一県の 2018→2023 年比較)で Cohen's d_z を計算する。
📥 入力:SSDSE-B から 2018 年と 2023 年の高齢化率を都道府県ごとに対応付け。
📤 出力:d_z(対応のある効果量)。「すべての県で 5 年間に高齢化が進んでいるか」を強い検出力で検定。
💬 ひとこと:対応のあるデザインの d_z は通常の d より検出力が高い。同一県の年次変化を観察する自然実験的設定。

スニペット⑨ 対応のある d_z

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
import pandas as pd, numpy as np
from scipy import stats

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=1)
df['高齢化率'] = df['65歳以上人口'] / df['総人口']
pivot = df.pivot_table(index='都道府県', columns='年度', values='高齢化率')

pair_2018 = pivot[2018].dropna()
pair_2023 = pivot[2023].dropna()
common = pair_2018.index.intersection(pair_2023.index)
x18 = pair_2018.loc[common].values
x23 = pair_2023.loc[common].values
diff = x23 - x18

# 対応のある d_z
d_z = diff.mean() / diff.std(ddof=1)
print(f"2018→2023 高齢化率変化: mean={diff.mean():.4f}, sd={diff.std(ddof=1):.4f}")
print(f"Cohen's d_z = {d_z:.4f}")

# 対応のある t 検定
t, p = stats.ttest_rel(x23, x18)
print(f"t = {t:.3f}, p = {p:.3g}")
🎯 目的:ANOVA で η² と partial η² を同時に計算し、効果量の使い分けを学ぶ。
📥 入力:SSDSE-B の高齢化率を 4 地域(北日本・東日本・西日本・南日本)に再分類した群別データ。
📤 出力:F 値、p 値、η²、ω²、partial η²。すべて pingouin で 1 行。
💬 ひとこと:多群比較では η² より ω² がバイアス補正済みで推奨。論文では両方併記が親切。

スニペット⑩ ANOVA + η² / ω²

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import pandas as pd
import pingouin as pg

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=1)
df = df[df['年度'] == 2023].reset_index(drop=True)
df['高齢化率'] = df['65歳以上人口'] / df['総人口']

# 4 地域に分類
north = ['北海道','青森県','岩手県','宮城県','秋田県','山形県','福島県']
east  = ['茨城県','栃木県','群馬県','埼玉県','千葉県','東京都','神奈川県',
         '新潟県','富山県','石川県','福井県','山梨県','長野県']
west  = ['岐阜県','静岡県','愛知県','三重県','滋賀県','京都府','大阪府',
         '兵庫県','奈良県','和歌山県','鳥取県','島根県','岡山県','広島県','山口県']
south = ['徳島県','香川県','愛媛県','高知県','福岡県','佐賀県','長崎県',
         '熊本県','大分県','宮崎県','鹿児島県','沖縄県']

def assign_region(pref):
    if pref in north: return '北日本'
    if pref in east: return '東日本'
    if pref in west: return '西日本'
    if pref in south: return '南日本'
df['region'] = df['都道府県'].apply(assign_region)

aov = pg.anova(data=df, dv='高齢化率', between='region', detailed=True)
print(aov)
print("\npg.anova の出力で 'np2' 列が partial η²")
🎯 目的:ロジスティック回帰での効果量(オッズ比 OR)を 95% CI つきで計算する。
📥 入力:高齢化率の中央値を閾値にした 2 値ラベルと、説明変数(人口・面積)。
📤 出力:ロジスティック回帰のオッズ比と 95% CI。p 値と効果量を統合的に解釈。
💬 ひとこと:ロジスティック回帰では係数 β を exp(β) して OR に変換。CI も exp 変換が必要。

スニペット⑪ ロジスティック回帰の OR

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import pandas as pd
import numpy as np
import statsmodels.api as sm

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=1)
df = df[df['年度'] == 2023].reset_index(drop=True)
df['高齢化率'] = df['65歳以上人口'] / df['総人口']
df['高齢化率_2値'] = (df['高齢化率'] >= df['高齢化率'].median()).astype(int)

# 説明変数を標準化
df['人口_std'] = (df['総人口'] - df['総人口'].mean()) / df['総人口'].std()
X = sm.add_constant(df[['人口_std']])
y = df['高齢化率_2値']

model = sm.Logit(y, X).fit(disp=False)
print(model.summary())

# オッズ比と 95% CI
params = model.params
conf = model.conf_int()
OR_table = pd.DataFrame({
    'OR': np.exp(params),
    'CI95% lower': np.exp(conf[0]),
    'CI95% upper': np.exp(conf[1]),
})
print("\nオッズ比 (OR) と 95% CI:")
print(OR_table)

📖 Cohen を再読する

Jacob Cohen の 1988 年著作『Statistical Power Analysis for the Behavioral Sciences』は古典中の古典です。重要なのは、Cohen 自身が「0.2/0.5/0.8 はあくまで 分野不明時の便宜的目安」と何度も繰り返し書いていること。多くの研究者がこの「但し書き」を読まずに目安を絶対視する誤用が後を絶ちません。

Cohen の警告(1988 序文より要約)

「これらの操作的定義(小/中/大)は、特定の分野で別の確立された基準がない場合にのみ使用すべきである。実際の研究計画では、その分野で典型的に観察される効果量を文献から調査し、それに基づいてサンプルサイズと検出力を決定するのが望ましい。」(Cohen, 1988, p. 25 を要約)

Cohen 以後の重要な拡張

⚠️ よくある落とし穴(5 つ)

効果量で初学者・中級者がハマる典型パターン。すべて論文の査読指摘事項に該当します。

❌ p 値だけで報告して効果量を書かない
サンプル数が大きいと些細な差でも p<0.05。「有意 = 実質的に意味がある」と誤読されるリスク。APA 7th 版以降、心理学では効果量併記が必須化。p, d, 95%CI, n の4 点セットで報告。
❌ Cohen の 0.2/0.5/0.8 目安を絶対視
Cohen 自身が「あくまで便宜的」と書いた目安。臨床・医療では d=0.2 でも臨床的に重要、教育介入では d=0.4 が「大」とされる場合あり。分野ごとの分布を文献で確認。
❌ 群分散が大きく違うのにプール SD を使う
$s_1^2$ と $s_2^2$ が 4 倍以上違うと d の解釈が崩れる。Welch 補正版または Glass's Δ(対照群の SD だけで割る)を検討。Levene 検定で等分散性を事前確認。
❌ 効果量の信頼区間を省略
点推定だけだと「真の d=0.5 かもしれないが、95%CI=[-0.1, +1.1] で 0 をまたぐ」のような重要情報が失われる。pingouin の ttest 関数や bootstrap で必ず CI を併記。
❌ 順序尺度・非正規分布データに無理やり d を適用
Likert 5 件法や歪んだ分布では d が誤誘導しやすい。順序尺度なら Cliff's δ、非正規なら Common Language Effect Size (CLES) や Mann–Whitney 由来の効果量を選ぶ。

🗺 概念マップ

「効果量」を中心に置いて、近接概念を 3 層に分けたマップです。

Effect Size Cohen's d η² (eta squared) 相関 r OR / RR 検出力分析 メタアナリシス
概念効果量とのつながり
外側(応用)メタアナリシス / 検出力分析 / サンプルサイズ計算 / A/B テスト効果量を入力として使う/統合する応用領域。
中核Cohen's d / Hedges' g / η² / 相関 r / OR / RR / Cliff's δ本ページの主役。族ごとに特性が違う。
基礎(前提)平均 / 分散 / 標準偏差 / 標準化 / 標本効果量の計算に必要な基本統計量。

🎓 深掘り:産業事例・比較表・演習

産業事例 6 件

事例 1:医薬品 RCT(製薬業界)
新しい降圧薬の第 III 相試験で、対照群との収縮期血圧の平均差を Cohen's d で報告。d=0.18 で「統計的に有意(p<0.05、n=2,400)」だが、効果量が小さく臨床的意義は限定的。承認判断時に効果量が重要視される。
事例 2:教育介入(EdTech)
オンライン学習プラットフォームが個別化教材の効果検証で、対照群との学力差を Hedges' g で報告。g=0.41(中程度)。文部科学省 EBPM ガイドラインも効果量併記を推奨。
事例 3:A/B テスト(EC)
大手 EC サイトのチェックアウトボタン色変更で、コンバージョン率を OR で測定。OR=1.05 (95%CI=[1.01, 1.09])。サンプル 50 万でやっと検出できる微小効果量。「統計的有意 ≠ 実装すべき」の典型例。
事例 4:心理学メタアナリシス
マインドフルネス介入のうつ症状軽減効果について 100 件の研究をメタアナリシス。重み付き平均 g=0.52、95%CI=[0.45, 0.59]。「中程度の効果量で頑健」と結論。
事例 5:労働経済学(DID 分析)
最低賃金改定の雇用効果を Difference-in-Differences で推定。標準化係数 β=0.08(小〜中程度)。政策評価で「効果量の現実的意味」を首相官邸資料が議論。
事例 6:UX 研究(ゲーム開発)
大手ゲーム会社が新 UI のユーザー満足度を旧 UI との比較で評価。Likert 5 件法のため Cliff's δ=0.31 を報告(中程度)。Cohen's d ではなく順序尺度向けの効果量を選択した好例。

比較表:5 つの効果量の使い分け

指標データ型主な利用分野
Cohen's d連続・2 群0.20.50.8心理学・教育・社会調査
Hedges' g連続・2 群(小標本)0.20.50.8メタアナリシス・医療
η²連続・多群(ANOVA)0.010.060.14実験心理学・生物学
相関 r連続 × 連続0.10.30.5社会調査・経済学
OR2 値 × 2 値1.52.54.0疫学・臨床医学
Cliff's δ順序尺度0.1470.330.474UX・アンケート

演習問題 5 問

問 1: 群 A(n=30, mean=70, sd=10)と群 B(n=30, mean=65, sd=12)の Cohen's d を手計算しなさい。
答えを表示
$s_p = \sqrt{(29 \cdot 100 + 29 \cdot 144)/58} = \sqrt{122} \approx 11.05$。$d = (70-65)/11.05 \approx 0.45$(中程度)。
問 2: n=10 の極小データで d=0.6 と出た。Hedges' g に補正するといくらか?
答えを表示
$g = 0.6 \cdot (1 - 3/(4 \cdot 20 - 9)) = 0.6 \cdot (1 - 3/71) = 0.6 \cdot 0.9577 \approx 0.575$。小標本ほど補正の影響大。
問 3: SSDSE-B-2026 で「年少人口比率」を東西比較すると、東日本平均 0.110、西日本平均 0.120、両群 sd≈0.010、n=23/24。Cohen's d は?
答えを表示
平均差 -0.010 を pooled sd ≈0.0095 で割ると d≈-1.04。西日本の方が年少人口比率が高く、大きな効果量。ページ上部の総当たり表(年少人口率 d=-1.037)とも一致する。
問 4: 2x2 表 [[40, 10], [20, 30]] のオッズ比 OR を計算し、強さを評価せよ。
答えを表示
$OR = (40 \cdot 30)/(10 \cdot 20) = 1200/200 = 6.0$。Cohen の目安 4.0 を超えるので「大」。
問 5: 「サンプル数 n=10,000 で d=0.05、p<0.001」と「n=20 で d=0.6、p=0.04」。どちらを採用すべきか?
答えを表示
「d=0.6, n=20」のほうが実質的に意味のある差。「d=0.05」は統計的に検出できるが実用的意義はほぼなし。効果量で判断するのが正解。

失敗例:効果量を巡る統計トラブル

失敗例(実例):
ある製薬メーカーが新薬の効能を「p<0.001 の統計的有意差を確認」とプレスリリース。後日、効果量 d=0.07 と判明し、臨床的にはほとんど意味がないと専門誌で批判された。記者会見では「効果量 d=0.07 (95%CI=[0.04, 0.10])」と併記すべきだった。CONSORT ガイドラインも効果量併記を必須化(2010 改訂)。

用語辞典(10 語)

効果量(Effect Size, ES):差・関連の大きさを標準化した指標の総称。p 値とは独立。
Cohen's d:2 群の平均差をプール SD で割った指標。最も普及している効果量。
Hedges' g:Cohen's d の小標本バイアス補正版。n<20 で必須。
Glass's Δ:対照群の SD だけで割った指標。等分散性が崩れているとき有用。
η²(イータ二乗):ANOVA の分散説明率。$SS_{between}/SS_{total}$。
ω²(オメガ二乗):η² の不偏推定版。小標本でやや小さく出る。
Cliff's δ:順序尺度向け効果量。「群 1 のほうが大きい確率」の差。
CLES (Common Language Effect Size):「群 1 がランダムに選ばれた個人を超える確率」。
オッズ比 (OR):2x2 表で計算する確率比。$OR=1$ なら関連なし。
NNT (Number Needed to Treat):「1 人助けるのに何人治療する必要があるか」。臨床効果量。

参考文献

📊 研究フロー:効果量を埋め込んだ分析パイプライン

効果量は単独で使うものではなく、研究設計から報告までのパイプラインに組み込みます。下表は典型的なフローです。

フェーズ作業効果量の役割
1. 計画研究設計、仮説、検出力分析期待する効果量からサンプルサイズを逆算
2. 予備分析パイロット試験 (n≈20)予備的な効果量推定と CI 幅で本試験 n を再計算
3. データ収集本試験データの取得予定 n をそろえる(途中で覗かない)
4. 本分析t 検定、ANOVA、回帰など必ず効果量 + CI を併記
5. 報告論文、社内レポート、プレス「p, d, CI, n」の 4 点セット。視覚化(密度プロット)も推奨
6. 統合メタアナリシス、レビュー他研究の効果量と統合。Hedges' g + 重み付き平均

「期待効果量」の決め方

研究計画時に「いくつの d を想定するか」は悩ましい問題です。アプローチは 3 つ:

  1. 過去のメタアナリシスを参照する。同じ介入の平均効果量。
  2. パイロット試験を実施し、その効果量から本試験を計画。
  3. 最小臨床的に意味のある差 (MCID) を定義し、それを d に換算。

パイロットの効果量は過大評価バイアスがあることが知られているので、信頼区間下限を採用する保守的な計画が推奨されます。

📝 レポート・論文での書き方

効果量を含む結果の書き方は APA 7thCONSORT 2010 が事実上の標準です。本ページの SSDSE-B 例で具体例を示します。

悪い書き方(NG 例)

「東日本と西日本の高齢化率を比較した結果、有意な差は見られなかった (p=0.42)。」
効果量も信頼区間もサンプルサイズも書かれていない。「差が小さい」と「差を検出できなかった」の区別がつかない。

良い書き方(OK 例)

「東日本 (n=23, M=0.312, SD=0.036) と西日本 (n=24, M=0.320, SD=0.031) の高齢化率を独立 2 標本 t 検定で比較したところ、統計的に有意な差は検出されなかった (t(45)=-0.81, p=0.421)。一方、Cohen's d=-0.235 (95% CI=[-0.81, +0.34], bootstrap) は 小〜中程度の効果量に相当し、サンプルサイズの制約により検出力が低い (post-hoc power=0.17) ことから、より大きなサンプルでの再検証が必要である。」
p, d, CI, n, post-hoc power が網羅され、「差がない」ではなく「検出力不足」を正しく表現。

必須記載項目チェックリスト

項目SSDSE-B 例
データ出典SSDSE-B-2026(独立行政法人統計センター)
サンプルサイズ nn=47(東 23, 西 24)、2023 年
記述統計M=0.312/0.320, SD=0.036/0.031
検定統計量と p 値t(45)=-0.81, p=0.421
効果量と CId=-0.235, 95%CI=[-0.81, +0.34]
事後検出力post-hoc power=0.17(不足)
結論検出力不足のため再検証必要

📜 歴史的背景と発展

効果量の概念は、Jacob Cohen が 1962 年の論文「The statistical power of abnormal-social psychological research」で「心理学論文の検出力が低すぎる」と警鐘を鳴らしたことから発展しました。Cohen は同年の American Psychological Association の年次大会でも報告し、その後 1969 年・1977 年・1988 年と版を重ねた著書『Statistical Power Analysis for the Behavioral Sciences』で体系化されました。

なぜ効果量が必要だったか

1960 年代の心理学・社会科学は「p<0.05 を超えれば論文掲載」というp 値万能主義に陥っていました。Cohen は「サンプル数を増やせば些細な差でも有意になる」「逆にサンプル数が少なければ重要な差も見逃す」というサンプルサイズへの依存性を批判し、「差の大きさ」を独立に測る指標を提案しました。これが Cohen's d の起源です。

メタアナリシスの登場

1976 年に Gene Glass が「effect size」という名称を初めて使用し、複数の研究結果を効果量で統合する「メタアナリシス」の手法を提案しました。Glass の弟子の Larry Hedges は Cohen's d の小標本バイアスを補正した Hedges' g を 1981 年に発表。これによりメタアナリシスが標準化されました。

21 世紀の標準化

2000 年代に入ると、APA(American Psychological Association)が 2010 年の APA 6th で「効果量と信頼区間の報告を強く推奨」と明記。2020 年の 7th ではほぼ必須化されました。医学分野では CONSORT 2010 ガイドライン、教育分野では What Works Clearinghouse 基準が効果量併記を要求。経済学では 2019 年の American Economic Review が効果量と検出力の報告を推奨する編集方針を公表しました。

再現性危機との関連

2010 年代の「再現性危機 (Reproducibility Crisis)」では、心理学・医学・経済学で多くの有名な研究が再現できないことが暴露されました。原因の 1 つは「効果量を考慮せず、p<0.05 だけで論文化していた」こと。Open Science Collaboration (2015) の調査では「初回研究 d=0.42 vs 再現研究 d=0.20」と効果量が約半分に縮小していました。これを契機に 事前登録 (preregistration)レジスター付き報告効果量の厳密報告が新標準として広まりました。

❓ よくある質問 (FAQ)

Q1. 効果量と p 値、どちらを優先すべき?
A. 両方です。p 値は「偶然で出る確率」、効果量は「差の大きさ」と役割が違います。APA / CONSORT は両方併記を要求。「効果量が大きく、p<0.05」が理想で、「効果量小, p<0.05」「効果量大, p>0.05」はそれぞれ別の解釈が必要です。
Q2. d=0.2 は本当に「小さい」のか?
A. Cohen 自身が「あくまで便宜」と書いている目安。医療では d=0.2 でも「臨床的に重要」となることがあり、教育では d=0.4 が「大」とされる場合も。分野の文献を見て相対化するのが正解。Funder & Ozer (2019) は「心理学では d=0.4 が大、0.2 が中」と新基準を提案。
Q3. n=10 のような小標本でも効果量を計算してよい?
A. 計算は OK ですが、必ず Hedges' g(バイアス補正版)を使い、信頼区間を併記しましょう。n=10 だと d の CI 幅が ±0.9 程度になり、点推定 d=0.5 でも「真値は -0.4 から +1.4 の間」となります。精度の低さを CI で正直に表現するのが重要。
Q4. 効果量を相関 r と d の間で変換できる?
A. はい。$r = d/\sqrt{d^2 + 4}$、$d = 2r/\sqrt{1-r^2}$ で相互変換できます。d=0.5 → r≈0.243、r=0.3 → d≈0.629。メタアナリシスで異なる尺度の研究を統合する際に使われます。
Q5. 効果量が大きいと因果関係も強い?
A. 違います。効果量は「観察された差・関連の大きさ」を測るだけで、因果関係を主張するには別の道具(RCT、操作変数、回帰不連続など)が必要。因果関係 ページを参照。
Q6. 効果量が非常に小さい (d≈0.01) でも報告すべき?
A. 大規模調査・大規模疫学では d=0.01 でも「人口レベル」では大きな影響を持つ場合があります。たとえば「全人口 1.2 億の血圧を 1 mmHg 下げる」介入は d=0.07 でも社会的便益は大。「効果量小 = 無意味」とは限らない、文脈次第です。
Q7. 効果量の論文での表記法は?
A. APA 7th 推奨:「t(45) = -0.81, p = .421, Cohen's d = -0.235, 95% CI [-0.81, +0.34]」のように、検定統計量・p 値・効果量・CI をすべて併記。イタリック体・ピリオドの数等号の前後スペースに注意。
Q8. Cohen's d と Hedges' g、どちらを使うべき?
A. 原則 g。Hedges' g は小標本バイアスを補正した不偏推定で、n が大きければ d と一致するので「最初から g」が安全。pingouin の eftype='hedges' で計算可。

💼 実務での実例ストーリー

ストーリー A:新薬の有効性報告

製薬会社で第 III 相試験の解析担当になったとします。新降圧薬 A と既存薬 B の収縮期血圧低下効果を比較。n=2,400 で平均差 1.8 mmHg、SD≈12 → d=0.15。「統計的には有意 (p<0.001) だが効果量は小」と報告する必要があります。臨床的意義の閾値(多くの場合 d=0.2 = MCID)を下回るため、規制当局への申請では「優位性ではなく非劣性」として位置づけることに。効果量を見ずに「有意差あり」とだけ書くと、後で誇大広告として叩かれます。

ストーリー B:教育介入の効果

EdTech 企業のアナリストとして「AI 個別指導の学力向上効果」を計測したとします。RCT で介入群 vs 対照群、n=500 ずつ、学力テストで介入群 +6.2 点 (SD≈18)。d ≈ 0.34 (95%CI=[0.21, 0.47])。教育分野の Hattie (2009) メタアナリシス基準では「中程度の効果」。これを Excel 表の数字だけで上司に報告するのではなく、「Cohen's d=0.34 [0.21, 0.47] で中程度の効果。本データから判断すると、AI 介入による学力向上は頑健に存在し、6 か月以内の B2B 製品化を支持」と意思決定の文脈に翻訳します。

ストーリー C:A/B テストでの判断

EC サイトの A/B テストで「カートボタンの色変更」がコンバージョン率 (CVR) を上げるか検証。n=100,000 で p<0.001 だが OR=1.04 (CVR +0.2%)。「効果量が小さくて実装コストに見合わない」と判断し、別の改善案 (UX 全面刷新) にリソースを振る決断ができます。「p<0.05 だから実装」ではなく、「効果量とコストのバランス」で意思決定するのがプロのデータサイエンティスト。

ストーリー D:因果推論との接続

最低賃金引き上げが雇用に与える影響を Difference-in-Differences で推定。介入後の雇用率変化 β=-0.08(標準化係数)。「効果量小〜中」と読むだけでなく、「10 万人雇用への翻訳」を必ず行います:「全国 5,000 万人就業者に展開すると 40 万人雇用減に相当」。標準化された数値実数の両方を提示するのが政策提言の鉄則。

effect size メタアナリシス Q 統計量 τ² τ Funnel plot

🔗 隣接手法への橋渡し

効果量は単独の指標ではなく、 p 値 ・信頼区間 ・サンプルサイズ計算と組み合わせて初めて意思決定に使える数値になる。 メタ分析や実務的判断では効果量が主役、 p 値は補助という関係を意識する。

効果量は「差の大きさそのものを定量化する指標」で、 上流の研究設計でサンプルサイズと連動して決め、 並列の p 値・信頼区間と組み合わせ、 下流のメタ分析・実務的意思決定で実質的な意味づけを担う。

🌳 手法選択フロー

効果量を主指標にするかは「サンプルサイズ・統計的判断 vs 実務的判断・メタ分析統合可能性」の 3 軸で決まる。 N が大きい場合や複数研究を統合したい場合は p 値より効果量を中心に置く。

  1. サンプルサイズはどれくらいか
    n が大きいほど、 実務的に無意味な差でも p は小さくなる。 n=47 の都道府県データでも、 相関 0.3 程度で有意になる。 大きさは効果量でしか語れない。
  2. どの効果量を使うか
    2 群の平均差なら Cohen の d、 相関なら r、 回帰なら $R^2$ や標準化係数、 分割表ならオッズ比やクラメールの V。 指標の種類を先に決める。
  3. 目安をそのまま当てはめてよいか
    d = 0.2 / 0.5 / 0.8 は分野をまたいだ経験則にすぎない。 扱う分野で「どれくらいの差が実務的に意味を持つか」を先に決めておくほうが有用。
  4. 信頼区間を付けたか
    効果量も推定値なので幅がある。 点推定だけを報告すると、 小標本の不確かさが消えてしまう。

SSDSE-B-2026 で「東日本と西日本で平均消費支出が違う」かを問う際、 p 値だけでは N が大きいと有意になりやすいため、 Cohen's d や η² で差の実質的大きさを併記する習慣が分析の信頼性を高める。

🔬 解説を一歩深く — 効果量は「差の大きさを測る共通通貨」

この追補は既存の解説・実測値・コード・ウィジェットを一切変更せず、末尾に足したものです。姉妹ページ(p値は「H₀ のもとでの確率」、検出力は「勝者の呪い/Type M・S」)と重複しない角度として、ここでは「同じ効果を d・r・η² という別通貨で言い換える」相互変換と、連続量を 2 群に切ると効果量が目減りするという効果量固有の落とし穴を、SSDSE-B-2026 の実測値で扱います。

🧭 直感 — 効果量は「差 ÷ ばらつき = 標準偏差いくつ分」

効果量の共通の骨格は「注目している差や関連を、データのばらつき(標準偏差)で割って無単位にする」ことです。だから元の単位(円・人・℃)が何であっても比較でき、単位に依存しない代わりにどのばらつきで割るかが意味を持ちます。ポイントは、一つの関係を d でも r でも η² でも表せる——通貨が違うだけで中身は同じ、という点です。

【実測・2023 年・47 都道府県】年平均気温(B4101)× 合計特殊出生率(A4103)
相関 r = 0.502(両側 p = 0.00033、有意)。同じ関係を通貨換算すると: どれも同じ強さを別の物差しで読んだだけ。「r は中くらいなのに d は大きい」という直感は誤りで、変換式で一意に結ばれた同一の量です。

※ この相関自体は因果ではなく、西日本・地方ほど気温が高く出生率も高いといった交絡が疑われます(→ 相関係数)。ここでは「効果量という物差しの読み方」に話を限定しています。

⚠️ 落とし穴(重要)— 連続量を「2 群」に切ると、効果量も有意性も溶ける

「気温が高い群 vs 低い群」のように連続量を中央値で 2 分割してから比べると直感的に見えますが、その代償として効果量が系統的に目減りし、時に有意性まで失います。上と同じ実データで確かめます。

【実測】気温を中央値 17.4℃ で 2 群化 → 出生率を比較
暖地群(n=21, 平均 1.331)vs 寒地群(n=26, 平均 1.262)、プール SD = 0.130
Cohen's d = 0.53(中)、点双列相関 r = 0.260、t 検定 p = 0.077(非有意)
連続のまま:r = 0.502(説明率 25%、p = 0.0003)
2 群化後 :r = 0.260(説明率 6.8%、p = 0.077)
→ 関連の説明力が約 1/4に縮み、有意だった関係が非有意に転落した。

情報を捨てた(各県の気温の実数値を「上/下」の 1 ビットに丸めた)分だけ、測れる効果量が小さくなったのです。これは「p が大きい=差がない」でも「d が小さい=効果がない」でもなく、分析設計(連続を離散化した)が効果量を目減りさせたという第 3 の原因です。連続量はできるだけ連続のまま扱うのが効果量を守る原則です。下のウィジェットで分割点を動かすと、切り方しだいで効果量がさらに揺れることも体感できます。

おまけの注意:この 2 群化した d ですら「どの SD で割るか」で数字が動きます。同じ差を暖地群 SD で割ると d = 0.48、寒地群 SD で割ると d = 0.59、プール SD で 0.53 ——「大/中」の線をまたぐこともあります(分母の選択については本文の ⚠️ よくある落とし穴 の Glass's Δ も参照)。

🎛 二値化スライダー(実データ 47 点・分割点をドラッグ)
縦の破線=分割点。青=寒地群/赤=暖地群。連続 r は分割に関係なく 0.502 で一定。点の横位置には表示用のわずかな決定論的ゆらぎ(seed 固定)を加えています。

🚀 発展 — 目減りを防ぐ・歪みに強い効果量へ

🔗 関連ページ