Exemple #1
0
def test_mean(scale: Scale):
    true_mean = scale.low + scale.width / 2
    rv = norm(loc=true_mean, scale=scale.width / 10)
    xs = constants.target_xs
    pairs = [{
        "x": x,
        "density": rv.pdf(x)
    } for x in scale.denormalize_points(xs)]
    pd_norm = PointDensity.from_pairs(pairs, scale)
    calculated_mean = float(pd_norm.mean())
    assert true_mean == pytest.approx(calculated_mean, rel=1e-3, abs=1e-3)
Exemple #2
0
def test_density_norm_denorm_roundtrip(scale: Scale):
    rv = scipy.stats.logistic(loc=0.5, scale=0.15)
    normed_xs = np.linspace(0.01, 1, 201)
    normed_densities_truth_set = rv.pdf(normed_xs)
    xs = scale.denormalize_points(normed_xs)

    denormed_densities = scale.denormalize_densities(
        xs, normed_densities_truth_set)
    normed_densities = scale.normalize_densities(normed_xs, denormed_densities)

    assert np.allclose(normed_densities_truth_set,
                       normed_densities)  # type: ignore
Exemple #3
0
def point_density_from_scale(scale: Scale):
    scale_mid = scale.low + scale.width / 2
    rv = logistic(loc=scale_mid, scale=scale.width / 30)
    xs = scale.denormalize_points(constants.target_xs)

    densities = rv.pdf(xs)

    pairs = [{
        "x": x,
        "density": density
    } for (x, density) in zip(xs, densities)]
    return PointDensity.from_pairs(pairs, scale)
Exemple #4
0
def test_pdf(xscale: Scale):
    normed_test_loc = 0.5
    normed_test_s = 0.1
    test_loc = xscale.denormalize_point(normed_test_loc)
    test_s = normed_test_s * xscale.width

    ergoLogisticMixture = LogisticMixture(
        components=[
            Logistic(
                loc=xscale.denormalize_point(0.2),
                s=0.5 * xscale.width,
                scale=xscale,
            ),
            Logistic(loc=test_loc, s=test_s, scale=xscale),
        ],
        probs=[1.8629593e-29, 1.0],
    )
    ergoLogistic = Logistic(loc=test_loc, s=test_s, scale=xscale)

    ## Make sure it integrates to 1
    _xs = xscale.denormalize_points(np.linspace(0, 1, 100))
    densities_logistic = np.array([float(ergoLogistic.pdf(x)) for x in _xs])
    densities_mixture = np.array(
        [float(ergoLogisticMixture.pdf(x)) for x in _xs])
    auc_logistic = float(trapz(densities_logistic, x=_xs))
    auc_mixture = float(trapz(densities_mixture, x=_xs))
    assert (1 == pytest.approx(auc_logistic, abs=0.03) == pytest.approx(
        auc_mixture, abs=0.03))

    if not isinstance(xscale, LogScale):
        scipydist = scipy.stats.logistic(test_loc, test_s)

        for x in np.linspace(xscale.denormalize_point(0),
                             xscale.denormalize_point(1), 10):
            assert (scipydist.pdf(x) == pytest.approx(
                float(ergoLogistic.pdf(x)), rel=1e-3) == pytest.approx(
                    float(ergoLogisticMixture.pdf(x)), rel=1e-3))
Exemple #5
0
 def denormalize(self, scale: Scale):
     denormed_xs = scale.denormalize_points(self.xs)
     denormed_densities = scale.denormalize_densities(denormed_xs, self.densities)
     return self.__class__(denormed_xs, denormed_densities, self.weight)