Exemplo n.º 1
0
    def test_five_signatures_perturbed(self):
        weights = np.zeros((30, ))
        weights[3] = .4
        weights[7] = .2
        weights[13] = .2
        weights[17] = .1
        weights[23] = .1
        tumor_profile, context_counts = generate_tumor_profile(weights)

        # Perturb the counts by up to 6% more or less of value
        for k, v in context_counts.items():
            context_counts[k] = v * (1 + (np.random.rand() * 0.12) - 0.06)

        ds = DeconstructSigs(context_counts=context_counts)

        # Limit to two deconstructed signatures
        reconstructed_weights = ds.which_signatures(5)
        self.assertAlmostEqual(reconstructed_weights[3], .4, places=1)
        self.assertAlmostEqual(reconstructed_weights[7], .2, places=1)
        self.assertAlmostEqual(reconstructed_weights[13], .2, places=1)
        self.assertAlmostEqual(reconstructed_weights[17], .1, places=1)
        self.assertAlmostEqual(reconstructed_weights[23], .1, places=1)

        # Don't impose a signature limit to test that algorithm correctly deduces only five are necessary
        reconstructed_weights = ds.which_signatures()
        self.assertAlmostEqual(reconstructed_weights[3], .4, places=1)
        self.assertAlmostEqual(reconstructed_weights[7], .2, places=1)
        self.assertAlmostEqual(reconstructed_weights[13], .2, places=1)
        self.assertAlmostEqual(reconstructed_weights[17], .1, places=1)
        self.assertAlmostEqual(reconstructed_weights[23], .1, places=1)
Exemplo n.º 2
0
    def test_five_signatures_discard_insignificant(self):
        weights = np.zeros((30, ))
        weights[3] = .19
        weights[7] = .41
        weights[13] = .24
        weights[17] = .14
        weights[23] = .02
        tumor_profile, context_counts = generate_tumor_profile(weights)
        ds = DeconstructSigs(context_counts=context_counts)

        # Limit to five deconstructed signatures
        reconstructed_weights = ds.which_signatures(5)
        self.assertAlmostEqual(reconstructed_weights[3], .19, places=2)
        self.assertAlmostEqual(reconstructed_weights[7], .41, places=2)
        self.assertAlmostEqual(reconstructed_weights[13], .24, places=2)
        self.assertAlmostEqual(reconstructed_weights[17], .14, places=2)
        self.assertAlmostEqual(reconstructed_weights[23], 0, places=2)

        # Don't impose a signature limit to test that algorithm correctly deduces only five necessary and significant
        reconstructed_weights = ds.which_signatures()
        self.assertAlmostEqual(reconstructed_weights[3], .19, places=2)
        self.assertAlmostEqual(reconstructed_weights[7], .41, places=2)
        self.assertAlmostEqual(reconstructed_weights[13], .24, places=2)
        self.assertAlmostEqual(reconstructed_weights[17], .14, places=2)
        self.assertAlmostEqual(reconstructed_weights[23], 0, places=2)
Exemplo n.º 3
0
    def test_one_signature(self):
        weights = np.zeros((30, ))
        weights[0] = 1
        tumor_profile, context_counts = generate_tumor_profile(weights)
        ds = DeconstructSigs(context_counts=context_counts)

        # Limit to one deconstructed signatures
        reconstructed_weights = ds.which_signatures(1)
        self.assertAlmostEqual(reconstructed_weights[0], weights[0], places=2)

        # Don't impose a signature limit to test that algorithm correctly deduces only one are necessary
        reconstructed_weights = ds.which_signatures()
        self.assertAlmostEqual(reconstructed_weights[0], weights[0], places=2)
Exemplo n.º 4
0
    def test_three_signatures_with_associated(self):
        weights = np.zeros((30, ))
        weights[3] = .6
        weights[11] = .25
        weights[27] = .15
        tumor_profile, context_counts = generate_tumor_profile(weights)
        ds = DeconstructSigs(context_counts=context_counts)

        # Limit to two deconstructed signatures
        reconstructed_weights = ds.which_signatures(3, associated=[11, 27])
        self.assertAlmostEqual(reconstructed_weights[3], 0, places=2)

        # Don't impose a signature limit to test that algorithm correctly deduces only three are necessary
        reconstructed_weights = ds.which_signatures(associated=[11, 27])
        self.assertAlmostEqual(reconstructed_weights[3], 0, places=2)
Exemplo n.º 5
0
    def test_four_signatures(self):
        weights = np.zeros((30, ))
        weights[6] = .43
        weights[10] = .27
        weights[25] = .20
        weights[29] = .1
        tumor_profile, context_counts = generate_tumor_profile(weights)
        ds = DeconstructSigs(context_counts=context_counts)

        # Limit to four deconstructed signatures
        reconstructed_weights = ds.which_signatures(4)
        self.assertAlmostEqual(reconstructed_weights[6], .43, places=2)
        self.assertAlmostEqual(reconstructed_weights[10], .27, places=2)
        self.assertAlmostEqual(reconstructed_weights[25], .20, places=2)
        self.assertAlmostEqual(reconstructed_weights[29], .1, places=2)

        # Don't impose a signature limit to test that algorithm correctly deduces only fiour are necessary
        reconstructed_weights = ds.which_signatures()
        self.assertAlmostEqual(reconstructed_weights[6], .43, places=2)
        self.assertAlmostEqual(reconstructed_weights[10], .27, places=2)
        self.assertAlmostEqual(reconstructed_weights[25], .20, places=2)
        self.assertAlmostEqual(reconstructed_weights[29], .1, places=2)