Co to jest krzywa decyzyjna?
Krzywa decyzyjna (ang. decision curve analysis, DCA) pokazuje korzyść netto (net benefit) modelu predykcyjnego w zakresie progów prawdopodobieństwa i porównuje ją ze strategiami „interwencja u wszystkich” i „u nikogo”. Vickers i Elkin (2006) zaproponowali ją jako ocenę użyteczności modelu, której nie dają krzywa ROC ani AUC.
Wzór i próg
NB(pt) = TP/n − FP/n · pt/(1 − pt), gdzie TP i FP to wyniki prawdziwie i fałszywie dodatnie przy progu pt. Próg wyraża wagę szkody: pt = 20% oznacza, że jedno wykrycie jest warte czterech niepotrzebnych interwencji. Vickers i in. (2016) nazywają to kursem wymiany korzyści na szkody. Strategia „u wszystkich” ma NB = π − (1 − π) · pt/(1 − pt), gdzie π to częstość zdarzenia, a strategia „u nikogo” – zero. NB = .04 oznacza 4 trafne wykrycia na 100 osób bez fałszywych alarmów.
Przykład
Model regresji logistycznej dopasowano na połowie z 800 symulowanych osób i oceniono na drugiej połowie (n = 399, 62 zdarzenia, 15.5%). Przy progu 20% model daje 48 TP i 125 FP: NB = 48/399 − 125/399 · 0.25 = .042, a „u wszystkich” −.056. Przy progu 10% wynik to .085 wobec .062, przy 5% .116 wobec .111, a przy 30% model (−.001) nie jest lepszy od strategii „u nikogo”.
Jak opisać w pracy
Na co uważać
- Zakres progów wybierz z góry. Vickers i in. (2019) zalecają model, który ma najwyższą korzyść w całym zakresie rozsądnych preferencji, a nie w jednym wybranym punkcie.
- Dane uczące zawyżają korzyść. Licz krzywą na danych walidacyjnych albo po walidacji krzyżowej.
- Kalibracja ma znaczenie. Przy złej kalibracji model z dobrym AUC może dawać ujemną korzyść netto.
Porównanie modeli o podobnym AUC i NRI opisuje wpis Krzywa decyzyjna (net benefit) i NRI, a walidację – Modele predykcyjne: walidacja i kalibracja.
Korzyść netto w R
Kod symuluje dane, dopasowuje regresję logistyczną na połowie próby i liczy ręcznie korzyść netto modelu oraz strategii „u wszystkich” i „u nikogo” dla pięciu progów na drugiej połowie.
Krzywa decyzyjna w punktach
R
set.seed(3931)
n <- 800
wiek <- rnorm(n) # predyktor standaryzowany
marker <- rnorm(n) # drugi predyktor
y <- rbinom(n, 1, plogis(-1.8 + 0.8 * wiek + 0.7 * marker))
ucz <- sample(c(TRUE, FALSE), n, replace = TRUE) # połowa do dopasowania, połowa do oceny
m <- glm(y ~ wiek + marker, family = binomial, subset = ucz)
p <- predict(m, newdata = data.frame(wiek, marker), type = "response")[!ucz]
yt <- y[!ucz]
nb <- function(p, y, pt) { # korzyść netto przy progu pt
tp <- sum(p >= pt & y == 1); fp <- sum(p >= pt & y == 0)
tp / length(y) - fp / length(y) * pt / (1 - pt)
}
c(n = length(yt), zdarzenia = sum(yt), TP_20 = sum(p >= .2 & yt == 1), FP_20 = sum(p >= .2 & yt == 0))
progi <- c(.05, .10, .20, .30, .40)
round(data.frame(prog = progi,
model = sapply(progi, function(t) nb(p, yt, t)),
wszyscy = sapply(progi, function(t) mean(yt) - (1 - mean(yt)) * t / (1 - t)),
nikt = 0), 3)Wynik w R
n zdarzenia TP_20 FP_20
399 62 48 125
prog model wszyscy nikt
1 0.05 0.116 0.111 0
2 0.10 0.085 0.062 0
3 0.20 0.042 -0.056 0
4 0.30 -0.001 -0.207 0
5 0.40 -0.005 -0.408 0Bibliografia oprogramowania
Wyniki pochodzą z uruchomienia pokazanego kodu w R 4.5.3 (funkcje pakietów base i stats). W pracy podaj wersję R, której faktycznie użyto (sessionInfo()).
- R: R Core Team. (2026). R: A language and environment for statistical computing (Version 4.5.3) [Computer software]. R Foundation for Statistical Computing. https://www.R-project.org/
Najczęstsze pytania
Jak wybrać zakres progów do krzywej decyzyjnej?
Z góry i merytorycznie: zapytaj, ile niepotrzebnych interwencji jest wartych jednego wykrycia. Próg 10% odpowiada dziewięciu, a 20% – czterem. Pokaż cały rozsądny zakres, a nie jeden najkorzystniejszy próg.
Czy korzyść netto może być ujemna?
Tak. Ujemna korzyść netto oznacza, że przy danym progu decyzje oparte na modelu przynoszą więcej szkody niż strategia „interwencja u nikogo”. Dotyczy to często strategii „u wszystkich” przy wysokich progach i źle skalibrowanych modeli.
Jak policzyć krzywą decyzyjną w R bez dodatkowych pakietów?
Dla każdego progu policz TP i FP: tp <- sum(p >= pt & y == 1), fp <- sum(p >= pt & y == 0), a potem tp/n - fp/n * pt/(1 - pt). Powtórz w sapply() dla wektora progów i narysuj wynik obok obu strategii domyślnych.
Powiązane hasła
Poradniki, w których użyjesz tego pojęcia
Krzywa decyzyjna (net benefit) i NRI
Korzyść netto w zakresie progów, strategie „wszyscy” i „nikt”, NRI kategorialny i ciągły z krytyką oraz dwa modele o tym samym AUC.
Czytaj →PoradnikModele predykcyjne: walidacja i kalibracja
Liczebność, przeuczenie, walidacja krzyżowa i bootstrap, LASSO i ridge, kalibracja, wynik Briera i TRIPOD+AI – na danych do pobrania, z kodem R.
Czytaj →Potrzebujesz wsparcia w analizie danych?
Wybierz ofertę dopasowaną do pracy dyplomowej albo profesjonalnego projektu naukowego.
Wyceń analizęOferta dla studentówBibliografia i dalsza literatura naukowa (APA 7)
- Vickers, A. J., & Elkin, E. B. (2006). Decision curve analysis: A novel method for evaluating prediction models. Medical Decision Making, 26(6), 565–574. https://doi.org/10.1177/0272989x06295361 ● Otwarty dostęp: pełny tekst
- Vickers, A. J., Van Calster, B., & Steyerberg, E. W. (2016). Net benefit approaches to the evaluation of prediction models, molecular markers, and diagnostic tests. BMJ, 352, Article i6. https://doi.org/10.1136/bmj.i6 ● Otwarty dostęp
- Vickers, A. J., van Calster, B., & Steyerberg, E. W. (2019). A simple, step-by-step guide to interpreting decision curve analysis. Diagnostic and Prognostic Research, 3(1), Article 18. https://doi.org/10.1186/s41512-019-0064-7 ● Otwarty dostęp
Cytowania BibTeX
@article{vickers2006decision, author={Vickers, Andrew J. and Elkin, Elena B.}, title={{Decision curve analysis: A novel method for evaluating prediction models}}, journal={Medical Decision Making}, year={2006}, volume={26}, number={6}, pages={565--574}, doi={10.1177/0272989x06295361}}@article{vickers2016net, author={Vickers, Andrew J. and Van Calster, Ben and Steyerberg, Ewout W.}, title={{Net benefit approaches to the evaluation of prediction models, molecular markers, and diagnostic tests}}, journal={BMJ}, year={2016}, volume={352}, eid={i6}, doi={10.1136/bmj.i6}}@article{vickers2019simple, author={Vickers, Andrew J. and van Calster, Ben and Steyerberg, Ewout W.}, title={{A simple, step-by-step guide to interpreting decision curve analysis}}, journal={Diagnostic and Prognostic Research}, year={2019}, volume={3}, number={1}, eid={18}, doi={10.1186/s41512-019-0064-7}}