医療統計学・医療情報学・遠隔医療

医療統計学・医療情報学・遠隔医療 · 13

診断検査の評価

Evaluation of Diagnostic Tests

応用トピック
画像診断における人工知能疫学指標・ROC曲線・尤度比ベイズ法

🧠 全体像:2×2表は縦に読むか横に読むかで、まったく別の質問に答える。縦(真の疾患の有無でる)=感度・特異度は「疾患がある人はどう出るか」を答え、に依存しない。横(検査結果でる)=PPV・NPV は「陽性だった人はどうなのか」を答え、に強く依存する。患者が知りたいのは横、論文に書いてあるのは縦。この2つを橋渡しするのがであり、それがの全論点である。

検査は何をしているのか

血糖値でも でも、すべての量には分布がある。疾患のある集団とない集団では、その分布の位置が違う——しかし重なっている。

flowchart TD
  A["疾患なし群の分布"] --> C["2つの分布は重なる"]
  B["疾患あり群の分布"] --> C
  C --> D["<span class='jp-term jp-term-diagram' title='cutoff (value)'>カットオフ値</span>(閾値・discrimination value)を1点決める"]
  D --> E["それより上を検査陽性、下を検査陰性とする"]
  E --> F["重なっている領域では必ず誤分類が生じる"]
重なり方 検査として
完全に重なる 役に立たない
部分的に重なる 使える可能性がある(現実のほぼすべて)
重ならない 完全な検査(現実にはほぼ存在しない)

⭐ 誤分類はの選び方が下手だから起きるのではなく、分布が重なっているから原理的に生じる。 をどこに置いても、偽陽性か偽陰性のどちらかは必ず残る。決められるのはその配分だけである。

2×2表(混同行列)

⭐ この配置を暗記する。列が「真の状態」、行が「検査結果」。

疾患あり 疾患なし 行から読む指標
検査陽性 TP() FP(偽陽性) PPV = TP/(TP+FP)
偽警報率 = FP/(TP+FP)
検査陰性 FN(偽陰性) TN() NPV = TN/(TN+FN)
偽安心率 = FN/(TN+FN)
列から読む指標 感度 = TP/(TP+FN)
= FN/(TP+FN)
特異度 = TN/(TN+FP)
= FP/(TN+FP)
= (TP+FN)/全体
診断効率 = (TP+TN)/全体

💡 列の中で足すと1になる(感度+=1、特異度+=1)。行の中でも足すと1になる(PPV+偽警報率=1、NPV+偽安心率=1)。この「どちらの方向に足して1になるか」が、その指標が何でられているかを教えてくれる。

なお、これらは互いに独立ではない。独立なのは3つ(感度・特異度・)で、残りはすべてそこから計算できる。

検査の「良さ」は1つの数では表せない

には4つの別々の問いがある。

問い 指標 COVID での例
(a) 捕まえるべき人をどれだけ捕まえるか 感度 感染者を陽性と判定できる確率
(b) 放っておくべき人をどれだけ放っておくか 特異度 非感染者を陰性と判定できる確率
(c) 陽性という結果はどれだけ信用できるか PPV 陽性と出た人が本当に感染している確率
(d) 陰性という結果はどれだけ信用できるか NPV 陰性と出た人が本当に感染していない確率

⚠️ (a)(b) と (c)(d) は違う質問である。 混同すると診断のたびに誤る。

参照基準(gold standard)

どの検査も、常に正しいとされる参照基準と比較して評価する(ときには剖検の結果しかない)。しかし後述するように、参照基準自体が不完全なことが多く、その場合の「特異度」は過小評価される。

有病率に依存しない指標(列で条件づける)

指標 定義 言葉
TP/(TP+FN) 疾患ありの人のうち陽性となる割合。率
TN/(TN+FP) 疾患なしの人のうち陰性となる割合。率
(1−se) FN/(TP+FN) 疾患ありなのに陰性となる割合。第2種の誤りに対応
(1−sp) FP/(TN+FP) 疾患なしなのに陽性となる割合。第1種の誤りに対応
  • を下げると感度が上がる(陽性と呼ぶ範囲が広がる)が、特異度は下がる
  • を上げると特異度が上がるが、感度は下がる
高感度が要るのは 高特異度が要るのは
早期発見・スクリーニング(見逃しを最小化したい) 偽陽性の代償が大きいとき(手術・化学療法などに直結する)
疾患のリスクが治療のリスクより大きいとき 治療のリスクが疾患のリスクより大きいとき

有病率

