Source code for neurokit2.microstates.microstates_dynamic
# -*- coding: utf-8 -*-
import pandas as pd
from ..markov import transition_matrix
from ..misc import as_vector
[docs]
def microstates_dynamic(microstates, show=False):
"""**Dynamic Properties of Microstates**
This computes statistics related to the transition pattern (based on the
:func:`.transition_matrix`).
.. note::
This function does not compute all the features available under the markov submodule.
Don't hesitate to open an issue to help us test and decide what features to include.
Parameters
----------
microstates : np.ndarray
The topographic maps of the found unique microstates which has a shape of n_channels x
n_states, generated from :func:`.nk.microstates_segment`.
show : bool
Show the transition matrix.
Returns
-------
DataFrame
Dynamic properties of microstates.
See Also
--------
.transition_matrix, .microstates_static
Examples
--------
.. ipython:: python
import neurokit2 as nk
microstates = [0, 0, 0, 1, 1, 2, 2, 2, 2, 1, 0, 0, 2, 2]
@savefig p_microstates_dynamic1.png scale=100%
nk.microstates_dynamic(microstates, show=True)
@suppress
plt.close()
"""
# See https://github.com/Frederic-vW/eeg_microstates
# and https://github.com/maximtrp/mchmm
# for other implementations
out = {}
# Try retrieving info
if isinstance(microstates, dict):
microstates = microstates["Sequence"]
# Sanitize
microstates = as_vector(microstates)
# Transition matrix
tm, info = transition_matrix(microstates, show=show)
for row in tm.index:
for col in tm.columns:
out[str(tm.loc[row].name) + "_to_" + str(tm[col].name)] = tm[col][row]
df = pd.DataFrame.from_dict(out, orient="index").T.add_prefix("Microstate_")
# TODO:
# * Chi-square test statistics of the observed microstates against the expected microstates
# * Symmetry test statistics of the observed microstates against the expected microstates
return df