예제 #1
0
def test_rvs_smoke():
    # Just a smoke test for now.
    rvs = tweedie(mu=150, p=1.5, phi=500.).rvs(10000)
    assert len(rvs) == 10000
    rvs = tweedie(mu=np.repeat(150, 100),
                  p=np.repeat(1.5, 100),
                  phi=np.repeat(500, 100)).rvs(100)
    assert len(rvs) == 100
    rvs1 = tweedie(mu=150, p=1.5, phi=500).rvs(100000, random_state=42)
    rvs2 = tweedie(mu=150, p=1.5, phi=500).rvs(100000, random_state=42)
    assert_allclose(rvs1, rvs2)
예제 #2
0
def test_cdf_to_ppf(mu, p, phi):
    if (p == 1) and (mu == 10) and (phi == 1):
        pytest.xfail('Lose of precision here')
    if (p >= 1) & (p < 2):
        x = np.arange(0, 2 * mu, mu / 10)
    else:
        x = np.arange(0.1, 2 * mu, mu / 10)
    qs = tweedie(mu=mu, p=p, phi=phi).cdf(x)
    ys = tweedie(mu=mu, p=p, phi=phi).ppf(qs)
    xs = tweedie(mu=mu, p=p, phi=phi).cdf(ys)
    assert_allclose(qs, xs)
예제 #3
0
def test_R_compat_cdf():
    test_run = False
    lines = test_results.split('\n')
    start_idx = lines.index("--BEGIN TEST CASE--")
    rows = len(lines)
    py_tests = 0
    while start_idx + 1 < rows:
        stop_idx = lines.index('--END TEST CASE--', start_idx)
        cdf = None
        for line in lines[start_idx + 1:stop_idx]:
            key, value = line.split('=', 1)
            if key == 'power':
                power = eval(value)
            if key == 'mu':
                mu = eval(value)
            if key == 'phi':
                phi = eval(value)
            if key == 'cdf':
                cdf = eval(value)
        start_idx = stop_idx + 1
        py_tests += 1
        if cdf is not None:
            test_run = True
            tcdf = tweedie(p=power, mu=mu, phi=phi).cdf(test_ys)
            if power != 3:
                assert_allclose(cdf, tcdf, rtol=1e-8, atol=1e-8)
            else:
                # I think the R function might be off here
                assert_allclose(cdf, tcdf, rtol=1e-3, atol=1e-3)
    assert num_tests == py_tests
    assert test_run
예제 #4
0
def test_cdf_to_ppf(mu, p, phi):
    if (p == 1) and (mu == 10) and (phi == 1):
        pytest.xfail('Lose of precision here')
    if (p >= 1) & (p < 2):
        x = np.arange(0, 2 * mu, mu / 10)
    else:
        x = np.arange(0.1, 2 * mu, mu / 10)
    qs = tweedie(mu=mu, p=p, phi=phi).cdf(x)
    ys = tweedie(mu=mu, p=p, phi=phi).ppf(qs)
    xs = tweedie(mu=mu, p=p, phi=phi).cdf(ys)
    # this test case kept failing in one of the travis ci env (Diego: it would fine on my machine)
    # most values match besides one or two. I suspect this happen due to some numeric rounding in
    # one step of the calculation (e.g. 0.12346 would give one value but some very close like 0.1235 would
    # give another mass point, and crash the test). this is very hard to reproduce, is it only happens in
    # a specific env on the test suite
    if (p == 1) and (mu == 5) and (phi == 1):
        assert (qs == xs).sum() >= 18
    else:
        assert_allclose(qs, xs)
예제 #5
0
def test_R_compat_density():
    lines = test_results.split('\n')
    start_idx = lines.index("--BEGIN TEST CASE--")
    rows = len(lines)
    py_tests = 0
    while start_idx + 1 < rows:
        stop_idx = lines.index('--END TEST CASE--', start_idx)
        for line in lines[start_idx + 1:stop_idx]:
            key, value = line.split('=', 1)
            value = value.replace('Inf', 'np.inf')
            if key == 'power':
                power = eval(value)
            if key == 'mu':
                mu = eval(value)
            if key == 'phi':
                phi = eval(value)
            if key == 'density':
                density = eval(value)
        start_idx = stop_idx + 1
        py_tests += 1
        tdensity = tweedie(p=power, mu=mu, phi=phi).pdf(test_ys)
        assert_allclose(density, tdensity, rtol=1e-8, atol=1e-8)
    assert num_tests == py_tests
예제 #6
0
def test_mean_close(mu, p, phi):
    if (p <= 1) | (p >= 2):
        pytest.xfail('Do I want to program this?')
    rvs = tweedie(mu=mu, p=p, phi=phi).rvs(10000, random_state=42)
    assert_allclose(mu, rvs.mean(), rtol=.05)
예제 #7
0
def test_extreme_nans():
    y = tweedie(mu=1, p=1.02, phi=1.02).pdf(30)
    assert np.isfinite(y)
    y = tweedie(mu=1, p=1.02, phi=1.02).cdf(30)
    assert np.isfinite(y)
예제 #8
0
def test_variance_close(mu, p, phi):
    if (p <= 1) | (p >= 2):
        pytest.xfail('Do I want to program this?')
    rvs = tweedie(mu=mu, p=p, phi=phi).rvs(10000, random_state=42)
    assert_allclose(phi * mu**p, rvs.var(), rtol=.1)
예제 #9
0
 def loglike_p(p):
     return -tweedie.tweedie(mu=res.mu, p=p, phi=res.scale).logpdf(
         res._endog).sum()