= ある時点で検査に占める疾患のある人の割合。(、a priori probability)そのものである。

⚠️ とは違う。 は「今病気である確率」(スナップショット)、は「これから病気になる確率」(動態)。詳しくは 疫学指標・・尤度比。

有病率に依存する指標(行で条件づける)

指標 定義 言葉
PPV() TP/(TP+FP) 検査陽性の人のうち本当に疾患がある割合。診断的 relevance
NPV() TN/(TN+FN) 検査陰性の人のうち本当に疾患がない割合
偽警報率(1−PPV) FP/(TP+FP) 陽性なのに疾患がない割合
偽安心率(1−NPV) FN/(TN+FN) 陰性なのに疾患がある割合

これらは(事後確率)である。患者と臨床医が実際に必要としているのはこちらである——「私の検査が陽性でした。私は病気なのですか」という問いに答えるのは PPV であって感度ではない。

= (TP+TN)/全体。正しく分類された割合。これもに依存する。

核心:同じ検査を、2つの有病率の集団に使う

感度 95%、特異度 90% のまったく同じ検査を考える。

場合1 — 有病率 50%(症状のある患者の外来)

200人を検査する。疾患あり100人、疾患なし100人。

疾患あり 疾患なし 計
検査陽性 TP = 95 FP = 10 105
検査陰性 FN = 5 TN = 90 95
計 100 100 200
  • 感度 = 95/100 = 95%、特異度 = 90/100 = 90%
  • PPV = 95/105 = 90.5%、NPV = 90/95 = 94.7%
  • 診断効率 = 185/200 = 92.5%

場合2 — 有病率 10%(無症状者のスクリーニング)

1000人を検査する。疾患あり100人、疾患なし900人。

疾患あり 疾患なし 計
検査陽性 TP = 95 FP = 90 185
検査陰性 FN = 5 TN = 810 815
計 100 900 1000
  • 感度 = 95/100 = 95%、特異度 = 810/900 = 90% ← まったく変わっていない
  • PPV = 95/185 = 51.4% ← 90.5% から半減した
  • NPV = 810/815 = 99.4% ← 上がった
  • 診断効率 = 905/1000 = 90.5%

何が起きたのか

⭐ 検査の性能はまったく同じである。変わったのは「誰に使ったか」だけ。

  • 感度・特異度が変わらない理由 … 感度は疾患あり群の中だけで計算する。疾患あり群が100人でも1000人でも、その中の95%が陽性になることは変わらない。列の中で割り算しているので、列の大きさは約分されて消える。
  • PPV が半減した理由 … 陽性者の内訳が変わった。場合1では陽性105人のうち95人が本物(FP はわずか10人)。場合2では疾患なしの人が9倍いるので、そこから出る偽陽性も9倍(10 → 90)になる。は95のまま。分母だけが膨らむ。

⚠️ 「PPV が低いのは検査が悪いからだ」は誤りである。 検査は同じである。低いのは、が低い集団に使ったからである。

式で確かめる

計算し終えたあとなら、式は上の表を一般化したものとして読める(ww が)。

PPV=se⋅wse⋅w+(1−sp)(1−w)\text{PPV} = \frac{\text{se}\cdot w}{\text{se}\cdot w + (1-\text{sp})(1-w)}
NPV=sp⋅(1−w)sp⋅(1−w)+(1−se) w\text{NPV} = \frac{\text{sp}\cdot(1-w)}{\text{sp}\cdot(1-w) + (1-\text{se})\,w}

分子は「疾患ありで陽性」、分母の第2項は「疾患なしで陽性」。ww が小さくなるほど (1−w)(1-w) が大きくなり、第2項(偽陽性)が分母を支配していく。

💡 感度・特異度の式にはそもそも ww が現れない。これが「に依存しない」の意味である。

有病率を動かすと何が起きるか

同じ検査(感度95%・特異度90%)のまま、だけを 0.1% から 70% まで動かしたときの PPV と NPV。

xychart-beta
    title "有病率とPPV・NPV(感度95%・特異度90%)"
    x-axis "有病率 (%)" [0.1, 0.5, 1, 2, 5, 10, 20, 30, 50, 70]
    y-axis "予測値 (%)" 0 --> 100
    line [0.9, 4.6, 8.8, 16.2, 33.3, 51.4, 70.4, 80.3, 90.5, 95.7]
    line [100, 100, 99.9, 99.9, 99.7, 99.4, 98.6, 97.7, 94.7, 88.5]
