コード例 #1
0
ファイル: test_em.py プロジェクト: annaebair/superurop
 def test_trunc_log_density(self):
     mu = 0
     sigma = 1
     a = -1
     b = 1
     data = np.array([-0.5, 0, 0.5])
     expected_dist = s.truncnorm(loc=mu, scale=sigma, a=a, b=b)
     actual_dist = TruncatedNormalDistribution(mu=mu,
                                               sigma=sigma,
                                               lower=a,
                                               upper=b)
     expected = expected_dist.logpdf(data)
     actual = actual_dist.log_density(data)
     assert (actual == expected).all()
コード例 #2
0
ファイル: test_em.py プロジェクト: annaebair/superurop
 def test_estimate_parameters_trunc_norm_neg_mean(self):
     mu = -2
     sigma = 1
     a = -3
     b = -1
     data = np.random.normal(loc=mu, scale=sigma, size=1000)
     data = np.array(list(filter(lambda x: x > a and x < b, data)))
     dist = TruncatedNormalDistribution(mu=mu,
                                        sigma=sigma,
                                        lower=a,
                                        upper=b)
     actual = dist.estimate_parameters(data, np.ones((data.shape)))
     new_mu = dist.mu
     new_sigma = dist.sigma
     assert isclose(mu, new_mu, abs_tol=0.5)
     assert new_sigma > 0
コード例 #3
0
ファイル: test_em.py プロジェクト: annaebair/superurop
 def test_trunc_log_density_shifted(self):
     mu = 3
     sigma = 2
     a = 0
     b = 4
     data = np.array([0.5, 1, 2, 3, 3.9])
     expected_dist = s.truncnorm(loc=mu,
                                 scale=sigma,
                                 a=(a - mu) / sigma,
                                 b=(b - mu) / sigma)
     actual_dist = TruncatedNormalDistribution(mu=mu,
                                               sigma=sigma,
                                               lower=a,
                                               upper=b)
     expected = expected_dist.logpdf(data)
     actual = actual_dist.log_density(data)
     for i in range(len(expected)):
         assert isclose(actual[i], expected[i], abs_tol=1e-10)
コード例 #4
0
ファイル: test_em.py プロジェクト: annaebair/superurop
 def test_trunc_log_density_shifted_small_sig_outside_range(self):
     mu = 3
     sigma = 0.5
     a = 1
     b = 4
     data = np.array([-1, 0, 0.5, 5])
     expected_dist = s.truncnorm(loc=mu,
                                 scale=sigma,
                                 a=(a - mu) / sigma,
                                 b=(b - mu) / sigma)
     actual_dist = TruncatedNormalDistribution(mu=mu,
                                               sigma=sigma,
                                               lower=a,
                                               upper=b)
     expected = expected_dist.logpdf(data)
     expected = np.where(expected == np.inf, -9999, expected)
     expected = np.where(expected == -np.inf, -9999, expected)
     actual = actual_dist.log_density(data)
     for i in range(len(expected)):
         assert isclose(actual[i], expected[i], abs_tol=1e-10)
コード例 #5
0
ファイル: test_em.py プロジェクト: annaebair/superurop
    def test_truncated_p_values_same_range(self):
        data1 = np.random.normal(loc=0, scale=1, size=1000)
        data2 = np.random.normal(loc=3, scale=1, size=1000)

        data1 = np.array(list(filter(lambda x: x > 0 and x < 4, data1)))
        data2 = np.array(list(filter(lambda x: x > 0 and x < 4, data2)))

        dist1 = TruncatedNormalDistribution(mu=0.5, sigma=1, lower=0, upper=4)
        dist2 = TruncatedNormalDistribution(mu=1.5, sigma=1, lower=0, upper=4)

        data = np.concatenate((data1, data2))
        dist_list = [dist1, dist2]
        mixture = Data_Rep(data, dist_list)

        dist_weight = len(data2) / len(data)
        expected = [1.0, dist_weight, 0.0]
        observed = []
        for i in [-1, 1.5, 5]:
            observed.append(mixture.get_p_value(i))

        for i in range(len(expected)):
            assert isclose(expected[i], observed[i], abs_tol=0.05)
