Пример #1
0
    def test_learn_h_graph(self):

        experiment = load_test_experiment()

        emission = likelihood.NegBinBetaBinLikelihood()
        emission.h = experiment.h
        emission.learn_parameters(experiment.x, experiment.l)

        N = experiment.l.shape[0]
        M = experiment.h.shape[0]

        prior = cn_model.CopyNumberPrior(N, M, perfect_cn_prior(experiment.cn))
        prior.set_lengths(experiment.l)

        model = cn_model.HiddenMarkovModel(N, M, emission, prior)
        
        _, cn_init = model.optimal_state()

        graph = genome_graph.GenomeGraph(emission, prior, experiment.adjacencies, experiment.breakpoints)
        graph.init_copy_number(cn_init)

        h_init = experiment.h + experiment.h * 0.05 * np.random.randn(*experiment.h.shape)

        estimator = em.HardAssignmentEstimator(num_em_iter=1)
        estimator.learn_param(graph, 'h', h_init)
Пример #2
0
    def test_evaluate_q_derivative(self):

        cn, h, l, phi, r, x = generate_simple_data()

        emission = likelihood.NegBinBetaBinLikelihood(x, l)
        emission.h = h

        N = l.shape[0]
        M = h.shape[0]

        prior = cn_model.CopyNumberPrior(perfect_cn_prior(cn))
        prior.set_lengths(l)
        
        model = cn_model.HiddenMarkovModel(N, M, emission, prior, [(0, N)])

        log_posterior, cns, resps = model.posterior_marginals()

        estimator = em.ExpectationMaximizationEstimator()

        params = [emission.h_param, emission.r_param, emission.M_param, emission.z_param, emission.hdel_mu_param, emission.loh_p_param]
        value = np.concatenate([p.value for p in params])
        idxs = np.array([p.length for p in params]).cumsum() - params[0].length

        remixt.tests.utils.assert_grad_correct(
            estimator.evaluate_q, estimator.evaluate_q_derivative,
            value, model, cns, resps, params, idxs)
Пример #3
0
    def test_learn_h(self):

        experiment = load_test_experiment()

        h_init = experiment.h * (1. +
                                 0.05 * np.random.randn(*experiment.h.shape))

        emission = likelihood.NegBinBetaBinLikelihood(experiment.x,
                                                      experiment.l)
        emission.h = h_init

        print experiment.h, h_init

        N = experiment.l.shape[0]
        M = experiment.h.shape[0]

        prior = cn_model.CopyNumberPrior(experiment.l)

        model = cn_model.HiddenMarkovModel(N,
                                           M,
                                           emission,
                                           prior,
                                           experiment.chains,
                                           normal_contamination=False)

        estimator = em.ExpectationMaximizationEstimator()
        estimator.learn_param(model, emission.h_param)
Пример #4
0
    def test_log_likelihood_cn_betabinnegbin_cornercases(self):

        cn, h, l, phi, r, x = self.generate_simple_data()

        emission = likelihood.NegBinBetaBinLikelihood()
        emission.h = np.array([1e-16, 10., 1e-16])

        cn[:, :, :] = np.array([[1., 1.], [0., 1.], [1., 0.]])

        ll = emission.log_likelihood(x, l, cn)
        ll_partial_h = emission.log_likelihood_partial_param(x, l, cn, 'h')

        self.assertTrue(not np.any(np.isnan(ll)))
        self.assertTrue(not np.any(np.isnan(ll_partial_h)))
Пример #5
0
    def test_simple_genome_graph(self):

        x, cn, h, l, phi = generate_tiny_data()

        emission = likelihood.NegBinBetaBinLikelihood(x, l)
        emission.h = h
        emission.phi = phi

        N = l.shape[0]
        M = h.shape[0]

        prior = cn_model.CopyNumberPrior(l)

        adjacencies = [(0, 1), (1, 2)]
        breakpoints = [frozenset([(0, 1), (2, 0)])]

        for i in xrange(1000):
            print i
            random.seed(i)
            np.random.seed(i)

            # Modify copy number from known true
            cn_init = cn.copy()
            for n in xrange(N):
                m = np.random.randint(low=1, high=M)
                for allele in xrange(2):
                    cn_init[n, m, allele] += np.random.randint(low=-1, high=1)

            # print np.random.randint(low=-1, high=1, size=cn_init[:, 1:, :].shape)
            # cn_init[:, 1:, :] += np.random.randint(low=-1, high=1, size=cn_init[:, 1:, :].shape)

            graph = genome_graph.GenomeGraphModel(N, M, emission, prior,
                                                  adjacencies, breakpoints)
            graph.init_copy_number(cn_init, init_breakpoints=True)

            graph.optimize()

            if not np.all(graph.breakpoint_copy_number[['cn_1', 'cn_2']].values
                          == np.array([1, 0])):
                print cn
                print cn_init
                print graph.segment_cn
                print graph.breakpoint_copy_number
                import IPython
                IPython.embed()
                raise

            self.assertTrue(
                np.all(graph.breakpoint_copy_number[['cn_1', 'cn_2']].values ==
                       np.array([1, 0])))
Пример #6
0
    def test_log_likelihood_cn_betabinnegbin_partial_h(self):

        cn, h, l, phi, r, x = self.generate_simple_data()

        emission = likelihood.NegBinBetaBinLikelihood()

        def evaluate_log_likelihood(h, x, l, cn, phi):
            emission.h = h
            return emission.log_likelihood(x, l, cn)

        def evaluate_log_likelihood_partial_h(h, x, l, cn, phi):
            emission.h = h
            return emission._log_likelihood_partial_h(x, l, cn)

        remixt.tests.utils.assert_grad_correct(
            evaluate_log_likelihood, evaluate_log_likelihood_partial_h, h, x,
            l, cn, phi)