Skip to main content
Glama

AMR-Climate Atlas — 気候の抗菌薬耐性への因果帰属

3つのプロジェクトからなる気候・健康ポートフォリオのプロジェクト2(../harvard-dataverse-climate-health-projects.md 参照)。 スコープ: ../amr-climate-causal-attribution-scoping.md ・構築計画: ../amr-climate-causal-attribution-phases.md ・詳細レポート全文: docs/paper.md。

ステータス: 全4フェーズ完了。 EU/EEAパネル(29か国、2000〜2023年、4つの病原体・抗菌薬の組み合わせ)、適切に検証された因果モデル、ゲノムによるクロスチェック、ライブのStreamlitアプリ、ライブデータソースを公開するMCPサーバー、そして自動化された評価ゲート付き検証パイプラインが整っている。

アプリのスクリーンショット: K. pneumoniae/Carbapenems の組み合わせ。2023年のギリシャが耐性分布の最上部にハイライトされ、グラフの上に因果テストの注意書きが表示されている

調査結果

二方向(国+年)固定効果パネル回帰。それぞれの結果が「有意」と見なされる前に、200回以上の順列プラセボ検定を必須で実施する:

組み合わせ

n

係数

パラメトリックp値

置換検定p値

E. coli / フルオロキノロン

642

+0.11

0.77

0.62

E. coli / 第3世代セファロスポリン

642

+0.21

0.54

0.31

K. pneumoniae / カルバペネム(2010-2022年、消費量調整済み)

355

−1.30

0.008

0.000

S. aureus / MRSA

667

−0.13

0.89

0.69

4つのうち3つの組み合わせでは、どこにも気候の影響は見られない。 唯一の例外であるK. pneumoniae カルバペネム耐性(ESAC-Netの消費量で調整した2010〜2022年サブサンプル)は、実在のものです(1国を抜いた状態でも安定し、COVID-19由来ではない)が、独立したゲノムシーケンシングデータ(NCBI Pathogen Detection / MicroBIGG-E)によって方向性も裏付けられ(負の符号が一致し、表現型耐性率との相関 r=+0.38)、ただし2000〜2023年の全パネルには現れず、また抗菌薬の消費量はそれを制御するはずのモデル内でも有意ではない。つまり、真に因果が確認された気候→AMR 伝搬というより、現実に存在するが狭いサンプル期間独自のパターンと読むのが適切。

この結果は実際の品質保証(QA)プロセスを経てきたものです。独立したテストパスが、消費量調整モデルに置換テストがないことを検出し、さらにその後ロバスト性のチェックで、交絡因子のカラム選択のバグ、つまり消費量が当初の報告のように実際にはこのモデルに入っていなかったというバグ、が取り扱われた。どちらも明らかにsettingを良くするためにではなく、docs/paper.mdに平たんに開示されている。

Related MCP server: DMAP-AI MCP Server

このリポジトリの内容

