mcpField
T
tooluniverse-diagnostic-test-evaluation

tooluniverse-diagnostic-test-evaluation

github.com/mims-harvard数据与数据库1.8k123 次安装2 天前更新
代码仓库

关于 tooluniverse-diagnostic-test-evaluation

面向分析诊断检测或生物标志物数据的 ToolUniverse 技能,涵盖固定阈值指标、ROC 分析和贝叶斯后验概率计算。可从 2×2 表、连续评分或检测性能与患病率出发,选择相应方法评估结果。

主要功能

  1. 01计算灵敏度、特异度及预测值
  2. 02连续评分的 ROC、AUC 与 Youden 阈值分析
  3. 03根据患病率计算后验患病概率
  4. 04提供阈值选择与结果解读注意事项

适用场景

  1. 01汇总固定阈值检测的 2×2 表
  2. 02评估连续生物标志物的区分能力
  3. 03结合检测性能和患病率估算阳性后的患病概率

MCP 相关

该技能通过 ToolUniverse 工具执行诊断分析,包括 Epidemiology_diagnostic、ROC_analysis 和 Epidemiology_bayesian。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mims-harvard/tooluniverse --skill tooluniverse-diagnostic-test-evaluation

安装后在 Claude Code 中输入/tooluniverse-diagnostic-test-evaluation确认已加载。

附带文件scripts/roc_analysis.pytest_roc_analysis.py

详细介绍

诊断检测 / 生物标志物准确性评估

评估检测或生物标志物区分疾病的能力——在固定阈值下(2×2),或在所有阈值下(ROC)——并将检测结果转换为患病概率。

你属于哪种情况?

你有……前往
固定阈值下的 2×2 表(TP/FP/TN/FN)步骤 1(Epidemiology_diagnostic)
连续型生物标志物评分 + 真实标签步骤 2(ROC / AUC / Youden,Python)
检测的敏感度/特异度 + 患者的检测前概率步骤 3(Epidemiology_bayesian)

步骤 1 — 根据 2×2 表计算固定阈值指标

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

返回 sensitivity、specificity、PPV、NPV、accuracy、LR_pos、LR_neg 和样本的 prevalence。

指标回答的问题是否受患病率影响?
Sensitivity = TP/(TP+FN)在患病者中,有多少比例检测结果为阳性?否
Specificity = TN/(TN+FP)在未患病者中,有多少比例检测结果为阴性?否
PPV = TP/(TP+FP)如果结果为阳性,患病的概率是多少?是——影响很大
NPV = TN/(TN+FN)如果结果为阴性,未患病的概率是多少?是
LR+ = sens/(1−spec)阳性结果会使患病几率提高多少否
LR− = (1−sens)/spec阴性结果会使患病几率降低多少否

PPV/NPV 陷阱。 敏感度和特异度是检测本身的属性;PPV 和 NPV 取决于受检人群中的疾病患病率。 敏感度/特异度很高的检测,在低患病率(筛查)场景下,PPV 仍可能很低。切勿引用病例对照研究中的 PPV/NPV(其 50/50 的患病率是人为设定的)——应使用 Epidemiology_bayesian(步骤 3),按真实患病率计算。作为不受患病率影响的摘要,应报告敏感度、特异度和似然比。

步骤 2 — 连续型生物标志物的 ROC / AUC / 最优阈值

当检测结果是连续评分时,应评估所有阈值:

优先使用 ROC_analysis 工具——一次调用即可返回结构化 JSON(AUC + bootstrap 95% CI、Youden 最优阈值及其敏感度/特异度、固定阈值下的可选指标,以及 ROC 曲线),并且无需 shell 即可在 MCP 服务下运行:

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

附带的脚本提供等效的 CLI 形式:

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

两者都会报告 AUC(含 bootstrap 95% CI)、Youden 最优阈值(使敏感度 + 特异度 − 1 最大的阈值)及其敏感度/特异度。

AUC区分能力
0.5不优于随机猜测
0.7–0.8可接受
0.8–0.9优秀
>0.9卓越
  • Youden 阈值对敏感度和特异度赋予相同权重;如果假阴性和假阳性的代价不同,应根据临床权衡选择阈值,而不是使用 Youden 阈值。
  • 选择阈值后,构建相应的 2×2 表,并执行步骤 1,计算该工作点下的固定阈值指标。

步骤 3 — 检测后概率(贝叶斯)

根据给定的检测前概率/患病率,将检测结果转换为患病概率:

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

返回 pre_test_odds、LR 和 post_test_probability。这就是计算现实世界 PPV 的方法:代入真实患病率。(例如:敏感度为 90%、特异度为 95% 的检测,在患病率为 10% 时,阳性后的患病概率仅约为 67%,而不是 95%。)

注意事项(应明确说明)

  • 未说明患病率的 PPV/NPV 毫无意义——务必注明其假设的患病率。
  • AUC 不考虑工作点。 AUC 高并不代表检测在实际采用的阈值下有用——还应报告所选阈值下的敏感度/特异度。
  • 类别不平衡。 阳性样本极少时,ROC/AUC 可能看起来不错,但 PPV 却很低;可考虑精确率-召回率曲线,并务必报告真实患病率下的 PPV。
  • 谱系偏倚。 在明确患病者与明确健康者中测得的敏感度/特异度,会高估检测在现实世界边界病例中的表现。
  • 在同一数据上选择并评估单一阈值会导致结果过于乐观——应在留出集上验证该阈值。

局限性说明

  • 这些是区分能力/准确性指标,而非校准指标——区分能力强的模型仍可能输出校准不佳的概率。
  • 单个 AUC 无法用于比较;若要比较同一批患者的两项测试,请使用配对 AUC 检验(DeLong)——这超出了此处基础脚本的范围。

相关技能

  • tooluniverse-statistical-modeling — 生成评分和 OR 的逻辑回归。
  • tooluniverse-epidemiological-analysis — 群体层面的风险、筛查项目指标。
  • tooluniverse-meta-analysis — 汇总多项研究中的诊断准确性。

评论

支持 Markdown