0.1% 1% 5% 10% 30% 50% 70%
PPV(左下から立ち上がる線) 0.9% 8.8% 33.3% 51.4% 80.3% 90.5% 95.7%
NPV(左上から緩やかに下る線) 100% 99.9% 99.7% 99.4% 97.7% 94.7% 88.5%

w=10%w = 10% で PPV 51.4%、w=50%w = 50% で 90.5% と、先ほど 2×2 表で手計算した値がそのまま曲線に乗っている。

⭐ PPV の曲線が左端で床に貼りついているのが要点である。が数%を下回ると、感度・特異度がどれだけ高くても PPV は崩れる。逆に NPV は低側でほぼ 100% に張りつく——まれな疾患では「陰性です」はほぼ常に正しく、「陽性です」はほとんど当てにならない。

💡 この2本が逆向きに動くことが、検査の使いどころを決める。スクリーニング(低)では陰性の除外に価値があり、陽性は確定ではなく次の検査への入口にすぎない。有症状の外来(高)では逆に、陽性がそのまま診断に近づく。同じ検査でも、どちらのを信じてよいかが集団によって入れ替わる。

⚠️ 一方、この式は「感度と特異度は集団を変えても定数である」と読めてしまうが、正確にはそこまでは保証されない。感度・特異度はという数値には依存しないが、の疾患の重症度分布やの構成が変われば変わりうる(spectrum bias)1。進行癌ばかりを集めた研究で測った感度は、無症状者のスクリーニングでは再現しない。「検査固有の不変の定数」ではなく、「その集団で測られた値」である。

基準率の誤り(base-rate fallacy)

⚠️ が非常に低ければ、感度も特異度も極めて高い検査ですら、陽性者の大多数が偽陽性になる。

0.1%、感度 98%、特異度 98% の検査を10万人に使う。

疾患あり 疾患なし 計
検査陽性 TP = 98 FP = 1998 2096
検査陰性 FN = 2 TN = 97902 97904
計 100 99900 100000

PPV = 98/2096 ≈ 4.7%。陽性と言われた人の約95%は健康である。

この設定で PPV を「4%」と示す資料があるが、計算すると約 4.7% である(は変わらない)。

💡 なぜ直感が外れるのか。 特異度98%は「疾患なしの人の2%だけが偽陽性」という、一見わずかな誤りである。しかし疾患なしの人が999倍いるので、その2%(1998人)は98人を圧倒する。小さな誤り率でも、巨大な母数に掛けると大きな絶対数になる。

⭐ 対策は、確率ではなく自然頻度(「10万人のうち…」)で考えることである2。上の表がまさにそれで、割合で考えるより誤りにくい。リスクの伝え方は 治療のリスクを伝える を参照。

これは「低の集団を検査するな」という意味ではない。 意味するのは、低下の陽性は確定診断ではなく「が上がった」というだけの情報である——だからが要る、ということである。

診断効率(accuracy)を単独の指標にしない

1%の集団で、全員を陰性と判定するだけの「検査」を考える。

  • 感度 = 0%(一人も見つけない)
  • 特異度 = 100%
  • 診断効率 = 99%

診断効率だけを見れば「99%正しい優秀な検査」になってしまう。が偏っている場面では、診断効率は検査の良さをまったく反映しない。 診断効率が意味を持つのは、「捕まえること」と「放っておくこと」が同じくらい重要で、かつが極端でないときに限られる。

SnNout と SpPin

⭐ 覚え方として広く使われる規則。

略号 読み 内容
SnNout Sensitive test, Negative result → rule out 感度が非常に高い検査が陰性なら、疾患を除外できる
SpPin Specific test, Positive result → rule in 特異度が非常に高い検査が陽性なら、疾患を確定できる

理屈:感度が高いということは偽陰性が少ないということなので、陰性が出たら「疾患ありなのに陰性」の可能性が小さい。特異度が高ければ偽陽性が少ないので、陽性なら「疾患なしなのに陽性」の可能性が小さい。

⚠️ これは近似的な目安であって、規則ではない。 3つの限界がある。

  1. 「非常に高い」が要る。 感度95%程度では成り立たない——上の場合2で、10%・感度95%の検査が陰性でも NPV は99.4%で確かに高いが、が60%なら NPV は約92%にしかならず、「除外できた」とは言いにくい
  2. に依存する。 が非常に高ければ、感度の高い検査の陰性でも疾患を除外しきれない
  3. 本質は尤度比である。 SnNout / SpPin が実際に語っているのは「が小さい」「が大きい」ということで、事前と組み合わせて初めて事後確率が出る(疫学指標・・尤度比、ベイズの方法)

