def test_bias_on_array_map(): # compute mean and (biased) variance simultanously def fn(x): return np.mean(x), np.var(x, ddof=0) data = (0, 1, 2) r = bias(fn, data) assert_almost_equal(r, (0.0, -1.0 / 3.0))
def test_bias_on_biased_order_n_minus_one(): # this "mean" has a bias of exactly O(n^{-1}) def bad_mean(x): return (np.sum(x) + 2) / len(x) data = (0, 1, 2) r = bias(bad_mean, data) mean_jk = np.mean([bad_mean([1, 2]), bad_mean([0, 2]), bad_mean([0, 1])]) # (5/2 + 4/2 + 3/2) / 3 = 12 / 6 = 2 assert mean_jk == 2.0 # f = 5/3 # (n-1) * (mean_jk - f) # (3 - 1) * (6/3 - 5/3) = 2/3 # note: 2/3 is exactly the bias of bad_mean for n = 3 assert r == pytest.approx(2.0 / 3.0)
def test_bias_on_unbiased(): data = (0, 1, 2, 3) # bias is exactly zero for linear functions r = bias(np.mean, data) assert r == 0