コード例 #1
0
    def test_likelihood_simple_mostly_missing(self):
        small_cm = pd.DataFrame.from_dict(
            {
                "node0": [0, -1, -1],
                "node1": [1, 1, -1],
                "node2": [1, -1, -1],
                "node3": [1, -1, -1],
                "node4": [1, -1, -1],
            },
            orient="index",
        )
        priors = {0: {1: 1}, 1: {1: 1}, 2: {1: 1}}
        small_tree = cas.data.CassiopeiaTree(tree=self.small_net,
                                             character_matrix=small_cm,
                                             priors=priors)
        small_tree.parameters["stochastic_missing_probability"] = 0.3
        L = tree_metrics.calculate_likelihood_discrete(small_tree)
        self.assertTrue(np.isclose(L, -11.458928604116634))

        small_tree.parameters["mutation_rate"] = 0.5
        small_tree.parameters["stochastic_missing_probability"] = 0.2
        L = tree_metrics.calculate_likelihood_discrete(small_tree, )
        self.assertTrue(np.isclose(L, -11.09716890609409))

        small_tree.parameters.pop("stochastic_missing_probability")
        small_tree.parameters["heritable_missing_rate"] = 0.25
        L = tree_metrics.calculate_likelihood_discrete(small_tree, )
        self.assertTrue(np.isclose(L, -10.685658651089808))

        small_tree.parameters["stochastic_missing_probability"] = 0
        L = tree_metrics.calculate_likelihood_discrete(small_tree, )
        self.assertTrue(np.isclose(L, -10.549534744691526))
コード例 #2
0
    def test_bad_lineage_tracing_parameters(self):
        small_cm = pd.DataFrame.from_dict(
            {
                "node0": [1, -1, -1],
                "node1": [2, 1, -1],
                "node2": [2, -1, -1],
                "node3": [1, 2, 2],
                "node4": [1, 1, 2],
            },
            orient="index",
        )
        small_tree = cas.data.CassiopeiaTree(tree=self.small_net,
                                             character_matrix=small_cm)

        with self.assertRaises(TreeMetricError):
            small_tree.parameters["mutation_rate"] = -1
            tree_metrics.calculate_likelihood_continuous(small_tree)
        with self.assertRaises(TreeMetricError):
            small_tree.parameters["mutation_rate"] = -1
            tree_metrics.calculate_likelihood_discrete(small_tree)
        with self.assertRaises(TreeMetricError):
            small_tree.parameters["heritable_missing_rate"] = -1
            tree_metrics.calculate_likelihood_continuous(small_tree)
        with self.assertRaises(TreeMetricError):
            small_tree.parameters["heritable_missing_rate"] = 1.5
            tree_metrics.calculate_likelihood_discrete(small_tree)
        with self.assertRaises(TreeMetricError):
            small_tree.parameters["stochastic_missing_probability"] = -1
            tree_metrics.calculate_likelihood_continuous(small_tree)
        with self.assertRaises(TreeMetricError):
            small_tree.parameters["stochastic_missing_probability"] = 1.5
            tree_metrics.calculate_likelihood_continuous(small_tree)
コード例 #3
0
    def test_likelihood_set_internal_states(self):
        small_cm = pd.DataFrame.from_dict(
            {
                "node0": [1, -1, -1],
                "node1": [2, 1, -1],
                "node2": [2, -1, -1],
                "node3": [1, 2, 2],
                "node4": [1, 1, 2],
            },
            orient="index",
        )
        priors = {
            0: {
                1: 0.3,
                2: 0.7
            },
            1: {
                1: 0.3,
                2: 0.7
            },
            2: {
                1: 0.3,
                2: 0.7
            },
            3: {
                1: 0.3,
                2: 0.7
            },
        }
        small_tree = cas.data.CassiopeiaTree(tree=self.small_net,
                                             character_matrix=small_cm,
                                             priors=priors)
        small_tree.parameters["mutation_rate"] = 0.5
        small_tree.parameters["heritable_missing_rate"] = 0.25
        small_tree.parameters["stochastic_missing_probability"] = 0
        small_tree.reconstruct_ancestral_characters()
        L = tree_metrics.calculate_likelihood_discrete(
            small_tree,
            use_internal_character_states=True,
        )
        self.assertTrue(np.isclose(L, -24.57491637086155))

        small_tree.set_character_states("node7", [0, 0, 0])
        small_tree.set_character_states("node5", [0, 0, 0])
        small_tree.set_character_states("node6", [0, 0, 2])
        L = tree_metrics.calculate_likelihood_discrete(
            small_tree,
            use_internal_character_states=True,
        )
        self.assertTrue(np.isclose(L, -28.68500929005179))
