def test_permutation_test_H0(numba_conditional): """Test that H0 is populated properly during testing.""" rng = np.random.RandomState(0) data = rng.rand(7, 10, 1) - 0.5 with pytest.warns(RuntimeWarning, match='No clusters found'): t, clust, p, h0 = spatio_temporal_cluster_1samp_test( data, threshold=100, n_permutations=1024, seed=rng) assert_equal(len(h0), 0) for n_permutations in (1024, 65, 64, 63): t, clust, p, h0 = spatio_temporal_cluster_1samp_test( data, threshold=0.1, n_permutations=n_permutations, seed=rng) assert_equal(len(h0), min(n_permutations, 64)) assert isinstance(clust[0], tuple) # sets of indices for tail, thresh in zip((-1, 0, 1), (-0.1, 0.1, 0.1)): t, clust, p, h0 = spatio_temporal_cluster_1samp_test( data, threshold=thresh, seed=rng, tail=tail, out_type='mask') assert isinstance(clust[0], np.ndarray) # bool mask # same as "128 if tail else 64" assert_equal(len(h0), 2 ** (7 - (tail == 0))) # exact test
def test_permutation_test_H0(): """Test that H0 is populated properly during testing.""" rng = np.random.RandomState(0) data = rng.rand(7, 10, 1) - 0.5 with pytest.warns(RuntimeWarning, match='No clusters found'): t, clust, p, h0 = spatio_temporal_cluster_1samp_test( data, threshold=100, n_permutations=1024, seed=rng) assert_equal(len(h0), 0) for n_permutations in (1024, 65, 64, 63): t, clust, p, h0 = spatio_temporal_cluster_1samp_test( data, threshold=0.1, n_permutations=n_permutations, seed=rng) assert_equal(len(h0), min(n_permutations, 64)) assert isinstance(clust[0], tuple) # sets of indices for tail, thresh in zip((-1, 0, 1), (-0.1, 0.1, 0.1)): t, clust, p, h0 = spatio_temporal_cluster_1samp_test( data, threshold=thresh, seed=rng, tail=tail, out_type='mask') assert isinstance(clust[0], np.ndarray) # bool mask # same as "128 if tail else 64" assert_equal(len(h0), 2 ** (7 - (tail == 0))) # exact test
def test_permutation_test_H0(): """Test that H0 is populated properly during testing.""" rng = np.random.RandomState(0) data = rng.rand(7, 10, 1) - 0.5 with warnings.catch_warnings(record=True) as w: t, clust, p, h0 = spatio_temporal_cluster_1samp_test( data, threshold=100, n_permutations=1024, seed=rng) assert_equal(len(w), 1) assert_true('No clusters found' in str(w[0].message)) assert_equal(len(h0), 0) for n_permutations in (1024, 65, 64, 63): t, clust, p, h0 = spatio_temporal_cluster_1samp_test( data, threshold=0.1, n_permutations=n_permutations, seed=rng) assert_equal(len(h0), min(n_permutations, 64)) assert_true(isinstance(clust[0], tuple)) # sets of indices for tail, thresh in zip((-1, 0, 1), (-0.1, 0.1, 0.1)): with warnings.catch_warnings(record=True) as w: t, clust, p, h0 = spatio_temporal_cluster_1samp_test( data, threshold=thresh, seed=rng, tail=tail, out_type='mask') assert_equal(len(w), 0) assert_true(isinstance(clust[0], np.ndarray)) # bool mask # same as "128 if tail else 64" assert_equal(len(h0), 2**(7 - (tail == 0))) # exact test
def test_cluster_permutation_t_test_with_connectivity(): """Test cluster level permutations T-test with connectivity matrix.""" try: try: from sklearn.feature_extraction.image import grid_to_graph except ImportError: from scikits.learn.feature_extraction.image import grid_to_graph except ImportError: return # we don't care about p-values in any of these, so do fewer permutations out = permutation_cluster_1samp_test(condition1_1d, n_permutations=50) connectivity = grid_to_graph(1, condition1_1d.shape[1]) out_connectivity = permutation_cluster_1samp_test(condition1_1d, n_permutations=50, connectivity=connectivity) assert_array_equal(out[0], out_connectivity[0]) for a, b in zip(out_connectivity[1], out[1]): assert_true(np.sum(out[0][a]) == np.sum(out[0][b])) assert_true(np.all(a[b])) # test spatio-temporal with no time connectivity (repeat spatial pattern) connectivity_2 = sparse.coo_matrix( linalg.block_diag(connectivity.asfptype().todense(), connectivity.asfptype().todense())) condition1_2 = np.concatenate((condition1_1d, condition1_1d), axis=1) out_connectivity_2 = permutation_cluster_1samp_test(condition1_2, n_permutations=50, connectivity=connectivity_2) # make sure we were operating on the same values split = len(out[0]) assert_array_equal(out[0], out_connectivity_2[0][:split]) assert_array_equal(out[0], out_connectivity_2[0][split:]) # make sure we really got 2x the number of original clusters n_clust_orig = len(out[1]) assert_true(len(out_connectivity_2[1]) == 2 * n_clust_orig) # Make sure that we got the old ones back n_pts = condition1_1d.shape[1] data_1 = set([np.sum(out[0][b[:n_pts]]) for b in out[1]]) data_2 = set([np.sum(out_connectivity_2[0][a[:n_pts]]) for a in out_connectivity_2[1][:]]) assert_true(len(data_1.intersection(data_2)) == len(data_1)) # now use the other algorithm condition1_3 = np.reshape(condition1_2, (40, 2, 350)) out_connectivity_3 = spatio_temporal_cluster_1samp_test( condition1_3, n_permutations=50, connectivity=connectivity, max_step=0, threshold=1.67, check_disjoint=True) # make sure we were operating on the same values split = len(out[0]) assert_array_equal(out[0], out_connectivity_3[0][0]) assert_array_equal(out[0], out_connectivity_3[0][1]) # make sure we really got 2x the number of original clusters assert_true(len(out_connectivity_3[1]) == 2 * n_clust_orig) # Make sure that we got the old ones back data_1 = set([np.sum(out[0][b[:n_pts]]) for b in out[1]]) data_2 = set([np.sum(out_connectivity_3[0][a[0], a[1]]) for a in out_connectivity_3[1]]) assert_true(len(data_1.intersection(data_2)) == len(data_1)) # test new versus old method old method out_connectivity_4 = spatio_temporal_cluster_1samp_test( condition1_3, n_permutations=50, connectivity=connectivity, max_step=2, threshold=1.67) out_connectivity_5 = spatio_temporal_cluster_1samp_test( condition1_3, n_permutations=50, connectivity=connectivity, max_step=1, threshold=1.67) # clutsers could be in a different order sums_4 = [np.sum(out_connectivity_4[0][a]) for a in out_connectivity_4[1]] sums_5 = [np.sum(out_connectivity_4[0][a]) for a in out_connectivity_5[1]] sums_4 = np.sort(sums_4) sums_5 = np.sort(sums_5) assert_array_almost_equal(sums_4, sums_5)