mcpField
T
tooluniverse-diagnostic-test-evaluation

tooluniverse-diagnostic-test-evaluation

github.com/mims-harvardデータ・データベース1.8k123 回インストール2 日前に更新
リポジトリ

tooluniverse-diagnostic-test-evaluation について

固定カットオフ指標、ROC解析、ベイズ推定による検査後確率を扱う ToolUniverse スキルです。2×2表、連続スコア、または検査性能と有病率に応じた分析方法を案内します。

主な機能

  1. 01感度、特異度、予測値の算出
  2. 02連続スコアの ROC、AUC、Youden 閾値解析
  3. 03有病率から検査後確率を推定
  4. 04閾値選択と結果解釈の注意点

活用シーン

  1. 01固定カットオフ検査の2×2表を要約
  2. 02連続バイオマーカーの識別能を評価
  3. 03検査性能と有病率から陽性後の疾患確率を推定

MCP 対応

Epidemiology_diagnostic、ROC_analysis、Epidemiology_bayesian などの ToolUniverse ツールで診断分析を実行します。

インストール

コマンドをコピーしてターミナルで実行します。

$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を返します。

指標答える質問有病率に依存するか?
感度 = TP/(TP+FN)疾患がある人のうち、検査陽性となる割合は?いいえ
特異度 = TN/(TN+FP)疾患がない人のうち、検査陰性となる割合は?いいえ
PPV = TP/(TP+FP)陽性の場合、疾患がある確率は?はい — 大きく依存します
NPV = TN/(TN+FN)陰性の場合、疾患がない確率は?はい
LR+ = 感度/(1−特異度)陽性によって疾患のオッズがどれだけ上がるかいいえ
LR− = (1−感度)/特異度陰性によって疾患のオッズがどれだけ下がるかいいえ

PPV/NPVの落とし穴。 感度と特異度は検査の特性ですが、PPVとNPVは検査対象集団の疾患有病率に依存します。 感度・特異度が非常に高い検査でも、有病率の低い(スクリーニング)状況ではPPVが低くなります。症例対照デザインのPPV/NPVを引用してはいけません(その50/50の有病率は人為的なものです)。Epidemiology_bayesian(ステップ3)を使って、実際の有病率に基づいて計算してください。有病率に依存しない要約として、感度、特異度、尤度比を報告してください。

ステップ2 — 連続値のバイオマーカーに対するROC/AUC/最適カットオフ

検査スコアが連続値の場合、すべての閾値で評価します。

**ROC_analysis**ツールを優先してください。1回の呼び出しで構造化JSON(AUC+ブートストラップ95%信頼区間、Youden最適カットオフとその感度・特異度、任意の固定カットオフでの指標、ROC曲線)を返し、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(ブートストラップ95%信頼区間付き)、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を求められます。実際の有病率を入力してください。(例:有病率10%の場合、感度90%/特異度95%の検査で陽性となった後の確率は、95%ではなく約67%にすぎません。)

注意点(明記してください)

  • 有病率が示されていないPPV/NPVには意味がありません — 前提とする有病率を必ず示してください。
  • AUCは運用点を考慮しません。 AUCが高くても、実際に使用する閾値で検査が有用とは限りません。選択したカットオフでの感度・特異度も報告してください。
  • クラス不均衡。 陽性例が非常に少ない場合、ROC/AUCが良好でもPPVが低いことがあります。適合率–再現率曲線を検討し、実際の有病率におけるPPVを必ず報告してください。
  • スペクトラムバイアス。 明らかな患者と明らかな健常者を対象に測定した感度・特異度は、境界例を含む実世界の性能を過大評価します。
  • 評価に使用したものと同じデータで単一のカットオフを選ぶと、性能を楽観的に評価してしまいます — 保留データセットで閾値を検証してください。

正直な制限事項

  • これらは識別力/精度の指標であり、較正ではありません。識別力の高いモデルでも、較正の不十分な確率を出力することがあります。
  • AUC が1つだけでは比較できません。同じ患者を対象とした2つの検査を比較するには、対応のある AUC 検定(DeLong)を使用します。これはここで紹介する基本的なスクリプトの範囲を超えています。

関連するスキル

  • tooluniverse-statistical-modeling — スコアとオッズ比(OR)を算出するロジスティック回帰。
  • tooluniverse-epidemiological-analysis — 集団レベルのリスク、スクリーニングプログラムの指標。
  • tooluniverse-meta-analysis — 複数の研究にわたる診断精度を統合します。

コメント