Source code for neurokit2.microstates.microstates_classify

# -*- coding: utf-8 -*-
import numpy as np

from ..misc import replace


[docs] def microstates_classify(segmentation, microstates): """**Reorder (sort) the microstates (experimental)** Reorder (sort) the microstates (experimental) based on the pattern of values in the vector of channels (thus, depends on how channels are ordered). Parameters ---------- segmentation : Union[np.array, dict] Vector containing the segmentation. microstates : Union[np.array, dict] Array of microstates maps . Defaults to ``None``. Returns ------- segmentation, microstates Tuple containing re-ordered input. Examples ------------ .. ipython:: python import neurokit2 as nk eeg = nk.mne_data("filt-0-40_raw").filter(1, 35, verbose=False) eeg = nk.eeg_rereference(eeg, 'average') # Original order out = nk.microstates_segment(eeg) @savefig p_microstates_classify.png scale=100% nk.microstates_plot(out, gfp=out["GFP"][0:100]) @suppress plt.close() # Reorder out = nk.microstates_classify(out["Sequence"], out["Microstates"]) """ # Reorder new_order = _microstates_sort(microstates) microstates = microstates[new_order] replacement = dict(enumerate(new_order)) segmentation = replace(segmentation, replacement) return segmentation, microstates
# ============================================================================= # Methods # ============================================================================= def _microstates_sort(microstates): n_states = len(microstates) order_original = np.arange(n_states) # For each state, get linear and quadratic coefficient coefs_quadratic = np.zeros(n_states) coefs_linear = np.zeros(n_states) for i in order_original: state = microstates[i, :] _, coefs_linear[i], coefs_quadratic[i] = np.polyfit( state, np.arange(len(state)), 2 ) # For each state, which is the biggest trend, linear or quadratic order_quad = order_original[np.abs(coefs_linear) <= np.abs(coefs_quadratic)] order_lin = order_original[np.abs(coefs_linear) > np.abs(coefs_quadratic)] # Reorder each order_quad = order_quad[np.argsort(coefs_quadratic[order_quad])] order_lin = order_lin[np.argsort(coefs_linear[order_lin])] new_order = np.concatenate([order_quad, order_lin]) return new_order