def test_trajectories(self): P = np.array([[0.9, 0.1], [0.1, 0.9]]) # test number of trajectories M = 10 N = 10 trajs = msmgen.generate_trajs(P, M, N, start=0) assert len(trajs) == M # test statistics of starting state trajs = msmgen.generate_trajs(P, 1000, 1) ss = np.concatenate(trajs).astype(int) pi = msmana.stationary_distribution(P) piest = msmest.count_states(ss) / 1000.0 assert np.max(np.abs(pi - piest)) < 0.025 # test stopping state = starting state M = 10 trajs = msmgen.generate_trajs(P, M, N, start=0, stop=0) for traj in trajs: assert traj.size == 1 # test if we always stop at stopping state M = 100 stop = 1 trajs = msmgen.generate_trajs(P, M, N, start=0, stop=stop) for traj in trajs: assert traj.size == N or traj[-1] == stop assert stop not in traj[:-1]
def setUpClass(cls): P = np.array([[0.5, .25, .25, 0.], [0., .25, .5, .25], [.25, .25, .5, 0], [.25, .25, .25, .25], ]) dtrajs = generate_trajs(P, 5, 1000) msm_obj = pyerna.msm.MaximumLikelihoodMSM() msm_obj.estimate(dtrajs) cls.ck = msm_obj.cktest(3)
def test_trajectories(self): # test number of trajectories M = 10 N = 10 trajs = msmgen.generate_trajs(self.P, M, N, start=0, random_state=self.random_state) assert len(trajs) == M
def test_plot(self): P = np.array([[0.5, .25, .25, 0.], [0., .25, .5, .25], [.25, .25, .5, 0], [.25, .25, .25, .25], ]) dtrajs = generate_trajs(P, 5, 1000) msm_obj = pyemma.msm.MaximumLikelihoodMSM() msm_obj.estimate(dtrajs) ck = msm_obj.cktest(3) plot_cktest(ck)
def test_stop_eq_start(self): M = 10 N = 10 trajs = msmgen.generate_trajs(self.P, M, N, start=0, stop=0, random_state=self.random_state) for traj in trajs: assert traj.size == 1
def test_stats(self): # test statistics of starting state N = 5000 trajs = msmgen.generate_trajs(self.P, N, 1, random_state=self.random_state) ss = np.concatenate(trajs).astype(int) pi = msmana.stationary_distribution(self.P) piest = msmest.count_states(ss) / float(N) np.testing.assert_allclose(piest, pi, atol=0.025)
def test_stop(self): # test if we always stop at stopping state M = 100 N = 10 stop = 1 trajs = msmgen.generate_trajs(self.P, M, N, start=0, stop=stop, random_state=self.random_state) for traj in trajs: assert traj.size == N or traj[-1] == stop assert stop not in traj[:-1]
def simulate(self, N, start=None, dt=1, M=1): """ ToDo Document HMM or MM? generates a realization of the Hidden Markov Model :param N: int trajectory length in steps of the lag time :param start: int (default=None) - starting hidden state. If not given, will sample from the stationary distribution of the hidden transition matrix :param stop: int or int-array-like (default=None) - stopping hidden set. If given, the trajectory will be stopped before N steps once a hidden state of the stop set is reached :param dt: int - trajectory will be saved every dt time steps. Internally, the dt'th power of P is taken to ensure a more efficient simulation :return: ndarray - M discrete trajectories with length N/dt in a ndarray of shape (M, N/dt) """ import msmtools.generation as msmgen # sample hidden trajectory dtraj = msmgen.generate_trajs(self.transition_matrix, M, N, start=start, stop=None, dt=dt) dtraj = np.asarray(dtraj) return dtraj
def generate_trajs(self, M, N, start=None, stop=None, dt=1): """ Generates M random trajectories of length N each with time step dt """ from msmtools.generation import generate_trajs return generate_trajs(self._P, M, N, start=start, stop=stop, dt=dt)