Reputation: 19
I have calculated the transition matrix of a Markov state model with four metastable states. I would like to know the probability of transition between metastable states, for which I think I should obtain a 4x4 matrix.
I have tried to obtain said matrix with this code, but it turns out that in some entries of that matrix values greater than 1 appear, which seems strange to me:
nstates = 4
transition_matrix_meta = np.zeros((nstates, nstates))
for i in range(nstates):
for j in range(nstates):
pi_i = msm.pi[msm.metastable_sets[i]].sum()
T_i_to_j = msm.transition_matrix[msm.metastable_sets[i]][:,
msm.metastable_sets[j]]
P_i_to_j = pi_i * T_i_to_j.sum()
transition_matrix_meta[i, j] = P_i_to_j
print(transition_matrix_meta)
Is my code correct?
Upvotes: 0
Views: 74
Reputation: 712
Your code appears to be on the right, but there might be a normalization issue.
This modification ensures that each row of transition_matrix_meta sums to 1
nstates = 4
transition_matrix_meta = np.zeros((nstates, nstates))
for i in range(nstates):
for j in range(nstates):
pi_i = msm.pi[msm.metastable_sets[i]].sum()
T_i_to_j = msm.transition_matrix[msm.metastable_sets[i]][:, msm.metastable_sets[j]]
P_i_to_j = pi_i * T_i_to_j.sum()
transition_matrix_meta[i, j] = P_i_to_j
# Normalize the rows
transition_matrix_meta = transition_matrix_meta / transition_matrix_meta.sum(axis=1, keepdims=True)
print(transition_matrix_meta)
Upvotes: 0