多模板MCMC贝叶斯分析是一个用于能谱拟合的Python工具包,它利用马尔可夫链蒙特卡洛(MCMC)方法进行贝叶斯分析,能够同时拟合多个模板谱。
- 支持多模板能谱的同时拟合
- 基于emcee的高效MCMC采样
- 多种先验分布选择(均匀分布、正态分布、对数正态分布、截断正态分布)
- 全面的后验分布与拟合结果分析
- 生成美观的可视化图表
- 支持中英文双语HTML报告生成
- 交互式图表支持(使用Plotly)
- 自动时间戳输出目录
- 详细的参数统计分析(均值、中位数、方差、多种置信区间)
- 克隆仓库:
git clone https://github.com/username/mtmcmc.git
cd mtmcmc- 安装依赖:
pip install -r requirements.txt- 编辑
config.py文件,设置数据路径、MCMC参数和其他选项 - 运行主程序:
python mtmcmc.py项目包含一个示例脚本,可以生成合成数据并运行分析:
python example.py编辑config.py文件可以配置以下参数:
TARGET_SPECTRUM: 目标能谱数据文件路径TEMPLATE_SPECTRA: 模板能谱数据文件路径列表
OUTPUT_DIR: 结果输出目录ADD_TIMESTAMP: 是否在输出目录中添加时间戳子目录
在config.py中,您可以配置以下MCMC相关参数:
# MCMC walkers数量
NWALKERS = 32
# MCMC采样步数
NSTEPS = 5000
# MCMC预热步数
BURNIN = 1000
# 是否显示进度条
PROGRESS = True
# 使用的CPU核心数,None表示使用全部可用核心
NCORES = None
# MCMC移动策略配置
# 每个元素是一个元组 (move, weight),weight表示该移动策略的使用权重
# 可用的移动策略:
# - emcee.moves.DESnookerMove(): 差分进化Snooker移动
# - emcee.moves.DEMove(): 差分进化移动
# - emcee.moves.GaussianMove(): 高斯移动
# - emcee.moves.KDEMove(): 核密度估计移动
# - emcee.moves.StretchMove(): 伸展移动
MCMC_MOVES = [
(emcee.moves.DESnookerMove(), 0.8), # 使用80%的Snooker移动
(emcee.moves.DEMove(), 0.2), # 使用20%的差分进化移动
]MCMC移动策略(moves)是控制采样器如何探索参数空间的重要设置。程序提供了多种移动策略供选择:
-
DESnookerMove: 差分进化Snooker移动
- 优点:对高维参数空间有很好的探索能力
- 适用:复杂的高维参数空间
-
DEMove: 差分进化移动
- 优点:结合了多个walkers的信息
- 适用:需要walkers之间协作的采样
-
GaussianMove: 高斯移动
- 优点:简单且高效
- 适用:参数空间较为简单的情况
-
KDEMove: 核密度估计移动
- 优点:能够适应复杂的后验分布
- 适用:多峰分布或非高斯分布
-
StretchMove: 伸展移动
- 优点:计算开销小
- 适用:需要快速采样的情况
您可以通过调整MCMC_MOVES列表来配置不同的移动策略组合。每个移动策略都有一个权重值,表示该策略被使用的概率。权重值应该满足:
sum(weight for _, weight in MCMC_MOVES) == 1.0默认配置使用80%的Snooker移动和20%的差分进化移动,这种组合在大多数情况下都能提供良好的采样效果。您可以根据具体问题调整这些权重或添加其他移动策略。
PRIORS: 各模板的先验分布设置,支持以下分布类型:uniform: 均匀分布,参数为min和maxnormal: 正态分布,参数为mu和sigmalognormal: 对数正态分布,参数为mu和sigmatruncnorm: 截断正态分布,参数为min、max、mu和sigma
DEFAULT_PRIOR: 默认先验分布设置
ERROR_HANDLING: 误差处理方式('target'、'template'或'both')HTML_REPORT: 是否生成HTML报告INTERACTIVE_PLOTS: HTML报告中是否包含交互式图表TEMPLATE_DIR: HTML模板目录HTML_LANGUAGES: HTML报告语言设置,可选值: ["zh"], ["en"], ["zh", "en"]
mtmcmc.py: 主程序data_loader.py: 数据加载与预处理模块model.py: 模型定义和先验分布模块mcmc_sampler.py: MCMC采样模块analyzer.py: 结果分析模块visualizer.py: 可视化模块(支持中英文双语图表)html_reporter.py: HTML报告生成模块(支持中英文双语报告)config.py: 配置文件example.py: 示例脚本
输入数据文件应为文本格式,每行三列:能量、计数、误差。例如:
0.0 10.5 1.2
0.1 11.2 1.3
...
分析结果将保存在输出目录中,包括:
- 模板权重的后验分布
- 拟合结果与残差分析
- 模板贡献分析
- 误差贡献分析
- 参数统计分析(均值、中位数、方差、多种置信区间)
- 综合HTML报告(中文和/或英文)
对每个拟合参数提供以下统计量:
- 中位数值
- 平均值
- 标准差
- 方差
- MAP估计值(最大后验概率估计)
- 68% 置信区间
- 95% 置信区间
- 99.7% 置信区间
- 上下误差范围
本项目采用MIT许可证。详见LICENSE文件。
欢迎贡献代码、报告问题或提出改进建议。