SMR 是做什麼的?
指導 AI 編碼代理如何有效地與 SMR(基於摘要數據的孟德爾隨機化)C++ 程式碼庫協作。涵蓋架構、資料格式、建置系統、統計方法及常見陷阱。
概述
SMR 是一個用於進行基於摘要數據的孟德爾隨機化分析的 C++ 工具。本指南為 AI 代理提供有效導航與貢獻此程式碼庫所需的背景知識。
架構
程式碼庫主要分為以下模組:
src/smr.cpp:主程式入口,負責參數解析與執行流程控制src/io/:處理 BESD 及 MA 格式檔案的輸入/輸出src/stats/:統計方法實作,包括 IVW、MR-Egger、加權中位數法等src/utils/:通用工具函數,如記憶體管理與字串處理
資料格式
BESD 格式
用於儲存 SNP 效應值與標準誤的二元格式。每個 SNP 記錄包含染色體、位置、效應等位基因、Beta 值及 SE。
MA 格式
以文字為基礎的格式,包含 SNP 名稱、效應等位基因頻率(EAF)、Beta 值及 P 值。常見於 GWAS 摘要統計。
建置系統
使用 CMake 進行建置。基本用法:
mkdir build && cd build
cmake ..
make
需確保系統已安裝 C++17 相容的編譯器(如 GCC >= 7 或 Clang >= 5)。
統計方法
- IVW(逆變異數加權法):預設方法,加權各 SNP 效應值。
- MR-Egger:對水平多效性進行校正,需注意截距項的顯著性檢定。
- 加權中位數法:提供穩健估計,即使部分 SNP 違反假設仍適用。
常見陷阱
- 資料對齊:確保效應等位基因在暴露與結果數據集中一致。
- 缺失值處理:若 SNP 在結果數據中缺失,預設會排除該 SNP。
- 記憶體管理:處理大規模 GWAS 數據時可能耗用大量 RAM;建議使用
-m參數限制記憶體使用。 - 版本相容性:BESD 格式會隨版本演進,請參考
docs/format.md確認版本對應。
使用範例
./smr --bfile example --gwas-summary exposure.ma --out output
此命令會從 PLINK 二元檔案讀取 LD 參考,並使用 exposure.ma 進行 SMR 分析,結果輸出至 output.txt。
若要深入了解,請參閱 docs/ 目錄下的說明文件。