Esempio n. 1
0
def discrete_exhaustive_test():
    model = random_model(2)
    obs_distns = [d.Categorical(K=3,alpha_0=1.),d.Categorical(K=3,alpha_0=1.)]
    stateseq = np.random.randint(2,size=10)
    data = np.array([obs_distns[a].rvs() for a in stateseq])
    target_val = compute_likelihood_enumeration(obs_distns=obs_distns,data=data,**model)
    likelihood_check(target_val=target_val,data=data,obs_distns=obs_distns,**model)
Esempio n. 2
0
def like_hand_test_1():
    likelihood_check(
        obs_distns=[d.Categorical(weights=row) for row in np.eye(2)],
        trans_matrix=np.eye(2),
        init_distn=np.array([1., 0.]),
        data=np.zeros(10, dtype=int),
        target_val=0.)
Esempio n. 3
0
def like_hand_test_5():
    likelihood_check(
        obs_distns=[d.Categorical(weights=row) for row in np.eye(2)],
        trans_matrix=np.array([[0.9, 0.1], [0.2, 0.8]]),
        init_distn=np.array([1., 0.]),
        data=np.tile((0, 1), 5),
        target_val=5 * np.log(0.1) + 4 * np.log(0.2))
Esempio n. 4
0
def like_hand_test_4():
    likelihood_check(
        obs_distns=[d.Categorical(weights=row) for row in np.eye(2)],
        trans_matrix=np.array([[0., 1.], [1., 0.]]),
        init_distn=np.array([1., 0.]),
        data=np.tile([0, 1], 5).astype(int),
        target_val=0.)
Esempio n. 5
0
def likelihood_hand_tests():
    yield make_nose_tuple(
        _likelihood_helper,
        obs_distns=[d.Categorical(weights=row) for row in np.eye(2)],
        trans_matrix=np.array([[0.9, 0.1], [0.1, 0.9]]),
        init_distn=np.array([1., 0.]),
        data=np.zeros(10, dtype=int),
        target_val=9 * np.log(0.9))

    yield make_nose_tuple(
        _likelihood_helper,
        obs_distns=[d.Categorical(weights=row) for row in np.eye(2)],
        trans_matrix=np.array([[0.9, 0.1], [0.2, 0.8]]),
        init_distn=np.array([1., 0.]),
        data=np.tile((0, 1), 5),
        target_val=5 * np.log(0.1) + 4 * np.log(0.2))
Esempio n. 6
0
def discrete_geweke_test(fig):
    Nstates = 2
    Nemissions = 2
    alpha = 3.
    init_state_concentration=3.
    T = 10
    num_iter = 10000
    num_checks = 10

    obs_distns = [distributions.Categorical(K=Nemissions,alpha_0=1.)
            for _ in range(Nstates)]

    hmm = models.HMM(
            alpha=alpha,init_state_concentration=init_state_concentration,
            obs_distns=obs_distns)

    # generate state sequences and parameters from the prior
    prior_stateseqs = []
    prior_weights = []
    for itr in xrange(num_iter):
        hmm.resample_model() # sample parameters from the prior
        _, stateseq = hmm.generate(T,keep=False)
        prior_stateseqs.append(stateseq)
        prior_weights.append(hmm.obs_distns[0].weights)
    prior_stateseqs = np.array(prior_stateseqs)
    prior_weights = np.array(prior_weights)

    # generate state sequences and parameters using Gibbs
    hmm.generate(T,keep=True)
    s = hmm.states_list[0]

    gibbs_stateseqs = []
    gibbs_weights = []
    for itr in xrange(num_iter):
        s.generate_obs() # resamples data given state sequence, obs params
        hmm.resample_model() # resamples everything else as usual
        gibbs_stateseqs.append(s.stateseq)
        gibbs_weights.append(hmm.obs_distns[0].weights)
    gibbs_stateseqs = np.array(gibbs_stateseqs)
    gibbs_weights = np.array(gibbs_weights)

    # test that they look similar by checking probability of co-assignment
    time_indices = np.arange(T)
    for itr in xrange(num_checks):
        i,j = np.random.choice(time_indices,replace=False,size=2)
        prior_prob_of_coassignment = (prior_stateseqs[:,i] == prior_stateseqs[:,j]).std()
        gibbs_prob_of_coassignment = (gibbs_stateseqs[:,i] == gibbs_stateseqs[:,j]).std()

        assert np.isclose(
                prior_prob_of_coassignment,gibbs_prob_of_coassignment,
                rtol=0.025,atol=0.025,
                )

    # test that they look similar by checking parameters
    testing.populations_eq_quantile_plot(prior_weights,gibbs_weights,fig=fig)
    figpath = os.path.join(figure_dir_path,'discrete_geweke_test_weights.pdf')
    plt.savefig(figpath)
Esempio n. 7
0
def likelihood_exhaustive_tests():

    ### discrete data

    for i in range(2):
        model = random_model(2)
        obs_distns = [
            d.Categorical(K=3, alpha_0=1.),
            d.Categorical(K=3, alpha_0=1.)
        ]
        stateseq = np.random.randint(2, size=10)
        data = np.array([obs_distns[a].rvs() for a in stateseq])
        target_val = compute_likelihood_enumeration(obs_distns=obs_distns,
                                                    data=data,
                                                    **model)
        yield make_nose_tuple(_likelihood_helper,
                              target_val=target_val,
                              data=data,
                              obs_distns=obs_distns,
                              **model)

    # Gaussian data

    for i in range(2):
        model = random_model(3)
        obs_distns = [
            d.Gaussian(mu=np.random.randn(2), sigma=np.eye(2)),
            d.Gaussian(mu=np.random.randn(2), sigma=np.eye(2)),
            d.Gaussian(mu=np.random.randn(2), sigma=np.eye(2))
        ]
        stateseq = np.random.randint(3, size=10)
        data = np.vstack([obs_distns[a].rvs() for a in stateseq])
        target_val = compute_likelihood_enumeration(obs_distns=obs_distns,
                                                    data=data,
                                                    **model)
        yield make_nose_tuple(_likelihood_helper,
                              target_val=target_val,
                              data=data,
                              obs_distns=obs_distns,
                              **model)