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))
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))