医療統計学・医療情報学・遠隔医療 · 07
比率の比較 — χ²検定・Fisher正確検定・比率差の信頼区間
Comparing Proportions: Chi-Square, Fisher's Exact Test, and the CI for a Difference
🧠 全体像:2群の比率を比べる問題は、すべて分割表に落ちる。χ²検定は「H0(無関連)のもとで期待される度数」と「実際の度数」のずれを1つの数に要約する近似の検定、Fisher正確検定Fisher exact test Fisher正確検定(Fisher exact test)Fisher exact test(Fisher正確検定) はその正確版である。ただしどちらの検定も p値しか返さない。効果の大きさも向きも教えてくれない。 だから必ず比率の差とその信頼区間 confidence interval信頼区間(confidence interval) confidence interval(信頼区間)を併せて出す。
問いの立て方
問い:脳卒中の発生は糖尿病の有無と関連するか。糖尿病患者では脳卒中が多いのか、少ないのか。
| 項目 | 内容 |
|---|---|
| H0 | 糖尿病あり群となし群で脳卒中の割合に差はない。 |
| H1 | 差がある。 |
| 効果量 | 2つの比率の差 |
| relevance | 2%ポイントの差を臨床的に意味ありとする |
| 有意水準significance level有意水準(significance level)significance level(有意水準) | (信頼水準confidence level信頼水準(confidence level)confidence level(信頼水準) ) |
| 標本 | Framingham 心臓研究からの 3263例。独立変数 variables変数(variables) variables(変数) = 糖尿病、従属変数 variables変数(variables) variables(変数) = 脳卒中 |
「独立変数・従属変数」という呼び方が持ち込むもの
問いの立て方そのものが「脳卒中が従属変数 variables変数(variables) variables(変数)、糖尿病が独立変数 variables変数(variables) variables(変数)」という向きを含んでいる。しかしその向きを決めているのは統計ではなく、臨床・生理・病理の予備知識である(糖尿病は慢性の状態、脳卒中は急性のイベント、という順序の知識)。
⚠️ 仮説検定それ自体は因果を判定できない。 検定が示せるのは相関・(直接または間接の)依存関係だけである。分割表を左右どちらに置き換えても χ² 値は同じ値になることが、この事実を端的に表している。→ 相関と回帰、交絡confounding 交絡(confounding)confounding(交絡) と重回帰 multiple regression重回帰(multiple regression) multiple regression(重回帰)
まず記述統計を見る
⭐ 検定に進む前に、必ず分割表と棒グラフを描く。ここで効果の大きさと向きが分かり、検定は「その大きさが偶然 chance 偶然(chance) chance(偶然) で説明できるか」を後から確かめるだけになる。
| 見るもの | 何が分かるか |
|---|---|
| 度数の棒グラフ | 2群の人数number of people 人数(number of people)number of people(人数) の偏り(糖尿病あり群はずっと少数である) |
| 割合(%)の棒グラフ | 比率の差そのもの。ここで relevance の判定ができる |
| 分割表(列%付き) | 実数と割合を同時に。周辺和も確認する |
💡 度数のグラフと割合のグラフの両方を見ることに意味がある。人数number of people 人数(number of people)number of people(人数) の少ない群は割合の推定が不安定(SE が大きい)なので、割合のグラフだけ見ると差が確からしく見えすぎる。
分割表の基本形は次のとおり。列に独立変数 variables 変数(variables) variables(変数) (曝露)、行に従属変数 variables 変数(variables) variables(変数) (アウトカムall-or-none outcomesアウトカム(all-or-none outcomes)all-or-none outcomes(アウトカム))を置き、列ごとに%を計算する(=各曝露群 exposed group 曝露群(exposed group) exposed group(曝露群) の中でのアウトカム all-or-none outcomes アウトカム(all-or-none outcomes) all-or-none outcomes(アウトカム) 割合になる)。
| 糖尿病なし | 糖尿病あり | 合計 | |
|---|---|---|---|
| 脳卒中あり | |||
| 脳卒中なし | |||
| 合計 |
⚠️ どちらの方向で % を取るかで、まったく違う数字が出る。 列%(曝露群exposed group 曝露群(exposed group)exposed group(曝露群) ごとのアウトカム all-or-none outcomes アウトカム(all-or-none outcomes) all-or-none outcomes(アウトカム) 割合)と行%(アウトカムall-or-none outcomes アウトカム(all-or-none outcomes)all-or-none outcomes(アウトカム) 群ごとの曝露割合)は別物である。臨床的に意味があるのはふつう前者だが、症例対照研究case-control study 症例対照研究(case-control study)case-control study(症例対照研究) では後者しか計算できない。
χ²検定
何を計算しているか
H0(2つの変数 variables 変数(variables) variables(変数) が独立)が正しければ、各セルの度数は周辺和から予測できる。第 行・第 列の期待度数 expected frequency期待度数(expected frequency) expected frequency(期待度数) と検定統計量 test statistic 検定統計量(test statistic) test statistic(検定統計量) は次のとおり。
ここで は観測度数 observed frequency観測度数(observed frequency) observed frequency(観測度数)、 は行の合計、 は列の合計、・ は行数・列数である。
💡 を で割るのがポイントである。期待度数expected frequency 期待度数(expected frequency)expected frequency(期待度数) が大きいセルでは、同じ絶対的 absolute 絶対的(absolute) absolute(絶対的) なずれでも「驚き」は小さい。ずれを、そのセルで予想されるゆらぎの大きさで規格 available strengths 規格(available strengths) available strengths(規格) 化している。
χ² 分布は常に右に裾を引き、自由度degrees of freedom 自由度(degrees of freedom)degrees of freedom(自由度) が大きくなるほど歪みが減って正規分布 Gaussian/normal distribution 正規分布(Gaussian/normal distribution) Gaussian/normal distribution(正規分布) に近づく。、。
⚠️ χ²検定は両側・片側の区別を持たない。χ² 値はずれを二乗しているので向きの情報が消えており、棄却域rejection region 棄却域(rejection region)rejection region(棄却域) は常に分布の右端だけである。「差がある」ことしか分からず、「どちらが大きいか」は分割表を見なければ分からない。
2種類の χ²検定
| 適合度検定goodness of fit適合度検定(goodness of fit)goodness of fit(適合度検定) | 独立性の検定test of independence 独立性の検定(test of independence)test of independence(独立性の検定) (test for independence) | |
|---|---|---|
| 何を問うか | 未知の分布が既知の分布と等しいか | 2つ以上の分布が等しいか(=2変数 variables 変数(variables) variables(変数) が独立か) |
| 変数variables 変数(variables)variables(変数) の数 | 1変数 variables変数(variables) variables(変数) | 2つのカテゴリ変数 variables変数(variables) variables(変数) |
| 例 | ある病院の血液型分布は全国の分布と同じか | 脳卒中の割合は糖尿病の有無で違うか |
使用条件 — 「小標本では使えない」は正確でない
条件は標本サイズsample size 標本サイズ(sample size)sample size(標本サイズ) ではなく、期待度数expected frequency期待度数(expected frequency)expected frequency(期待度数)についての規則である。
期待度数expected frequency 期待度数(expected frequency)expected frequency(期待度数) が 1 未満のセルが1つもなく、かつ 5 未満のセルが全体の 20%(1/5)以下であること。
⚠️ これは「n が小さいときは Fisher」という要約とは違う。 n = 3000 の大標本でも、曝露が非常にまれ(例: 2例)でアウトカム all-or-none outcomes アウトカム(all-or-none outcomes) all-or-none outcomes(アウトカム) もまれなら、期待度数expected frequency 期待度数(expected frequency)expected frequency(期待度数) が 5 を下回るセルは出る。逆に n = 40 でも、4セルにバランスよく分かれていれば期待度数 expected frequency 期待度数(expected frequency) expected frequency(期待度数) はすべて 10 になり、χ²検定の条件を満たす。判定するのは n ではなく、出力に表示される期待度数 expected frequency 期待度数(expected frequency) expected frequency(期待度数) の表である。
💡 条件が観測度数observed frequency 観測度数(observed frequency)observed frequency(観測度数) ではなく期待度数 expected frequency期待度数(expected frequency) expected frequency(期待度数)について書かれているのは、χ² 統計量の分母が だからである。 が小さいと が不安定に暴れ、統計量が χ² 分布に従うという近似が壊れる。
2×2 表の場合、多くのソフトウェアは既定で Yates の連続性補正 continuity correction連続性補正(continuity correction) continuity correction(連続性補正)をかける。これは χ² 値を小さくして保守的にする補正だが、必要以上に検出力を落とすため、期待度数expected frequency 期待度数(expected frequency)expected frequency(期待度数) がすべて 1 以上なら補正しないほうがよいとされる1。同じ表なのに教科書と出力で p値が違うときは、まずこの補正の有無を疑う。
Fisher 正確検定
何が「正確」なのか
χ²検定は「検定統計量test statistic 検定統計量(test statistic)test statistic(検定統計量) が χ² 分布に従う」という近似にもとづく。Fisher 正確検定は近似を使わず、周辺和を固定したもとで、観測された表と同じかそれ以上に偏った表が生じる確率を超幾何分布 hypergeometric distribution 超幾何分布(hypergeometric distribution) hypergeometric distribution(超幾何分布) から直接足し上げる。したがって p値は近似ではなく厳密に計算される。
| χ²検定 | Fisher 正確検定 | |
|---|---|---|
| p値 | 近似 | 正確 |
| 計算量 | 軽い | 重い(表が大きいと現実的でなくなる) |
| 期待度数expected frequency 期待度数(expected frequency)expected frequency(期待度数) の条件 | 必要 | 不要 |
| 使えるとき | 期待度数expected frequency 期待度数(expected frequency)expected frequency(期待度数) の条件を満たすとき | いつでも使える |
「小標本のとき Fisher」という言い方の何が足りないか
正しい条件は「χ²検定の期待度数 expected frequency 期待度数(expected frequency) expected frequency(期待度数) の条件を満たさないとき」である。すなわち期待度数 expected frequency 期待度数(expected frequency) expected frequency(期待度数) が 1 未満のセルがある、または期待度数 expected frequency期待度数(expected frequency) expected frequency(期待度数) 5 未満のセルが 20% を超えるときに Fisher に切り替える。標本サイズsample size 標本サイズ(sample size)sample size(標本サイズ) はその間接的な指標にすぎない。
⚠️ さらに、Fisher 正確検定は保守的である。周辺和を固定するという条件付けのため、実際の第1種の過誤 type I error 第1種の過誤(type I error) type I error(第1種の過誤) の確率は をしばしば大きく下回り、そのぶん検出力を失う。2×2 表では、期待度数expected frequency 期待度数(expected frequency)expected frequency(期待度数) がすべて 1 以上なら 補正を加えた Pearson χ²検定、すなわち
のほうが望ましく、Fisher は期待度数 expected frequency期待度数(expected frequency) expected frequency(期待度数) 1 未満のセルがある場合に限るべきだとされる1。
⭐ 試験では「期待度数expected frequency 期待度数(expected frequency)expected frequency(期待度数) の条件を満たさないとき Fisher」と答えれば足りる。ただし「Fisher = 常により正しい」ではなく「Fisher = 近似を使わない代わりに保守的」という理解を持っておく。
効果量 — 検定の前に決まっているもの
⚠️ χ²検定も Fisher 正確検定も、返すのは p値だけである。 効果がどれくらい大きいかも、どちらの群が高いかも教えてくれない。だから p値のみを報告することは許されず、効果量と推定の精度(信頼区間confidence interval信頼区間(confidence interval)confidence interval(信頼区間))を併せて示す必要がある2。2×2 表から効果量を出す方法は複数あり、どれを使うかで印象が大きく変わる。
| 効果量 | 定義 | 性質 |
|---|---|---|
| 比率の差(リスク差risk differenceリスク差(risk difference)risk difference(リスク差) / 絶対リスク減少absolute risk reduction絶対リスク減少(absolute risk reduction)absolute risk reduction(絶対リスク減少)) | 臨床判断に直結する。 | |
| リスク比risk ratio リスク比(risk ratio)risk ratio(リスク比) (相対リスクrelative risk, RR相対リスク(relative risk, RR)relative risk, RR(相対リスク), RR) | 比なので、ベースラインが小さいと差が小さくても大きく見える | |
| オッズ比odds ratio, OR オッズ比(odds ratio, OR)odds ratio, OR(オッズ比) (OR) | 症例対照研究case-control study 症例対照研究(case-control study)case-control study(症例対照研究) でも計算できる。アウトカムall-or-none outcomes アウトカム(all-or-none outcomes)all-or-none outcomes(アウトカム) が頻繁だと OR は RR より大きく出る |
オッズ比odds ratio, OR オッズ比(odds ratio, OR)odds ratio, OR(オッズ比) をリスク比 risk ratio リスク比(risk ratio) risk ratio(リスク比) として読まない。 アウトカムall-or-none outcomes アウトカム(all-or-none outcomes)all-or-none outcomes(アウトカム) が 10% を超えるようになると OR は RR から系統的に離れ、効果を誇張する方向にずれる。詳しくは 疫学指標 と リスクの推定 を参照。相対的な表現がどれほど印象を左右するかについては 治療のリスクの伝え方 も参照。
比率の差の信頼区間
⭐ これが検定の結論 conclusion 結論(conclusion) conclusion(結論) を臨床の言葉に翻訳する部分である。 実習が扱うのは2つの比率の差で、その 95% 信頼区間confidence interval 信頼区間(confidence interval)confidence interval(信頼区間) を出す。2群が独立なので分散が足し算になることがポイントである。
💡 根号の中が2項の和になっているのは、2群それぞれの推定の不確かさが独立に効くからである。片方の群の n がいくら大きくても、もう片方が小さければ区間は狭くならない。この Wald 型の式は が 0 や 1 に近いと壊れるので、そのときは Newcombe 法などを使う(→ 標本抽出sampling 標本抽出(sampling)sampling(標本抽出) と推定)。
判断の仕方は2通りあり、必ず一致する。
- 信頼区間confidence interval 信頼区間(confidence interval)confidence interval(信頼区間) による判断:H0 が正しければ差は 0 である。区間が 0 を含まなければ H0 を棄却する
- p値による判断: なら H0 を棄却する
さらにもう1段、臨床的relevance の判断が加わる。
- 区間の位置と relevance の閾値を比べる。区間全体が閾値(ここでは 2%ポイント)を超えていれば、「差は実在し、かつ臨床的に意味がある」と言い切れる
| 区間の位置 | 読み方 |
|---|---|
| 区間全体が relevance 閾値の外側 | 有意かつ relevant。最も強い結論 conclusion結論(conclusion) conclusion(結論) |
| 区間は 0 を含まないが、閾値をまたぐ | 有意だが、relevant な差かどうかは決まっていない |
| 区間が 0 を含み、かつ狭い | 有意でなく、意味のある差も実質的に否定できる |
| 区間が 0 を含み、かつ広い | 有意でないが、何も決まっていない(→ 仮説検定の論理) |
実習の結果を読む
| 出力 | 値 |
|---|---|
| 比率の差(効果量) | 14.5%ポイント |
| relevance の閾値 | 2%ポイント |
| 差の 95% 信頼区間confidence interval信頼区間(confidence interval)confidence interval(信頼区間) | 9.3% 〜 19.7% |
| χ² 値() | |
| χ²検定の p値 | |
| Fisher 正確検定の p値 |
💡 出力を読む順序
- 効果量 — 14.5%ポイントの差。糖尿病群のほうが脳卒中が多い
- 臨床的relevance — 閾値 2%ポイントを大きく超える。relevant
- 信頼区間confidence interval信頼区間(confidence interval)confidence interval(信頼区間) — 9.3〜19.7%。0 を含まないだけでなく、区間全体が 2% を超えている。すなわち「差は実在し、しかも臨床的に意味がある」と両方言える
- p値 — 。有意
⚠️ p値から読み始めていたら「p が極端に小さい=効果が巨大」と誤読 misreading 誤読(misreading) misreading(誤読) しかねない。p値がここまで小さいのは、差が 14.5%ポイントあることと n = 3263 が大きいことの両方によるものである。
χ²検定と Fisher 正確検定で p値が違う( と )が、結論conclusion 結論(conclusion)conclusion(結論) は同じである。この差は近似と厳密計算の違いであって、どちらかが間違っているのではない。p値の大小を効果の大きさとして比べないこと。
💡 実習の出力では、差が「糖尿病なし群の非脳卒中率 − 糖尿病あり群の非脳卒中率」として計算されている。ソフトウェアは変数 variables 変数(variables) variables(変数) のどの水準を先に置くかで符号を変えるので、出力の見出しを読んでどちらからどちらを引いたのかを必ず確認する。符号を取り違えると結論 conclusion 結論(conclusion) conclusion(結論) が反対になる。
import numpy as np
from scipy import stats
from statsmodels.stats.proportion import confint_proportions_2indep
tab = np.array([[15, 60], # 行: アウトカムあり / なし、列: 曝露あり / なし(数値は説明用)
[85, 340]])
chi2, p, df, expected = stats.chi2_contingency(tab, correction=False)
print(chi2, p, df); print(expected) # ⚠️ expected(期待度数)で使用条件を判定する
print(stats.fisher_exact(tab)) # 期待度数の条件を満たさないとき
print(confint_proportions_2indep(15, 100, 60, 400, method="wald")) # 比率差の95% CI
検定の選び方
flowchart TD
A["2つのカテゴリ<span class='jp-term jp-term-diagram' title='variables'>変数</span>の関連を見たい"] --> B["分割表と割合の棒グラフを描く<br>効果量(比率の差)を出す"]
B --> C["<span class='jp-term jp-term-diagram' title='expected frequency'>期待度数</span>の表を確認する"]
C --> D{"<span class='jp-term jp-term-diagram' title='expected frequency'>期待度数</span>が 1 未満のセルがある<br>または 5 未満が 20% を超える?"}
D -->|"いいえ"| E["χ²検定(独立性)<br>2×2 なら<span class='jp-term jp-term-diagram' title='continuity correction'>連続性補正</span>は外す"]
D -->|"はい"| F["Fisher 正確検定<br>(近似を使わない・保守的)"]
E --> G["⭐ 比率の差と 95% <span class='jp-term jp-term-diagram' title='confidence interval'>信頼区間</span>を必ず併記する"]
F --> G
⚠️ 1つのカテゴリ変数 variables 変数(variables) variables(変数) を既知の分布と比べたいときは独立性の検定 test of independence 独立性の検定(test of independence) test of independence(独立性の検定) ではなく適合度検定 goodness-of-fit test適合度検定(goodness-of-fit test) goodness-of-fit test(適合度検定)、1つの2値変数 variables 変数(variables) variables(変数) の比率を基準値 baseline / reference value 基準値(baseline / reference value) baseline / reference value(基準値) と比べたいときは二項検定(→ 仮説検定の論理)である。表の形を先に決めれば、検定は自動的に決まる。
対応のあるカテゴリデータには χ²検定を使わない。 同一個体を2回測ったデータ(治療前後の陽性・陰性など)は独立ではないので、McNemar 検定を使う。連続量における対応のある t検定t-testt検定(t-test)t-test(t検定)と同じ論点である。
まとめ
- 2群の比率の比較はすべて分割表の問題になる。検定の前に分割表・棒グラフ・比率の差を見る。
- χ²検定は 、。期待度数expected frequency 期待度数(expected frequency)expected frequency(期待度数) は周辺和から計算される。
- 使用条件conditions of use 使用条件(conditions of use)conditions of use(使用条件) は標本サイズ sample size 標本サイズ(sample size) sample size(標本サイズ) ではなく期待度数 expected frequency期待度数(expected frequency) expected frequency(期待度数):1 未満のセルがなく、5 未満が 20% 以下。出力の期待度数 expected frequency 期待度数(expected frequency) expected frequency(期待度数) の表で判定する。
- Fisher 正確検定は近似を使わないのでいつでも使えるが、保守的で計算が重い。2×2 では期待度数 expected frequency 期待度数(expected frequency) expected frequency(期待度数) がすべて 1 以上なら 補正の χ² のほうが検出力が高い。
- 2×2 表の χ²検定における Yates 連続性補正continuity correction連続性補正(continuity correction)continuity correction(連続性補正)は不要に保守的。ソフトの既定を確認する。
- χ² も Fisher も p値しか返さない。 効果の大きさも向きも別に計算する。
- 効果量は比率の差(臨床判断に直結)、RR、OR。アウトカムall-or-none outcomes アウトカム(all-or-none outcomes)all-or-none outcomes(アウトカム) が頻繁なとき OR は RR を誇張する。
- 比率の差の信頼区間 confidence interval信頼区間(confidence interval) confidence interval(信頼区間)が結論 conclusion 結論(conclusion) conclusion(結論) の中心。0 を含まなければ有意、区間全体が relevance の閾値を超えていれば「有意かつ relevant」。
- 読む順序は 効果量 → relevance → 信頼区間confidence interval信頼区間(confidence interval)confidence interval(信頼区間) → p値。実習例では 14.5%ポイント(閾値 2% 超)、CI 9.3〜19.7%(0 も 2% も含まない)、。
- 検定は関連を示すだけで、因果の向きは臨床的な予備知識が決めている。
出典
- 1.Chi-squared and Fisher-Irwin tests of two-by-two tables with small sample recommendations(Statistics in Medicine・2007)2×2分割表では、期待度数がすべて1以上ならばN−1補正のPearson χ²検定を用いるべきであり、Fisher正確検定は保守的で検出力を失うため期待度数が1未満の場合に限るべきであること、およびYates連続性補正が不要に保守的であること閲覧 2026-08-17
- 2.The ASA Statement on p-Values: Context, Process, and Purpose(The American Statistician (American Statistical Association)・2016)p値だけでは効果の大きさも推定の精度も分からないため、効果量と信頼区間を併せて報告すべきであること閲覧 2026-08-17