def __init__(self, reversible, statdist_constraint, sparse, count_mode="sliding"): super().__init__(statdist_constraint=statdist_constraint, sparse=sparse, count_mode=count_mode) maxerr = 1e-12 if statdist_constraint: est = MaximumLikelihoodMSM(reversible=reversible, maxerr=maxerr, stationary_distribution_constraint=self. stationary_distribution, sparse=sparse) else: est = MaximumLikelihoodMSM(reversible=reversible, maxerr=maxerr, sparse=sparse) est.fit(self.counts) self._msm = est.fetch_model() self._msm_estimator = est self._expectation = 31.73 if not reversible: self._timescales = np.array([310.49376926, 8.48302712, 5.02649564]) else: self._timescales = np.array([310.87, 8.5, 5.09])
def test_msm_submodel_statdist(disconnected_states, lag, reversible, count_mode): count_model = TransitionCountEstimator( lagtime=lag, count_mode=count_mode).fit(disconnected_states.dtrajs).fetch_model() for cset in count_model.connected_sets(): submodel = count_model.submodel(cset) estimator = MaximumLikelihoodMSM(reversible=reversible).fit(submodel) msm = estimator.fetch_model() C = submodel.count_matrix P = C / np.sum(C, axis=-1)[:, None] import scipy.linalg as salg eigval, eigvec = salg.eig(P, left=True, right=False) pi = np.real(eigvec)[:, np.where( np.real(eigval) > 1. - 1e-3)[0]].squeeze() if np.any(pi < 0): pi *= -1. pi = pi / np.sum(pi) assert_array_almost_equal(msm.stationary_distribution, pi, decimal=1, err_msg="Failed for cset {} with " "cmat {}".format(cset, submodel.count_matrix))
def estimate_markov_model(dtrajs, lag, **kw) -> MarkovStateModel: statdist_constraint = kw.pop('statdist', None) connectivity = kw.pop('connectivity_threshold', 0.) sparse = kw.pop('sparse', False) count_model = TransitionCountEstimator(lagtime=lag, count_mode="sliding", sparse=sparse).fit(dtrajs).fetch_model() count_model = count_model.submodel_largest(probability_constraint=statdist_constraint, connectivity_threshold=connectivity) est = MaximumLikelihoodMSM(stationary_distribution_constraint=statdist_constraint, sparse=sparse, **kw) est.fit(count_model) return est.fetch_model()