[med-svn] [python-mne] 290/376: MISC : cleaning cluster level with connectivity

Yaroslav Halchenko debian at onerussian.com
Fri Nov 27 17:23:07 UTC 2015


This is an automated email from the git hooks/post-receive script.

yoh pushed a commit to annotated tag v0.1
in repository python-mne.

commit 2d492f5f04abe0e0adee85ae8782c993e0e49c77
Author: Alexandre Gramfort <alexandre.gramfort at inria.fr>
Date:   Mon Jun 6 11:30:17 2011 -0400

    MISC : cleaning cluster level with connectivity
---
 mne/stats/cluster_level.py | 110 ++++++++++-----------------------------------
 1 file changed, 23 insertions(+), 87 deletions(-)

diff --git a/mne/stats/cluster_level.py b/mne/stats/cluster_level.py
index e95a42a..9ae9f4c 100644
--- a/mne/stats/cluster_level.py
+++ b/mne/stats/cluster_level.py
@@ -24,6 +24,10 @@ def _find_clusters(x, threshold, tail=0, connectivity=None):
         Where to threshold the statistic
     tail : -1 | 0 | 1
         Type of comparison
+    connectivity : sparse matrix in COO format
+        Defines connectivity between features. The matrix is assumed to
+        be symmetric and only the upper triangular half is used.
+        Defaut is None, i.e, no connectivity.
 
     Returns
     -------
@@ -69,15 +73,15 @@ def _find_clusters(x, threshold, tail=0, connectivity=None):
         if np.sum(mask) == 0:
             return [], np.empty(0)
         mask = np.logical_and(x_in[connectivity.row], x_in[connectivity.col])
-        connectivity = sparse.coo_matrix((connectivity.data[mask],
-                                         (connectivity.row[mask],
-                                          connectivity.col[mask])),
-                                          shape=connectivity.shape)
+        data = connectivity.data[mask]
+        row = connectivity.row[mask]
+        col = connectivity.col[mask]
+        shape = connectivity.shape
         idx = np.where(x_in)[0]
-        data = np.ones(len(idx), dtype=connectivity.data.dtype)
-        connectivity.row = np.concatenate((connectivity.row, idx))
-        connectivity.col = np.concatenate((connectivity.col, idx))
-        connectivity.data = np.concatenate((connectivity.data, data))
+        row = np.concatenate((row, idx))
+        col = np.concatenate((col, idx))
+        data = np.concatenate((data, np.ones(len(idx), dtype=data.dtype)))
+        connectivity = sparse.coo_matrix((data, (row, col)), shape=shape)
         _, components = cs_graph_components(connectivity)
         labels = np.unique(components)
         clusters = list()
