suppressPackageStartupMessages(library(pROC))
d <- read.csv("marker.csv")
r <- roc(d$disease, d$marker, levels = c(0, 1), direction = "<", quiet = TRUE)
ci <- ci.auc(r, method = "delong")
cat(sprintf("n = %d diseased, %d healthy; AUC = %.3f (95%% CI %.3f to %.3f, DeLong)\n", sum(d$disease == 1), sum(d$disease == 0), ci[2], ci[1], ci[3]))
pos <- d$marker[d$disease == 1]; neg <- d$marker[d$disease == 0]
cuts <- sort(unique(d$marker)); j <- sapply(cuts, function(c) mean(pos >= c) + mean(neg < c) - 1)
best <- cuts[which.max(j)]
cat(sprintf("Youden cut-off (chosen on these data): %.2f ng/mL; sensitivity %.2f, specificity %.2f\n", best, mean(pos >= best), mean(neg < best)))