コード例 #4
0
 def test_likelihood_sum_to_one(self):
     priors = {
         0: {
             1: 0.2,
             2: 0.8
         },
         1: {
             1: 0.2,
             2: 0.8
         },
         2: {
             1: 0.2,
             2: 0.8
         }
     }
     ls_branch = []
     ls_no_branch = []
     for (
             a,
             b,
     ) in itertools.product([0, 1, -1, 2], repeat=2):
         for a_, b_ in itertools.product([0, 1, -1, 2], repeat=2):
             small_net = nx.DiGraph()
             small_net.add_edges_from([("node2", "node0"),
                                       ("node2", "node1"),
                                       ("node3", "node2")])
             small_cm = pd.DataFrame.from_dict(
                 {
                     "node0": [a, a_],
                     "node1": [b, b_],
                 },
                 orient="index",
             )
             small_tree = cas.data.CassiopeiaTree(tree=small_net,
                                                  character_matrix=small_cm,
                                                  priors=priors)
             small_tree.parameters["mutation_rate"] = 0.5
             small_tree.parameters["heritable_missing_rate"] = 0.25
             small_tree.parameters["stochastic_missing_probability"] = 0.25
             L_no_branch = tree_metrics.calculate_likelihood_discrete(
                 small_tree,
                 use_internal_character_states=False,
             )
             L_branch = tree_metrics.calculate_likelihood_continuous(
                 small_tree,
                 use_internal_character_states=False,
             )
             ls_no_branch.append(np.exp(L_no_branch))
             ls_branch.append(np.exp(L_branch))
     self.assertTrue(np.isclose(sum(ls_branch), 1.0))
     self.assertTrue(np.isclose(sum(ls_no_branch), 1.0))
コード例 #5
0
    def test_likelihood_more_complex_case(self):
        small_cm = pd.DataFrame.from_dict(
            {
                "node0": [1, -1, -1, 1],
                "node1": [2, 1, -1, 1],
                "node2": [2, -1, -1, -1],
                "node3": [1, 2, 2, -1],
                "node4": [1, 1, 2, 1],
            },
            orient="index",
        )
        priors = {
            0: {
                1: 0.3,
                2: 0.7
            },
            1: {
                1: 0.3,
                2: 0.7
            },
            2: {
                1: 0.3,
                2: 0.7
            },
            3: {
                1: 0.3,
                2: 0.7
            },
        }
        small_tree = cas.data.CassiopeiaTree(tree=self.small_net,
                                             character_matrix=small_cm,
                                             priors=priors)

        small_tree.parameters["mutation_rate"] = 0.5
        small_tree.parameters["heritable_missing_rate"] = 0.25
        small_tree.parameters["stochastic_missing_probability"] = 0
        L = tree_metrics.calculate_likelihood_discrete(small_tree)
        self.assertTrue(np.isclose(L, -33.11623901010781))
コード例 #6
0
    def test_likelihood_bad_cases(self):
        small_tree = cas.data.CassiopeiaTree(tree=self.small_net)
        small_tree.parameters["stochastic_missing_probability"] = 0.2
        with self.assertRaises(TreeMetricError):
            tree_metrics.calculate_likelihood_discrete(small_tree)

        small_cm = pd.DataFrame.from_dict(
            {
                "node0": [1, -1, -1],
                "node1": [2, 1, -1],
                "node2": [2, -1, -1],
                "node3": [1, 2, 2],
                "node4": [1, 1, 2],
            },
            orient="index",
        )
        small_tree = cas.data.CassiopeiaTree(tree=self.small_net,
                                             character_matrix=small_cm)
        small_tree.parameters["stochastic_missing_probability"] = 0.2
        with self.assertRaises(TreeMetricError):
            tree_metrics.calculate_likelihood_discrete(small_tree)

        priors = {
            0: {
                1: 0.3,
                2: 0.7
            },
            1: {
                1: 0.3,
                2: 0.7
            },
            2: {
                1: 0.3,
                2: 0.7
            },
            3: {
                1: 0.3,
                2: 0.7
            },
        }
        small_tree = cas.data.CassiopeiaTree(tree=self.small_net,
                                             character_matrix=small_cm,
                                             priors=priors)
        small_tree.parameters["stochastic_missing_probability"] = 0.2

        with self.assertRaises(TreeMetricError):
            tree_metrics.calculate_likelihood_discrete(
                small_tree, use_internal_character_states=True)

        small_tree.set_character_states("node7", [0, 0, 0])
        small_tree.set_character_states("node5", [0, 0, 0])

        with self.assertRaises(TreeMetricError):
            tree_metrics.calculate_likelihood_discrete(
                small_tree,
                use_internal_character_states=True,
            )

        small_tree.set_character_states("node6", [0, 0, 1])
        L = tree_metrics.calculate_likelihood_discrete(
            small_tree,
            use_internal_character_states=True,
        )
        self.assertEqual(-np.inf, L)