New to Claude Skills? Learn how to install them →

mims-harvard on GitHub

Diagnostic Test Evaluation

Free

Evaluate test accuracy and biomarker performance effectively.

Get this skill

Free · Opens the source repo

What Diagnostic Test Evaluation does

The Diagnostic Test Evaluation skill provides a comprehensive toolkit for assessing the accuracy of diagnostic tests and biomarkers. It allows users to analyze test results against a gold standard, whether that involves a binary 2x2 table or continuous biomarker scores. By utilizing this skill, users can derive key metrics such as sensitivity, specificity, positive predictive value (PPV), negative predictive value (NPV), and likelihood ratios, which are essential for understanding how well a test performs in a clinical setting.

The skill operates in three distinct steps. First, for tests represented in a 2x2 table, users can input true positives, false positives, true negatives, and false negatives to receive vital metrics that summarize the test's performance. Next, when dealing with continuous biomarker scores, the skill facilitates the generation of receiver operating characteristic (ROC) curves and area under the curve (AUC) metrics, allowing users to evaluate test performance across various thresholds. The Youden index is also calculated, providing an optimal cutoff point that balances sensitivity and specificity.

Lastly, the skill incorporates Bayesian analysis to convert test results into post-test probabilities, taking into account the pre-test probability of disease. This feature emphasizes the importance of prevalence in interpreting PPV and NPV, which can be misleading without context. Overall, this skill is designed for researchers, clinicians, and data analysts who need to rigorously evaluate diagnostic tests and biomarkers in their work.

When to use it

Use this skill when you have test results and a gold standard to evaluate the accuracy of a diagnostic test or biomarker.

When not to use it

This skill is not suitable for cases where you lack a gold standard for comparison or when you need to assess model calibration rather than discrimination.

What you can build with it

Evaluating a New Diagnostic Test

You have a new test for a disease and want to assess its accuracy using a 2x2 table of test results.

Analyzing Continuous Biomarker Data

You have continuous scores from a biomarker and need to determine the optimal cutoff for diagnosis.

Calculating Post-Test Probabilities

You want to understand the probability of disease given a positive test result and the test's sensitivity and specificity.

How to install Diagnostic Test Evaluation

View source

1. Install with the skills CLI

npx skills add mims-harvard/tooluniverse/tooluniverse-diagnostic-test-evaluation --agent claude-code

2. Or install it manually

Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.

Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs

Inside SKILL.md

Written by mims-harvard

Diagnostic Test / Biomarker Accuracy Evaluation

Judge how well a test or biomarker discriminates disease — at a fixed cutoff (2×2) or across all cutoffs (ROC) — and turn a result into a probability of disease.

Which case are you in?

You have…Go to
A 2×2 table (TP/FP/TN/FN) at a fixed cutoffStep 1 (Epidemiology_diagnostic)
A continuous biomarker score + true labelsStep 2 (ROC / AUC / Youden, Python)
A test's sens/spec + a patient's pre-test probabilityStep 3 (Epidemiology_bayesian)

Step 1 — Fixed-cutoff metrics from a 2×2 table

tu run Epidemiology_diagnostic '{"operation":"diagnostic","tp":90,"fp":10,"tn":180,"fn":20}'

Returns sensitivity, specificity, PPV, NPV, accuracy, LR_pos, LR_neg, and the sample prevalence.

MetricQuestion it answersDepends on prevalence?
Sensitivity = TP/(TP+FN)Of those WITH disease, what fraction test positive?No
Specificity = TN/(TN+FP)Of those WITHOUT disease, what fraction test negative?No
PPV = TP/(TP+FP)If positive, what's the chance of disease?Yes — strongly
NPV = TN/(TN+FN)If negative, what's the chance of being disease-free?Yes
LR+ = sens/(1−spec)How much a positive raises the odds of diseaseNo
LR− = (1−sens)/specHow much a negative lowers the oddsNo

The PPV/NPV trap. Sensitivity and specificity are properties of the test; PPV and NPV depend on the disease prevalence in the tested population. A test with great sens/spec has poor PPV in a low-prevalence (screening) setting. Never quote PPV/NPV from a case-control design (its 50/50 prevalence is artificial) — compute them for the real-world prevalence with Epidemiology_bayesian (Step 3). Report sensitivity, specificity, and likelihood ratios as the prevalence-independent summary.

Step 2 — ROC / AUC / optimal cutoff for a continuous biomarker

When the test is a continuous score, evaluate across all thresholds:

Prefer the ROC_analysis tool — one call returns structured JSON (AUC + bootstrap 95% CI, Youden-optimal cutoff with its sens/spec, optional metrics at a fixed cutoff, and the ROC curve), and works under the MCP server without a shell:

ROC_analysis(scores=[...], labels=[0,1,...])          # inline arrays
ROC_analysis(csv_path="scores.csv", cutoff=0.6)        # or a CSV (cols: label, score)

The bundled script is the equivalent CLI form:

python skills/tooluniverse-diagnostic-test-evaluation/scripts/roc_analysis.py --input scores.csv
# scores.csv columns: label (1=disease, 0=healthy), score (continuous biomarker)

Both report AUC (with a bootstrap 95% CI), the Youden-optimal cutoff (max sensitivity+specificity−1) and its sens/spec.

AUCDiscrimination
0.5no better than chance
0.7–0.8acceptable
0.8–0.9excellent
>0.9outstanding
  • The Youden cutoff weights sensitivity and specificity equally; if false negatives and false positives have different costs, pick the threshold from the clinical tradeoff, not Youden.
  • Once you choose a cutoff, build its 2×2 and run Step 1 for the fixed-cutoff metrics at that operating point.

Step 3 — Post-test probability (Bayes)

Turn a result into the probability of disease for a given pre-test probability/prevalence:

tu run Epidemiology_bayesian '{"operation":"bayesian","prevalence":0.10,
  "sensitivity":0.90,"specificity":0.95,"test_result":"positive"}'

Returns pre_test_odds, the LR, and post_test_probability. This is how you get the real-world PPV: plug the true prevalence in. (Example: a 90%/95% test at 10% prevalence gives a post-positive probability of only ~67%, not 95%.)

Gotchas (state these)

  • PPV/NPV without a stated prevalence are meaningless — always give the prevalence they assume.
  • AUC ignores the operating point. A high AUC doesn't tell you the test is useful at the threshold you'll actually use — report sens/spec at the chosen cutoff too.
  • Class imbalance. With very few positives, ROC/AUC can look good while PPV is poor; consider a precision-recall curve and always report PPV at the real prevalence.
  • Spectrum bias. Sens/spec measured on clearly-sick vs clearly-healthy subjects overestimate real-world performance on borderline cases.
  • Single cutoff chosen on the same data it's evaluated on is optimistic — validate the threshold on a held-out set.

Honest limitations

  • These are discrimination/accuracy metrics, not calibration — a well-discriminating model can still output poorly-calibrated probabilities.
  • A single AUC compares nothing; to compare two tests on the same patients, use a paired AUC test (DeLong) — beyond the basic script here.

Related skills

  • tooluniverse-statistical-modeling — logistic regression that produces the score, ORs.
  • tooluniverse-epidemiological-analysis — population-level risk, screening program metrics.
  • tooluniverse-meta-analysis — pool diagnostic accuracy across studies.

Frequently asked questions about Diagnostic Test Evaluation

Similar skills