马尔科夫链蒙特卡洛(MCMC)模拟系统
项目介绍
本项目是一个基于MATLAB开发的马尔科夫链蒙特卡洛(MCMC)数值模拟框架。该系统主要用于解决复杂高维概率空间中的采样问题,当目标分布的概率密度函数过于复杂而无法进行直接采样时,本工具能够生成具有代表性的随机样本。这些样本可进一步用于数值积分、参数的后验概率推断以及物理、金融等领域的随机分析。
功能特性
- 多链并行架构:支持同时启动多个独立的马尔科夫链,并从不同的起始点出发,以便全面探索状态空间并验证收敛性。
- 自适应动力学调整:在预热阶段内置了动态接受率调整机制,根据实时反馈自动微调建议分布的步长,以逼近高维空间的最优接受率。
- 严谨的后处理机制:集成了自动预热期(Burn-in)截断和样本变薄(Thinning)功能,有效消除初始非稳态样本的干扰并降低样本间的自相关性。
- 科学的收敛性诊断:内置Gelman-Rubin(R-hat)统计量计算功能,通过对比链间方差与链内方差,为采样是否达到平稳分布提供量化依据。
- 全方位可视化套件:提供轨迹图、边缘分布图、自相关函数图及二维联合分布云图,直观展现采样过程和后验分布形态。
系统要求- 环境:MATLAB R2018b 或更高版本。
- 工具箱:建议安装 Statistics and Machine Learning Toolbox(用于调用核密度估计与分位数计算函数)。
实现逻辑说明系统的核心执行逻辑如下:
- 参数初始化:设定目标空间的维度、链的数量、总迭代次数以及数据处理参数(如预热比例和变薄因子)。
- 目标函数定义:以对数概率密度(Log-PDF)的形式定义目标分布。代码中内置了一个典型的双峰高斯混合分布作为示例,体现了系统处理非凸、多峰分布的能力。
- Metropolis-Hastings 循环:
*
建议样本生成:基于当前状态,利用对称的随机游走(正态分布)生成建议跳转点。
*
接受/拒绝逻辑:在对数空间内计算接受概率 $alpha$,通过对比随机数与接受阈值决定是否跳转,有效防止了计算过程中的数值溢出风险。
*
步长反馈:在预热期内,每隔 100 步根据当前接受率与目标接受率(23.4%)的比例动态调整建议分布的步长。
- 数据清洗:剔除前 20% 的不稳定样本,并根据变薄因子对剩余序列进行等间隔抽样。
- 统计诊断与推断:计算各维度的 R-hat 值,并提取均值、中位数及 95% 置信区间等关键后验统计量。
关键算法与函数分析
- Metropolis-Hastings 采样器:这是系统的心脏。它通过构建满足细致平衡方程的马尔科夫链,确保平稳分布指向目标分布。代码实现了基于对数概率的接受概率计算,增强了算法在极小概率区域的鲁棒性。
- Gelman-Rubin (R-hat) 诊断算法:该算法用于评估多条链是否已融合至同一分布。当 R-hat 值接近 1.0 时,说明采样过程已收敛且样本具有科学有效性。
- 自相关函数 (ACF) 计算:通过计算不同滞后步长下的样本相关系数,评估马尔科夫链的独立性,辅助确定最优的变薄因子。
- 核密度估计 (KDE):在可视化模块中,利用非参数化方法从样本点拟合概率密度曲线,相比直方图能更平滑地展现后验分布形态。
- 多元正态模拟 (mvnpdf):程序内置了多元正态分布概率密度的手工实现,确保了在缺少相关工具箱的环境下仍能准确计算目标分布的权重。
- 二维联合密度云图:结合了散点分布与等高线追踪技术,用于揭示参数间的相关性和多峰分布的拓扑结构。