コード例 #6
0
ファイル: calculations.py プロジェクト: annaebair/superurop
def generate_data(x):

    # Censored 1
    # predata1 = np.random.normal(loc=-1, scale=1, size=100000)
    # censored_data_1 = np.where(predata1 <= -2, -2, predata1)
    # censored_data_1 = np.where(censored_data_1 >= 3, 3, censored_data_1)
    # censored_dist_1 = CensoredNormalDistribution(mu=1.0, sigma=1, lower=-2, upper=3)
    # censored_dist_1_rand = CensoredNormalDistribution(mu=-1, sigma=1, lower=-2, upper=3)

    # Censored 2
    # predata2 = np.random.normal(loc=3, scale=1, size=1000)
    # censored_data_2 = np.where(predata2 <= -3, -3, predata2)
    # censored_data_2 = np.where(censored_data_2 >= 4, 4, censored_data_2)
    # censored_dist_2 = CensoredNormalDistribution(mu=1.5, sigma=1, lower=-3, upper=4)

    # Censored 2 over same range as Censored 1
    # predata2 = np.random.normal(loc=2, scale=1, size=100000)
    # censored_data_2 = np.where(predata2 <= -2, -2, predata2)
    # censored_data_2 = np.where(censored_data_2 >= 3, 3, censored_data_2)
    # censored_dist_2_rand = CensoredNormalDistribution(mu=2, sigma=1, lower=-2, upper=3)

    # Truncated 1
    predata3 = np.random.normal(loc=1, scale=1, size=100000)
    truncated_data_1 = np.array(
        list(filter(lambda x: x > 0 and x < 6, predata3)))
    truncated_dist_1_rand = TruncatedNormalDistribution(mu=0.5,
                                                        sigma=1,
                                                        lower=0,
                                                        upper=6)

    # Truncated 2
    # predata4 = np.random.normal(loc=5, scale=1, size=146500)
    # truncated_data_2 = np.array(list(filter(lambda x: x > 4 and x < 6, predata4)))
    # truncated_dist_2_rand = TruncatedNormalDistribution(mu=3, sigma=1.004, lower=4, upper=6)

    # Truncated 2 over same range as Truncated 1
    predata4 = np.random.normal(loc=5, scale=1, size=146500)
    truncated_data_2 = np.array(
        list(filter(lambda x: x > 0 and x < 6, predata4)))
    truncated_dist_2_rand = TruncatedNormalDistribution(mu=1.8,
                                                        sigma=1,
                                                        lower=0,
                                                        upper=6)

    # Normal 1
    # normal_data_1 = np.random.normal(loc=-1, scale=1, size=100000)
    # normal_dist_1 = mixem.distribution.NormalDistribution(mu=0.5, sigma=1)
    # normal_dist_1_rand = mixem.distribution.NormalDistribution(mu=-3, sigma=3)

    # Normal 2
    # normal_data_2 = np.random.normal(loc=3, scale=2, size=100000)
    # normal_dist_2 = mixem.distribution.NormalDistribution(mu=3.434, sigma=1.964)
    # normal_dist_2_rand = mixem.distribution.NormalDistribution(mu=1, sigma=0.5)

    # trunced_normal = np.array(list(filter(lambda x: x > 0 and x < 2, normal_data_2)))
    # trunced_normal_dist = TruncatedNormalDistribution(mu=3, sigma=2, lower=0, upper=2)

    mixture, joint_pdf, data = organize_data(x, truncated_data_1,
                                             truncated_data_2,
                                             truncated_dist_1_rand,
                                             truncated_dist_2_rand)
    return mixture, joint_pdf, data