
本文详解如何从全状态转移矩阵和稳态分布出发,准确计算亚稳态集合之间的粗粒化转移概率矩阵,并强调行归一化这一关键步骤,避免出现大于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 亚稳态转移矩阵,可直接用于后续分析,如计算平均首达时间、识别主导反应通道或可视化状态跃迁网络。