app.py                         Streamlit atlas — combo explorer, causal-test caveat, rankings
mcp_server/                    live-data MCP server (NASA POWER + BigQuery, not the frozen CSV)
data/
  eu_eea_pilot_panel.csv       joined country-year-combo panel (join_panel.py's output)
  validation_baseline.json     accepted "known good" snapshot for the eval-gate pipeline
  raw/                         gitignored raw pulls (ECDC, NASA POWER, ESAC-Net, EPI)
validation_runs/               timestamped JSON logs from validate_pipeline.py runs
docs/
  phase1_access_check.md       access-verification memo
  phase3_scoping.md            causal-design scoping, grounded in the real pilot data
  phase4_scoping.md            scale-up fork (WHO GLASS vs. BigQuery vs. deepen EU/EEA) + genomic cross-check
  paper.md                     full write-up: methods, bugs found and fixed, results
src/amr_climate_atlas/
  config.py                    country lists, centroids, DOIs, ECDC/NASA POWER/BigQuery constants
  fetch_ears_net.py            EARS-Net resistance rates via ECDC Atlas (fully scriptable, see below)
  fetch_esac_net.py            antibiotic-consumption confounder (static XLSX annexes, 2010-2022)
  fetch_weather_anomaly.py     daily weather per EU/EEA country centroid (NASA POWER)
  fetch_confounders.py         EPI 2024 tabular confounder from Harvard Dataverse
  join_panel.py                joins resistance + weather + EPI into the country-year panel
  stage3_identification.py     two-way FE model + mandatory permutation test + lag check, per combo
  compare_genomic_phenotypic.py genomic (BigQuery) vs. phenotypic (EARS-Net) cross-check
  validate_pipeline.py         automated eval-gate: rerun + placebo-sanity-check + baseline drift check
.github/workflows/validate.yml ready-to-run CI (fires once this repo is pushed to GitHub)

最初に注目に値する2つの所見

  1. ECDCのSurveillance Atlas のエクスポートは、ヘッド(UI)導入ではなく、完全にスクリプト化可能です。 エクスポートは型通りのパラメータ化されたGET送信を行い、そのdownloadTokenIdパラメータは実際にはサーバーさいで検証されていません。セッション・クッキーが初期化されれば、その値はどんな値でもそのまま機能します。fetch_ears_net.pyは、指定した病原菌-抗菌薬の組み合わせで「国×年」の全グリッドを、わずか2つのHTTPリクエストで取得します。

  2. DataverseのAPI データは、デフォルトの python-requests ユーザーエージェントに対しても403を返します。 — この仕様どこにも文書化されておらず、ブラウザに近い User-Agent が必要になります(config.DATAVERSE_REQUEST_HEADERS参照)。

クイックスタート

python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt

PYTHONPATH=src python -m amr_climate_atlas.fetch_ears_net        # ECDC EARS-Net resistance rates
PYTHONPATH=src python -m amr_climate_atlas.fetch_esac_net        # antibiotic consumption confounder
PYTHONPATH=src python -m amr_climate_atlas.fetch_weather_anomaly # NASA POWER, EU/EEA centroids
PYTHONPATH=src python -m amr_climate_atlas.fetch_confounders     # EPI 2024 from Dataverse
PYTHONPATH=src python -m amr_climate_atlas.join_panel            # join panel
PYTHONPATH=src python -m amr_climate_atlas.stage3_identification # causal model + permutation test

streamlit run app.py                                            # the live atlas

MCPサーバー — 固定的CSVではなく、ライブデータ

mcp_server/ という、このプロジェクトの2つのデータソースを Model Context Protocol を介して公開します。そのため MCP 互換のクライアント(Claude Desktop、カスタムエージェントなど)は、eu_eea_pilot_panel.csv だけを見るのではなく、ライブの気象データやライブのゲノムAMRを照会することができます。は、Anthropic が公式提供する mcp Python SDK で実現しています(このスコープの初期稿が使用した架空の「MCP 2.0」/「Agent Plugins」という表現ではなく、用語の正しい修正と実のAPI・アプリの相違点(多くのチュートリアルが使う FastMCP クラスは、現在のSDKからは削除されている)は mcp_server/README.md を参照)。仮想入っただけではなく、実際の外部プロセスクライアント(mcp_server/test_external_client.py)でテスト済み — パリの実際の気象データ、フランスの大腸菌菌株について実際のカルバペネム遺伝子の頻度(16.83%)を確認。セットアップや、命名の特徴(NCBIは自身のスキーマではでは大腸菌を "E.coli and Shigella" グループに格納していて、"Escherichia coli" ではない)は mcp_server/README.md にご覧ください。

自動評価ゲート検証

validate_pipeline.py は stage3_identification.py の当てはめ + 置換テストを自動化して、パイプライン内でも再実行可能なゲートにしています。具体的には、置換テストの帰無分布が縮退して見える場合(置換ロジックが静かに壊れたことをチェックするための状態)か、結果が保存済みのベースラインから大きく乖離としていれば失敗します。この設計は、人間が偶然にもバグを見つけることだけを待つのでなく、上記の交絡因子バグを自動的に発見することを目指しています。GitHub Actionsワークフロー(.github/workflows/validate.yml)は、リポジトリをGitHubに上げればプッシュのたびにこれを実行する準備が整です。

延期項目 / 既定では取得しないデータ

GRDI v1.10(ラスタGeoTIFF形式、932MB)と EnvClim(2.6BGバイト、geopackage)は、国×年のパネル構造向けではないグリッド/サブナショナルなデータで、.future のサブナショナルビルのために意味があるかどうか考えていますが、fetch_confounders.pyがそれらのファイル一覧を表示で、将来のサブナショナル構築の際に、GISツールの導入の価値があるか判断しておくのに役立ちます。

Related MCP Connectors

Related MCP Servers