実データ:胸部CTによるCOVID-19診断

武漢の1014例で、胸部CTを と比較した研究3。

陽性(疾患あり) 陰性(疾患なし) 計
陽性 TP = 580 FP = 308 888
陰性 FN = 21 TN = 105 126
計 601 413 1014
指標 値
感度 580/601 = 96.5%(95%CI 94.7–97.8%)
特異度 105/413 = 25.4%(95%CI 21.3–29.9%)
21/601 = 3.5%
308/413 = 74.6%
(この標本での) 601/1014 = 59.3%
PPV 580/888 = 65.3%
NPV 105/126 = 83.3%
偽警報率 308/888 = 34.7%
偽安心率 21/126 = 16.7%
診断効率 685/1014 = 67.6%

読み方:胸部CTは感染者をほぼ取りこぼさない(感度96.5%)が、非感染者を陰性と言えない(特異度25.4%)。つまり除外には向くが確定には向かない——SnNout 型の検査である。

ここで参照基準を疑う

⚠️ 実習資料はこの研究の を「真の」と呼ぶが、正確には も不完全な検査である。SARS-CoV-2 の のは曝露からの日数によって大きく変わり、最良の時点でも約20%に達する4。

これが結果に何をするか。 陰性なのに 陽性だった308人の一部は、実際には感染していた( の偽陰性)。そうした人はなのに FP として数えられる。したがって の特異度25.4%は、真の特異度の過小評価である。 原著論文自身がこの点を論じており、308人のうち相当数は臨床的に と考えられたと報告している3。

⭐ 不完全な参照基準と比較すると、評価される検査の特異度は系統的に低く見える(参照基準が拾えなかった真の症例が偽陽性に回るため)。「gold standard」という言葉があっても、それが本当に金なのかは常に確認する。

「有病率59.3%」の意味

⚠️ この59.3%はの人口ではない。これは「胸部CTと の両方を受けた1014人という、選ばれた臨床標本の構成」である。したがって、ここで計算した PPV 65.3% と NPV 83.3% は、これと似た集団(症状があってを撮られる人々)にしか当てはまらない。 無症状者のスクリーニングに持ち込めば PPV は大きく下がる。

⭐ 論文から持ち帰ってよいのは感度と特異度であり、PPV と NPV は自分の診療集団ので計算し直す。

区間推定

感度・特異度はそれぞれの部分集団の中での比率なので、もその部分集団のサイズで決まる。

  • 感度の95%CI … 分母は疾患あり群の(上の例では601)
  • 特異度の95%CI … 分母は疾患なし群の(413)

上の例で感度のCI(94.7–97.8%、幅3.1ポイント)が特異度のCI(21.3–29.9%、幅8.6ポイント)より狭いのは、①分母が大きいことと、②比率が0や1に近いほど分散が小さいことの両方による。

Python で計算する

from statsmodels.stats.proportion import proportion_confint

TP, FN, FP, TN = 580, 21, 308, 105
se, sp = TP / (TP + FN), TN / (TN + FP)
ppv, npv = TP / (TP + FP), TN / (TN + FN)
print(se, sp, ppv, npv)
print(proportion_confint(TP, TP + FN, method="wilson"))  # 感度の95%CI
print(proportion_confint(TN, TN + FP, method="wilson"))  # 特異度の95%CI

を変えて PPV がどう動くかを見るには、感度・特異度を固定してだけを振る。

def ppv(se, sp, w):
    return se * w / (se * w + (1 - sp) * (1 - w))

for w in (0.50, 0.10, 0.01, 0.001):
    print(w, round(ppv(0.95, 0.90, w), 4))

出力の意味:proportion_confint は (下限, 上限) を返す。method="wilson" を指定するのは、比率が0や1に近いとき既定の正規近似(Wald法)が区間を0未満や1超に押し出すためである。

💡 の出力を読む順序

  1. 効果量 — 感度・特異度(検査の性質)と、自分の集団ので計算し直した PPV・NPV
  2. 臨床的relevance — その値で臨床判断が変わるか。陽性のとき次に何をするか、陰性のときそこで止めてよいかを言葉にできるか
  3. — 各比率の95%CI。分母がその部分集団のサイズであることを確認する(特異度のCIが広いのは疾患なし群が小さいから、ということがよくある)
  4. p値 — の評価では、そもそも p値はほとんど出番がない。2つの検査を比べるときにだけ意味を持つ。「有意な感度」という言い方に意味はない

カットオフをどう選ぶか

