如何正确构建马尔可夫状态模型中亚稳态间的转移概率矩阵

11次阅读

如何正确构建马尔可夫状态模型中亚稳态间的转移概率矩阵

本文详解如何从全状态转移矩阵和稳态分布出发,准确计算亚稳态集合之间的粗粒化转移概率矩阵,并强调行归一化这一关键步骤,避免出现大于 1 的概率值。

在构建马尔可夫状态模型(MSM)后,常需将高维微观状态聚类为若干亚稳态(metastable states),并进一步推导这些亚稳态之间的有效转移行为——即一个 4×4 的亚稳态间转移概率矩阵 (也称 coarse-grained transition matrix)。该矩阵的第 (i, j) 项应表示:系统当前处于第 i 个亚稳态时,下一时间步 转移到第 j 个亚稳态的条件概率,因此每行必须满足概率公理:∑ⱼ P(i→j) = 1。

原始代码的逻辑方向正确:它利用微观稳态分布 π 对第 i 个亚稳态内所有状态加权,再乘以从该亚稳态到第 j 个亚稳态的所有微观转移概率之和,得到联合概率 P(当前在 i 且下一步进入 j)。但问题在于——这得到的是 联合概率 ,而非 条件概率。直接赋值后未做行归一化,导致各行和不为 1,甚至出现 >1 的数值(因 πᵢ 是子集权重,Tᵢ→ⱼ.sum() 是子矩阵元素和,二者乘积无上界约束)。

✅ 正确做法是:先计算未归一化的“流出强度”矩阵,再对每一行除以其行和,强制满足马尔可夫性:

nstates = 4 transition_matrix_meta = np.zeros((nstates, nstates))  for i in range(nstates):     for j in range(nstates):         # π_i:第 i 个亚稳态的总稳态概率质量         pi_i = msm.pi[msm.metastable_sets[i]].sum()         # T_i_to_j:从 i 中任意状态到 j 中任意状态的微观转移概率子矩阵         T_i_to_j = msm.transition_matrix[np.ix_(msm.metastable_sets[i],                                                   msm.metastable_sets[j])]         # P_i_to_j:联合概率(当前在 i 且下一步入 j)P_i_to_j = pi_i * T_i_to_j.sum()         transition_matrix_meta[i, j] = P_i_to_j  # ✅ 关键修正:行归一化 → 转为条件概率 P(j | i) transition_matrix_meta = transition_matrix_meta / transition_matrix_meta.sum(axis=1, keepdims=True)  # 验证:每行和应为 1(浮点精度内)assert np.allclose(transition_matrix_meta.sum(axis=1), 1.0)

⚠️ 注意事项:

  • 使用 np.ix_() 替代切片 [:, :] 可更安全地提取子矩阵(避免广播错误);
  • 若某亚稳态 i 的总流出概率为 0(如孤立态),归一化会触发除零警告,此时应显式设该行为 [0,…,1,…,0](自转移)或依据物理意义处理;
  • 该矩阵反映的是 隐含的、平均意义上的亚稳态跃迁动力学,并非严格意义上的马尔可夫链(除非满足强分离假设),但实践中广泛用于路径分析、速率估计与自由能景观构建。

最终所得 transition_matrix_meta 即为符合概率定义的 4×4 亚稳态转移矩阵,可直接用于后续分析,如计算平均首达时间、识别主导反应通道或可视化状态跃迁网络。

星耀云
版权声明:本站原创文章,由 星耀云 2026-01-03发表,共计1334字。
转载说明:转载本网站任何内容,请按照转载方式正确书写本站原文地址。本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。
text=ZqhQzanResources