Exemple #1
0
 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])
Exemple #2
0
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))
Exemple #3
0
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()