예제 #1
0
def test_with_swap_rate():

    dm = DataMatrix(length=N)
    for precision, guess_rate, swap_rate in itertools.product(
        (500, 2000), (0, .25), (0, .25)):
        dm.target = np.random.randint(0, 359, N)
        dm.nontarget1 = dm.target + 180
        dm.responses = dm.target[:]
        n_guess = int(N * guess_rate)
        n_swap = int(N * swap_rate)
        dm.responses[:n_guess] = np.random.randint(0, 359, n_guess)
        dm.responses[n_guess:n_guess +
                     n_swap] = dm.nontarget1[n_guess:n_guess + n_swap]
        dm.responses += np.random.normal(loc=0,
                                         scale=_precision_to_scale(precision),
                                         size=N)
        p, gr, sr = bmt.fit_mixture_model(
            x=bmt.response_bias(dm.target, dm.responses),
            x_nontargets=[bmt.response_bias(dm.nontarget1, dm.responses)],
            include_bias=False)
        assert (math.isclose(precision, p, rel_tol=.25))
        assert (math.isclose(guess_rate, gr, abs_tol=2))
        assert (math.isclose(swap_rate, sr, abs_tol=.1))
예제 #2
0
def test_with_bias_and_swap_rate():

    dm = DataMatrix(length=N)
    for precision, guess_rate, bias, swap_rate in itertools.product(
        (500, 2000), (0, .25), (0, 2.5), (0, .25)):
        dm.target = np.random.randint(0, 359, N)
        dm.nontarget1 = dm.target + 180
        dm.responses = dm.target[:]
        n_guess = int(N * guess_rate)
        n_swap = int(N * swap_rate)
        dm.responses[:n_guess] = np.random.randint(0, 359, n_guess)
        dm.responses[n_guess:n_guess +
                     n_swap] = dm.nontarget1[n_guess:n_guess + n_swap]
        dm.responses += np.random.normal(loc=0,
                                         scale=_precision_to_scale(precision),
                                         size=N)
        for row in dm:
            category = bmt.category(row.target, bmt.DEFAULT_CATEGORIES)
            lower, upper, proto = bmt.DEFAULT_CATEGORIES[category]
            if bmt._distance(row.responses, proto) > 0:
                row.responses += bias
            else:
                row.responses -= bias
        p, gr, b, sr = bmt.fit_mixture_model(
            x=bmt.response_bias(dm.target,
                                dm.responses,
                                categories=bmt.DEFAULT_CATEGORIES),
            x_nontargets=[
                bmt.response_bias(dm.nontarget1,
                                  dm.responses,
                                  categories=bmt.DEFAULT_CATEGORIES)
            ])
        assert (math.isclose(precision, p, rel_tol=.25))
        assert (math.isclose(guess_rate, gr, abs_tol=.1))
        assert (math.isclose(bias, b, abs_tol=2))
        assert (math.isclose(swap_rate, sr, abs_tol=.1))