@@ -168,6 +172,9 @@ def permutation_cluster_test(X, stat_fun=f_oneway, threshold=1.67,
     X_full = np.concatenate(X, axis=0)
     n_samples_per_condition = [x.shape[0] for x in X]
 
+    if connectivity is not None:
+        connectivity = connectivity.tocoo()
+
     # Step 1: Calculate Anova (or other stat_fun) for original data
     # -------------------------------------------------------------
     T_obs = stat_fun(*X)
@@ -238,6 +245,10 @@ def permutation_cluster_1samp_test(X, threshold=1.67, n_permutations=1000,
         If tail is -1, the statistic is thresholded below threshold.
         If tail is 0, the statistic is thresholded on both sides of
         the distribution.
+    connectivity : sparse matrix.
+        Defines connectivity between features. The matrix is assumed to
+        be symmetric and only the upper triangular half is used.
+        Defaut is None, i.e, no connectivity.
 
     Returns
     -------
@@ -262,6 +273,10 @@ def permutation_cluster_1samp_test(X, threshold=1.67, n_permutations=1000,
     X_copy = X.copy()
     n_samples = X.shape[0]
     shape_ones = tuple([1] * X[0].ndim)
+
+    if connectivity is not None:
+        connectivity = connectivity.tocoo()
+
     # Step 1: Calculate T-stat for original data
     # -------------------------------------------------------------
     T_obs = stat_fun(X)
@@ -297,82 +312,3 @@ def permutation_cluster_1samp_test(X, threshold=1.67, n_permutations=1000,
 
 
 permutation_cluster_1samp_test.__test__ = False
-
-# if __name__ == "__main__":
-#     noiselevel = 30
-#     np.random.seed(0)
-#
-#     # 1D
-#     normfactor = np.hanning(20).sum()
-#     condition1 = np.random.randn(50, 300) * noiselevel
-#     for i in range(50):
-#         condition1[i] = np.convolve(condition1[i], np.hanning(20),
-#                                       mode="same") / normfactor
-#     condition2 = np.random.randn(43, 300) * noiselevel
-#     for i in range(43):
-#         condition2[i] = np.convolve(condition2[i], np.hanning(20),
-#                                       mode="same") / normfactor
-#     pseudoekp = 5 * np.hanning(150)[None,:]
-#     condition1[:, 100:250] += pseudoekp
-#     condition2[:, 100:250] -= pseudoekp
-#
-#     # Make it 2D
-#     condition1 = np.tile(condition1[:,100:275,None], (1, 1, 15))
-#     condition2 = np.tile(condition2[:,100:275,None], (1, 1, 15))
-#     shape1 = condition1[..., :3].shape
-#     shape2 = condition2[..., :3].shape
-#     condition1[..., :3] = np.random.randn(*shape1) * noiselevel
-#     condition2[..., :3] = np.random.randn(*shape2) * noiselevel
-#     condition1[..., -3:] = np.random.randn(*shape1) * noiselevel
-#     condition2[..., -3:] = np.random.randn(*shape2) * noiselevel
-#
-#     # X, threshold, tail = condition1, 1.67, 1
-#     # X, threshold, tail = -condition1, -1.67, -1
-#     # # X, threshold, tail = condition1, 1.67, 0
-#     # fs, clusters, cluster_p_values, histogram = permutation_cluster_1samp_test(
-#     #                                     condition1, n_permutations=500, tail=tail,
-#     #                                     threshold=threshold)
-#
-#     # import pylab as pl
-#     # pl.close('all')
-#     # pl.hist(histogram)
-#     # pl.show()
-#
-#     fs, clusters, cluster_p_values, histogram = permutation_cluster_test(
-#                                 [condition1, condition2], n_permutations=1000)
-#
-#     # Plotting for a better understanding
-#     import pylab as pl
-#     pl.close('all')
-#
-#     if condition1.ndim == 2:
-#         pl.subplot(211)
-#         pl.plot(condition1.mean(axis=0), label="Condition 1")
-#         pl.plot(condition2.mean(axis=0), label="Condition 2")
-#         pl.ylabel("signal [a.u.]")
-#         pl.subplot(212)
-#         for i_c, c in enumerate(clusters):
-#             c = c[0]
-#             if cluster_p_values[i_c] <= 0.05:
-#                 h = pl.axvspan(c.start, c.stop-1, color='r', alpha=0.3)
-#             else:
-#                 pl.axvspan(c.start, c.stop-1, color=(0.3, 0.3, 0.3), alpha=0.3)
-#         hf = pl.plot(fs, 'g')
-#         pl.legend((h, ), ('cluster p-value < 0.05', ))
-#         pl.xlabel("time (ms)")
-#         pl.ylabel("f-values")
-#     else:
-#         fs_plot = np.nan * np.ones_like(fs)
-#         for c, p_val in zip(clusters, cluster_p_values):
-#             if p_val <= 0.05:
-#                 fs_plot[c] = fs[c]
-#
-#         pl.imshow(fs.T, cmap=pl.cm.gray)
-#         pl.imshow(fs_plot.T, cmap=pl.cm.jet)
-#         # pl.imshow(fs.T, cmap=pl.cm.gray, alpha=0.6)
-#         # pl.imshow(fs_plot.T, cmap=pl.cm.jet, alpha=0.6)
-#         pl.xlabel('time')
-#         pl.ylabel('Freq')
-#         pl.colorbar()
-#
-#     pl.show()

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/python-mne.git



More information about the debian-med-commit mailing list