切點選擇與兩條 ROC 的比較
Youden index 挑出來的「最佳切點」隱含一個幾乎不成立的假設——一個百分點的敏感度與一個百分點的特異度等價,而這等於把隱含的門檻機率釘在挑切點那個世代的盛行率上;而且它是在同一份資料上挑的,因此樂觀。這一頁用 bootstrap 把樂觀量出來、把代價比拉高看切點怎麼崩掉,接著用配對 DeLong 檢定比較兩個標記,並示範一個常見的誤解:配對不一定比較有力;最後把比較限縮到高特異度那一段(部分 AUC),在同一批病人身上得到與整條曲線不同的結論。
「最佳切點」這四個字裡藏了什麼
ROC 曲線上的每一點都是一組敏感度與特異度的取捨。要把連續的檢驗值變成臨床上可以執行的規則,總得挑一點。
問題是「最佳」這兩個字沒有內建的定義。挑點需要兩樣資料以外的資訊:
- 偽陽性與偽陰性各自的代價是多少(漏掉一個病人 vs 多做一次侵入性檢查)
- 這個規則會被用在檢驗前機率多少的族群上
實務上最常見的做法——Youden index——把這兩件事都用預設值悄悄填掉了。這一頁就是把那些預設值挖出來看。
Youden index
Youden index 的定義是:
幾何上它是 ROC 曲線上某點與對角線的垂直距離,範圍是 0(毫無資訊)到 1(完美)。所謂 Youden 最佳切點,就是讓 最大的那一點。
在 pROC::aSAH 的 S100β 上:
| 切點(µg/L) | 敏感度 | 特異度 | J | PPV(本世代盛行率 36.3%) | NPV(本世代盛行率 36.3%) |
|---|---|---|---|---|---|
| 0.205 | 63.4% | 80.6% | 0.4397 | 65.0% | 79.5% |
(pROC 報的切點是兩個相鄰觀測值的中點,所以會看到資料裡不存在的小數:0.205 µg/L。
這份資料沒有任何一位病人的 S100β 落在本家族前幾頁那個先訂好的 0.20 µg/L 與 0.205 µg/L 之間,
所以那個較粗的 0.20 µg/L 切點在這裡剛好給出同一組敏感度與特異度——兩者是不同的數,只是在這份資料上把同一批人分到同一邊。)
figures/scripts/B4-05-cutoff.R峰頂平坦這件事有實際後果:距離最大值 0.05 以內的切點共有 6 個, 分布在 0.175 到 0.245 µg/L 之間; 在這個範圍裡,敏感度從 58.5% 到 63.4%,特異度從 76.4% 到 81.9%。 把小數點後三位的那個「最佳」切點寫進臨床指引,是在報告資料裡沒有的精確度。
依代價選切點,以及它會怎麼崩掉
把代價放進來的標準做法是最大化加權的版本:
其中 是「漏掉一個病人的代價 ÷ 一個偽陽性的代價」。pROC 的 coords(..., best.weights = c(r, prev)) 就是在做這件事。
把 從 1 拉到 10(盛行率固定在本世代的 36.3%):
| 偽陰性 : 偽陽性的代價比 | 特異度的權重 w | 選出的切點(µg/L) | 敏感度 | 特異度 |
|---|---|---|---|---|
| 1 : 1(並列最佳 1 / 2) | 1.756 | 0.205 | 63.4% | 80.6% |
| 1 : 1(並列最佳 2 / 2) | 1.756 | 0.510 | 29.3% | 100.0% |
| 2 : 1 | 0.878 | 0.205 | 63.4% | 80.6% |
| 3 : 1 | 0.585 | 0.205 | 63.4% | 80.6% |
| 4 : 1 | 0.439 | 0.065 | 97.6% | 13.9% |
| 5 : 1 | 0.351 | 0.065 | 97.6% | 13.9% |
| 10 : 1(並列最佳 1 / 2) | 0.176 | 不設有限切點(全部判成陽性) | 100.0% | 0.0% |
| 10 : 1(並列最佳 2 / 2) | 0.176 | 0.065 | 97.6% | 13.9% |
表格裡有幾列的代價比出現不只一次:那是因為在那個權重下,最佳解不只一個。coords(..., "best") 會把所有達到最大值的切點一起回傳,只取第一列就會把並列解靜默丟掉。五件事值得注意:
- 代價比 1 : 1 那一列不等於 Youden index。 盛行率那一項永遠在算式裡:本世代的盛行率 36.3% 讓權重變成 1.756,也就是即使兩種錯誤等價,特異度仍然被加權得比敏感度重(因為沒病的人比較多,每一個百分點的特異度牽涉到更多人)。代價比為 1 時權重剛好是 ,整個目標函數化簡成「答對的人數 ÷ 病例數」——這一列真正在最大化的是正確分類率(accuracy),不是 。用決策曲線那一頁的語言講,這一列對應的門檻機率是二分之一,而 Youden 切點對應的門檻機率是 36.3%——所以只有在病例與非病例對半分的世代裡,這兩個目標才會是同一件事。
- 而且這一列的最佳解不唯一。 切點 0.205(敏感度 63.4%、特異度 80.6%)與切點 0.510(敏感度 29.3%、特異度 100.0%)答對同樣 84 人,目標函數值完全相同(2.049)。前者剛好與 Youden 選到同一個切點,那是巧合而不是恆等;後者是臨床上幾乎相反的規則——幾乎不會誤判沒病的人,代價是漏掉七成的病人。
- 代價比在 1 到 3 之間,選出來的切點都包含 0.205。 切點對代價比不是連續反應的——它會卡在同一個觀測值上一段時間,然後一次跳掉。所以「代價比大概是二還是三」這種不確定性,常常根本不影響決定。
- 跳到 4 : 1 時,切點掉到 0.065,敏感度衝到 97.6%,特異度只剩 13.9%。
- 代價比到 10 : 1 時,最佳解同樣不唯一:「不設切點、把所有人都判成陽性」這個退化解,與有限切點 0.065 µg/L 的目標函數值完全相同(都是 1.000)。
在同一份資料上挑出來的切點是樂觀的
這是本頁最重要的一節。挑切點的動作本身用掉了資料裡的資訊:你在一堆候選切點裡挑了在這份樣本上表現最好的那個,而「這份樣本上最好」有一部分來自真實訊號、有一部分來自這份樣本的隨機起伏。回報那個切點在同一份資料上的表現,等於把隨機起伏也算成成績。
量化的方法是 bootstrap 樂觀修正:在每一次重抽樣裡重跑整個挑選程序,比較它在重抽樣裡的表現與在原始資料上的表現,兩者的差就是那一次的樂觀量。
2000 次重抽樣的結果:
| 在資料上挑了什麼 | 表面上的 J | 平均樂觀量 | 修正後的 J |
|---|---|---|---|
| 只挑切點 | 0.4397 | 0.0267 | 0.4130 |
| 挑切點 + 挑兩個標記中較好的那個 | 0.4397 | 0.0523 | 0.3874 |
figures/scripts/B4-05-cutoff.R比較兩條 ROC:DeLong 檢定
這一節與後面兩節都在回答同一個問題。S100β 的 AUC 是 0.731,NDKA 是 0.612,差了 0.119。這個差距站得住嗎?
關鍵在於這兩個標記量在同一批病人身上,所以兩個 AUC 估計值是相關的,不能當成兩個獨立的樣本比較。DeLong 檢定處理的正是這件事:它用每位受試者對 AUC 的貢獻(結構化的 placement values)算出兩個 AUC 的變異數與它們之間的共變異數,再檢定差值。
| 結果 | |
|---|---|
| AUC 差值(S100β − NDKA) | 0.119 |
| 95% CI | -0.049 到 0.288 |
| Z | 1.39 |
| p | 0.164 |
figures/scripts/B4-05-cutoff.R一個差點寫錯的說法
寫到 DeLong 那一節時,最自然的收尾是那句到處都看得到的話:「因為是同一批病人,配對檢定利用了相關性,所以比不配對的檢定更有效率。」
在這份資料上,那句話是錯的。 把同樣兩條曲線用不配對的方式檢定:
| 配對(正確做法) | 忽略配對 | |
|---|---|---|
| 差值的變異數 | 0.0074 | 0.0059 |
| Z | 1.39 | 1.56 |
| p | 0.164 | 0.120 |
忽略配對反而給出比較小的 p 值。原因在算式裡:差值的變異數是
共變異數是減的,但它不一定是正的。 這份資料的兩個 AUC 估計值共變異數是 -0.00076,是負的(兩個標記本身的 Spearman 相關也接近零而略偏負,-0.060)。於是 變成加號,配對後的變異數 0.0074 比忽略配對的 0.0059 還大,檢定更保守。
部分 AUC——只比較會用到的那一段
前一節的兩個檢定都是在整條曲線上做的。但整條曲線裡有一大段是臨床上根本不會採用的操作點:篩檢與影像研究的偽陽性要往下接侵入性檢查,所以特異度低於某個值的切點不會被寫進流程。整條 ROC 的 AUC 把那一段一起算進去,等於讓「這個檢驗在不會被使用的操作點上表現如何」也參與評分。
部分 AUC(partial AUC)把積分限制在指定的特異度區段上。本節看的是特異度 0.90 到 1.00 這一段——高特異度端,也就是大多數篩檢與影像判讀規則實際運作的地方。
figures/scripts/B4-05-cutoff.R未標準化的部分 AUC 不能跨區段比較,因為區段愈寬,能裝的面積愈多。特異度 0.90 到 1 這一段的面積上限就是它的寬度 0.10,特異度 0.80 到 1 則是 0.20。所以 S100β 在窄區段的 0.0328 與在寬區段的 0.0806 不能拿來比大小——後者比較大,有一部分只是因為區段比較寬。同一個理由:一篇論文只寫一個 pAUC 而沒有交代區段,那個數字是不可解讀的。
下限也要留意。完全沒有鑑別力的對角線在區段裡仍然圍出面積(0.005 與 0.020),所以原始部分 AUC 的「等同猜測」基準既不是 0.5 也不是 0,而是隨區段變動的一個數。
McClish 的標準化把區段線性映到 0.5 與 1 之間。 它先扣掉對角線的面積,再除以該區段能給的範圍:
其中 pAUC 的上限是區段寬度、下限是對角線在區段裡的面積。在 pROC 是 partial.auc.correct = TRUE,在 sklearn 則是 roc_auc_score(..., max_fpr = ...) 的預設輸出。校正後的值可以跨區段比較,也可以跟 0.5 這條「毫無鑑別力」的線對照——但它不是整條曲線的 AUC,兩個數不可互相取代。
| 特異度區段 | 面積上限 | 對角線的面積 | S100β 原始 pAUC | NDKA 原始 pAUC | S100β McClish | NDKA McClish |
|---|---|---|---|---|---|---|
| 0.90 到 1.00 | 0.10 | 0.005 | 0.0328(上限的 32.8%) | 0.0107(上限的 10.7%) | 0.646 | 0.530 |
| 0.80 到 1.00 | 0.20 | 0.020 | 0.0806(上限的 40.3%) | 0.0385(上限的 19.2%) | 0.668 | 0.551 |
配對比較怎麼做。 pROC 對部分 AUC 直接拒絕跑 DeLong,錯誤訊息是 DeLong's test is not supported for partial AUC——DeLong 的變異數推導是針對整條曲線的 placement values 寫的。替代做法是配對 bootstrap:每一次重抽「病人」,兩個標記一起被抽走,配對結構才保得住,再對區段面積的差值取分布。本頁用的是 2000 次。
有一個參數不能漏:reuse.auc = FALSE。它預設為 TRUE,意思是沿用 roc 物件裡原本的 AUC 設定,把你剛傳進去的 partial.auc 靜默忽略——於是你以為在比區段,實際比的還是整條曲線,而且輸出看起來完全正常,唯一的線索是 p 值跟整條曲線一模一樣。
標準化不改變證據強度。 McClish 校正是原始面積的仿射變換,差值與 bootstrap 標準差被同一個常數同時縮放,所以檢定統計量與 p 值完全不變:原始尺度是 2.283 與 p = 0.022,校正尺度是 2.283 與 p = 0.022。校正買到的是可比較性,不是顯著性。
| 比較的範圍 | 檢定 | 統計量 | p |
|---|---|---|---|
| 整條曲線 | DeLong(配對) | 1.391 | 0.164 |
| 整條曲線 | 配對 bootstrap | 1.375 | 0.169 |
| 特異度 0.90 到 1.00 | 配對 bootstrap | 2.283 | 0.022 |
| 特異度 0.80 到 1.00 | 配對 bootstrap | 1.842 | 0.065 |
這兩種比較在這份資料上給出不同的結論。 整條曲線未偵測到差異(p = 0.164);把比較限縮到特異度 0.90 以上,同一批病人、同樣的配對設計,差異達到統計顯著(p = 0.022)。而且這不是換了檢定造成的——同一組 2000 次配對 bootstrap 用在整條曲線上給出 p = 0.169,與 DeLong 的 0.164 幾乎相同。變的是比較的範圍。
機制看得見:在高特異度那一段,S100β 拿到面積上限的 32.8%,NDKA 只有 10.7%,相差約 3.1 倍;整條曲線上兩者的 AUC 比只有 1.20 倍。整條 AUC 是把「差得最多的那一段」與「差得比較少的其他段」平均起來的一個摘要,所以一個集中在某個區段的差距,會在摘要裡被稀釋掉。
動手跑一次
library(pROC)
data(aSAH, package = "pROC")
r1 <- roc(aSAH$outcome, aSAH$s100b, levels = c("Good", "Poor"),
direction = "<", quiet = TRUE)
r2 <- roc(aSAH$outcome, aSAH$ndka, levels = c("Good", "Poor"),
direction = "<", quiet = TRUE)
# Youden 最佳切點,以及整條 Youden 曲線
coords(r1, "best", best.method = "youden",
ret = c("threshold", "sensitivity", "specificity"), transpose = FALSE)
# 依代價比選切點:c(漏掉一個病人的相對代價, 使用場域的盛行率)
coords(r1, "best", best.weights = c(5, 0.36),
ret = c("threshold", "sensitivity", "specificity"), transpose = FALSE)
# 配對比較兩條曲線
roc.test(r1, r2, method = "delong") # paired 預設為 TRUE
cov(r1, r2, method = "delong") # 共變異數,可能是負的
# 部分 AUC:把積分限制在高特異度區段
auc(r1, partial.auc = c(1, 0.9), partial.auc.focus = "sp")
auc(r1, partial.auc = c(1, 0.9), partial.auc.focus = "sp",
partial.auc.correct = TRUE) # McClish 標準化到 0.5 與 1 之間
# 配對比較兩個部分 AUC。DeLong 對部分 AUC 會直接報錯,只能用 bootstrap;
# reuse.auc = FALSE 不能漏,否則 partial.auc 被靜默忽略、比到的還是整條曲線
set.seed(20260824)
roc.test(r1, r2, method = "bootstrap", reuse.auc = FALSE,
partial.auc = c(1, 0.9), partial.auc.focus = "sp")
# 想比的其實是「特異度固定時的敏感度」時,直接比那一點
roc.test(r1, r2, method = "specificity", specificity = 0.9)
# 樂觀修正:每一次重抽樣都要「重跑整個挑選程序」
youden_at <- function(y, x, thr) {
d <- y == "Poor"; p <- x >= thr
sum(p & d) / sum(d) + sum(!p & !d) / sum(!d) - 1
}
best_thr <- function(y, x)
as.numeric(coords(roc(y, x, levels = c("Good", "Poor"), direction = "<",
quiet = TRUE), "best", ret = "threshold",
transpose = FALSE)[1, 1])
app <- youden_at(aSAH$outcome, aSAH$s100b, best_thr(aSAH$outcome, aSAH$s100b))
opt <- replicate(2000, {
b <- aSAH[sample(nrow(aSAH), replace = TRUE), ]
tb <- best_thr(b$outcome, b$s100b)
youden_at(b$outcome, b$s100b, tb) - youden_at(aSAH$outcome, aSAH$s100b, tb)
})
c(apparent = app, optimism = mean(opt), corrected = app - mean(opt))
# 匯出給下面的 Python 用
write.csv(aSAH, "aSAH.csv", row.names = FALSE)驗證環境:R 4.6.0 + pROC 1.19.0.1。roc.test() 預設就是配對版本,只要兩條曲線來自同一個 data frame 的同一批 case。
import numpy as np
import pandas as pd
from sklearn.metrics import roc_auc_score
d = pd.read_csv("aSAH.csv") # 由本頁上面那段 R 匯出
y = (d["outcome"] == "Poor").to_numpy().astype(int)
a1, a2 = d["s100b"].to_numpy(), d["ndka"].to_numpy()
# 配對的 bootstrap:每次重抽「病人」,兩個標記一起被抽走,配對結構才保得住
rng = np.random.default_rng(20260822)
diff = []
for _ in range(2000):
i = rng.integers(0, len(y), len(y))
if y[i].sum() == 0 or y[i].sum() == len(i):
continue
diff.append(roc_auc_score(y[i], a1[i]) - roc_auc_score(y[i], a2[i]))
diff = np.array(diff)
print(roc_auc_score(y, a1) - roc_auc_score(y, a2),
np.percentile(diff, [2.5, 97.5]))
# 部分 AUC:max_fpr 給的是 McClish 標準化之後的值(0.5 與 1 之間),
# 與 pROC 的 partial.auc.correct = TRUE 相同
print(roc_auc_score(y, a1, max_fpr=0.1), roc_auc_score(y, a2, max_fpr=0.1))sklearn 沒有內建 DeLong 檢定;實務上要嘛自己實作 DeLong 的共變異數,要嘛用 bootstrap 對差值取百分位區間。下面示範後者。
常見誤用
| 誤用 | 為什麼錯 |
|---|---|
| 把 Youden 最佳切點當成「客觀」的切點 | 把敏感度與特異度等權相加本身就是一個代價假設;正因為算式沒用到盛行率,隱含的門檻機率就被盛行率定死了 |
| 把切點報到小數點後三位 | 峰頂通常很平,那個精確度資料裡沒有 |
| 在同一份資料上挑切點再報它的敏感度與特異度 | 樂觀偏誤;至少要做 bootstrap 修正或外部驗證 |
| 認為樂觀偏誤只發生在複雜模型上 | 只挑一個切點就有;挑選愈多層,樂觀量累積愈快 |
| 用不同的資料重挑切點卻不說 | 切點在重抽樣間本來就很不穩定,需揭露挑選程序 |
| 用不配對的檢定比較同一批病人的兩條 ROC | 變異數算錯;方向不固定,可能偏樂觀也可能偏保守 |
| 認為配對檢定一定比較容易顯著 | 共變異數可能是負的,此時配對反而更保守 |
| 未達顯著就寫「兩個標記表現相同」 | 要主張相當需要非劣性設計與事先訂好的界值 |
| 比較兩個 AUC 卻只看點估計 | 差值的信賴區間才是可解讀的量 |
| 只比 AUC 就決定要換用新標記 | 臨床價值要看在決策門檻附近的重新分類與淨效益 |
| 把整條 ROC 的 AUC 拿來比,但實際只會用高特異度那一段 | 該用部分 AUC,或直接比較該區段的敏感度;本頁的資料上兩者結論不同 |
重跑本頁的所有數字
/opt/homebrew/bin/Rscript figures/scripts/B4-05-cutoff.R讀讀看這張圖
答案取自產生本頁圖表的同一份統計輸出,不是另外打上去的。
Youden index 挑出來的最佳切點是 0.205,J = 0.4397。這個「最佳」有沒有做代價假設?
看答案與解析
正確答案: 有。等權相加隱含的偽陽性對偽陰性代價比就是盛行率勝算,等於把門檻機率釘在本世代盛行率 0.3628 上
J 把敏感度與特異度等權相加,而這兩個百分點是在兩群不同的人身上算的,所以「每個比率等權」不等於「每個人等價」。推導下去,J 隱含的代價比就是盛行率勝算,等於選了一個門檻機率剛好是 0.3628 的決策者——一個沒有人做過的臨床判斷,是從樣本的病例組成繼承來的。算式裡沒有出現盛行率正是問題所在:因為它從來不問,最後就由盛行率替你把代價比定了下來。0.4397 是 J 的值,不是「沒有假設」的證據;0.6341 是這個切點的敏感度,J 對它沒有設任何下限,它是最大化的結果而不是限制。
距離 J 最大值 0.05 以內的切點共有六個,分布在 0.175 到 0.245 µg/L 之間。這對「最佳切點是 0.205」這個寫法有什麼影響?
看答案與解析
正確答案: 有影響。這個區間裡敏感度可以低到 0.585、也可以是 0.634,把小數點後三位寫進指引,是在報告資料裡沒有的精確度
峰頂平坦的意思是這一段裡每一個切點的表現分不太開:敏感度從 0.585 到 0.634,特異度也只在幾個百分點之內移動。0.205 之所以是最大值,有一部分來自這份樣本的隨機起伏,換一批人峰頂就落在別處。所以該報的是一段區間與挑選程序,不是小數點後三位的一個點。把切點改成 0.175 也不對——那不是比較安全,只是換一組取捨,而且同樣是在同一份資料上挑的。0.245 是這段區間的另一端,把它叫做次佳解,等於相信這些切點之間的排序是可信的。
代價比 10 : 1 那一列,「把所有人都判成陽性」與「切點 0.065」的目標函數值精確相等,都是 1.000。統計軟體只印出其中一列時該怎麼讀?
看答案與解析
正確答案: 目標函數值都是 1.000,最佳解不唯一,該做的是把並列的規則全部攤開讓臨床判斷去分
兩個解的目標函數值是精確相等的 1.000,不是四捨五入後看起來一樣,所以哪一列被印出來由軟體自己的排序決定,不是資料決定的。兩個並列解的臨床意義差很多:退化解等於不做檢驗,而切點 0.065 至少能排除 0.139 的沒病者,代價是敏感度 0.976 之下仍然漏掉少數病人。目標函數打平的時候,該做的是把並列規則全部攤開交給臨床判斷,而不是接受排序第一的那一個。它同時逼出一個常被跳過的問題:這個檢驗有沒有讓你做出跟「不做檢驗」不一樣的決定——在這個代價比與這個盛行率下,答案是打平。
在同一份資料上挑切點,表面上的 J 是 0.4397,bootstrap 估到的樂觀量是 0.0267。若連「用哪個標記」也在同一份資料上挑,樂觀量會變成多少、為什麼?
看答案與解析
正確答案: 0.0523,幾乎翻倍——每多一層在同一份資料上做的選擇,樂觀量就再累積一次
樂觀量衡量的是「在這份樣本上挑到最好」這件事本身帶來的虛胖,所以它隨著你在同一份資料上做的選擇層數放大:只挑切點是 0.0267,連標記也挑就到 0.0523。0.3874 是後者修正之後的 J、0.4130 是前者修正之後的 J,兩個都是結果不是樂觀量。有兩件事要一起記住:這個例子只挑了一個切點、在一個維度上,真實的預測模型還要挑變數、轉換、交互作用與超參數,樂觀量會累積成完全不同的量級;而「兩個標記本來就都測了」不能豁免——決定報告哪一個的動作發生在看過資料之後,那就是一次選擇。
配對的 DeLong 檢定給 p = 0.164,忽略配對反而給 p = 0.120。配對檢定不是應該比較有力嗎?
看答案與解析
正確答案: 因為配對後差值的變異數是 0.0074,比忽略配對的 0.0059 還大——共變異數是負的,減去它反而變成加號
配對檢定的正當性來自它用了正確的變異數,不是來自它一定比較容易顯著。差值的變異數是兩個變異數相加再減去兩倍共變異數,而共變異數不一定是正的:這份資料的兩個 AUC 估計值共變異數是負的,於是減號變成加號,配對後的變異數 0.0074 比忽略配對的 0.0059 還大,檢定更保守。所以忽略配對得到的 p = 0.120 不是比較有力,是把一個負的共變異數當成零、把變異數算小了。至於 -0.0600,那是兩個標記本身的 Spearman 相關,不是兩個 AUC 估計值的共變異數——進得了 DeLong 變異數式子的只有後者,而它在這份資料是負的,所以配對後的變異數反而是比較大的那一個,兩個 p 值也就不可能相同。標記之間的相關接近零,充其量只是讓配對的效率增益消失;要讓配對比不配對更保守,得是共變異數為負,而這份資料正是後者。
整條曲線的配對檢定 p = 0.169,把比較限縮到特異度 0.90 以上之後 p = 0.022。這是換了檢定造成的嗎?
看答案與解析
正確答案: 不是。同一組配對 bootstrap 用在整條曲線上是 0.169,與 DeLong 幾乎相同——變的是比較的範圍,不是檢定
同一組配對 bootstrap 用在整條曲線上給出 0.169,與 DeLong 幾乎相同,所以差別不在檢定。變的是比較的範圍:在特異度 0.90 以上那一段,這個標記拿到面積上限的 0.328,NDKA 只有 0.107,差距集中在這裡;整條 AUC 把這一段與差得比較少的其他段平均起來,於是被稀釋掉。McClish 校正是仿射變換,差值與標準差被同一個常數同時縮放,統計量與 p 值完全不變,它買到的是可比較性而不是顯著性。至於 0.065,那是另一個區段的結果——同一對曲線在這一頁被檢定了三次,引用最小的那個 p 值之前要記得這件事,區段必須事先寫進統計分析計畫。
用到這個方法的章節
延伸觀看
ROC 系列 5/6:最佳切點與代價權衡
ROC 系列 6/6:罕見疾病與過度樂觀陷阱
ROC Curves
Biostatistics – All You Need To Know About The ROC Curve素材來源與授權
本頁為原創內容