flowchart TD
  A["<span class='jp-term jp-term-diagram' title='cut-off'>カットオフ</span>を決める必要がある"] --> B{"何を優先するか"}
  B -->|"見逃しを避けたい<br>(スクリーニング、疾患のリスク大)"| C["感度を最大化<br><span class='jp-term jp-term-diagram' title='cut-off'>カットオフ</span>を下げる"]
  B -->|"偽陽性を避けたい<br>(治療のリスク大、<span class='jp-term jp-term-diagram' title='invasive procedure'>侵襲的処置</span>に直結)"| D["特異度を最大化<br><span class='jp-term jp-term-diagram' title='cut-off'>カットオフ</span>を上げる"]
  B -->|"どちらとも決められない"| E["診断効率を最大化<br>⚠️ <span class='jp-term jp-term-diagram' title='prevalence'>有病率</span>が極端なら不適"]
  C --> F["複数の検査・複数の<span class='jp-term jp-term-diagram' title='cut-off'>カットオフ</span>を比較するなら<br><span class='jp-term jp-term-diagram' title='receiver operating characteristic'>ROC</span> 曲線へ"]
  D --> F
  E --> F

すべてのについて感度と(1−特異度)を描いたものが 曲線であり、複数の検査を比較するになる。ただし や Youden 指数だけで「良い検査」を決めるのは誤りである——臨床では感度と特異度のどちらが重要かが決まっていることがほとんどで、その領域での挙動を見るべきである。詳細は 疫学指標・・尤度比。

まとめ

  • 2×2表は列(真の状態)でれば感度・特異度、行(検査結果)でれば PPV・NPV。独立な数は3つ(感度・特異度・)だけ。
  • 感度・特異度はに依存しない。PPV・NPV は強く依存する。 感度95%・特異度90%の同じ検査でも、50%なら PPV 90.5%、10%なら PPV 51.4% になる。変わったのは検査ではなくである。
  • ただし感度・特異度も、の疾患の重症度分布が変われば変わりうる(spectrum bias)。「不変の定数」ではない。
  • 基準率の誤り:0.1%なら、感度98%・特異度98%の検査でも PPV は約4.7%。陽性者の約95%が偽陽性になる。母数の大きさが小さな誤り率を圧倒する。
  • を単独の指標にしない。 1%なら「全員陰性」でも99%になる。
  • SnNout / SpPin は目安。実体は尤度比であり、と組み合わせて初めて事後確率になる。
  • 参照基準が不完全なら、評価される検査の特異度は過小評価される(胸部CT対 )。
  • 論文から持ち帰るのは感度・特異度。PPV・NPV は自分の診療集団ので計算し直す。

出典

  1. 1.Problems of Spectrum and Bias in Evaluating the Efficacy of Diagnostic Tests(The New England Journal of Medicine(著者 David F. Ransohoff, Alvan R. Feinstein)・1978)感度・特異度は対象集団の疾患の重症度分布や併存疾患の構成が変わると変化しうること(spectrum bias)。検査そのものの不変の定数ではないこと閲覧 2026-08-17
  2. 2.Simple tools for understanding risks: from innumeracy to insight(BMJ(著者 Gerd Gigerenzer, Adrian Edwards)・2003)条件付き確率より自然頻度(1000人中◯人)で示すほうが医師も患者も正しく推論できること。低有病率下での陽性的中率が過大に見積もられること閲覧 2026-08-17
  3. 3.Correlation of Chest CT and RT-PCR Testing for Coronavirus Disease 2019 (COVID-19) in China: A Report of 1014 Cases(Radiology(著者 Tao Ai, Zhenlu Yang, Hongyan Hou ら)・2020)武漢の1014例で胸部CTをRT-PCRと比較し、感度97%(580/601)に対して陽性一致率が低かったこと。RT-PCR陰性でCT陽性の症例の多くが臨床的にはCOVID-19と考えられ、RT-PCR自体が完全な参照基準ではないと論じていること閲覧 2026-08-17
  4. 4.Variation in False-Negative Rate of Reverse Transcriptase Polymerase Chain Reaction–Based SARS-CoV-2 Tests by Time Since Exposure(Annals of Internal Medicine(著者 Lauren M. Kucirka, Stephen A. Lauer, Oliver Laeyendecker ら)・2020)SARS-CoV-2 の RT-PCR の偽陰性率が曝露からの日数によって大きく変動し、最良の時点でも約20%に達すること(=RT-PCR は完全な gold standard ではない)閲覧 2026-08-17