Giter VIP home page Giter VIP logo

easyeeg's Introduction

EasyEEG: The toolbox for agile EEG data analyis.

Electroencephalography (EEG) provides high temporal resolution cognitive information from non-invasive recordings. However, one of the common practices–using a subset of sensors in ERP analysis is hard to provide a holistic and precise dynamic results. Selecting or grouping subsets of sensors may also be subject to selection bias, multiple comparison, and further complicated by individual differences in the group-level analysis. More importantly, changes in neural generators and variations in response magnitude from the same neural sources are difficult to separate, which limit the capacity of testing different aspects of cognitive hypotheses. We introduce EasyEEG, a toolbox that includes several multivariate analysis methods to directly test cognitive hypotheses based on topographic responses that include data from all sensors. These multivariate methods can investigate effects in the dimensions of response magnitude and topographic patterns separately using data in the sensor space, therefore enable assessing neural response dynamics. The concise workflow and the modular design provide user-friendly and programmer-friendly features. Users of all levels can benefit from the open-sourced, free EasyEEG to obtain a straightforward solution for efficient processing of EEG data and a complete pipeline from raw data to final results for publication.

Yang, J., Zhu, H., & Tian, X. (2018). Group-Level Multivariate Analysis in EasyEEG Toolbox: Examining the Temporal Dynamics using Topographic Responses. Frontiers in Neuroscience, 12.

easyeeg's People

Contributors

ray306 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

easyeeg's Issues

# Import epochs into easyEEG

When Using easyEEG to import mne.epochs subjects, there is a problem. The Codes and output were as follows:
Codes:
#%%
import mne
sample_data_folder = r'C:\Users\Administrator\mne_data\MNE-sample-data'
sample_data_raw_file = r'C:\Users\Administrator\mne_data\MNE-sample-data\MEG\sample\sample_audvis_raw.fif'
raw = mne.io.read_raw_fif(sample_data_raw_file, verbose=False,preload=True).crop(tmax=60)
events = mne.find_events(raw, stim_channel="STI 014")
event_dict = {
"auditory/left": 1,
"auditory/right": 2,
"visual/left": 3,
"visual/right": 4,
"face": 5,
"buttonpress": 32,
}
picks = mne.pick_types(raw.info,meg=False,eeg=True,stim=False,eog=False,ecg=False,misc=False)
raw.filter(0.1,30,n_jobs=2,fir_design='firwin')

epochs = mne.Epochs(raw, events, tmin=-0.3, tmax=0.7, event_id=event_dict, preload=True)
print(epochs.event_id)
del raw # we're done with raw, free up some memory
#%%
epochs.resample(1000.00)
#epochs.rename_channels(ch_name_dic)

epochs.set_eeg_reference(ref_channels='average', projection=True)
epochs.apply_proj()

eeg_reject = dict(eeg=200e-6)
epochs.drop_bad(reject=eeg_reject, flat=None, verbose=None)
epochs.save(r'E:\TLE\test\test-epo.fif')
#%%
import easyEEG
path = r'E:\TLE\test\test-epo.fif'
epochs = easyEEG.io.load_mne_fif(path)

Output:
86 events found
Event IDs: [ 1 2 3 4 5 32]
Filtering raw data in 1 contiguous segment
Setting up band-pass filter from 0.1 - 30 Hz

FIR filter parameters

Designing a one-pass, zero-phase, non-causal bandpass filter:

  • Windowed time-domain design (firwin) method
  • Hamming window with 0.0194 passband ripple and 53 dB stopband attenuation
  • Lower passband edge: 0.10
  • Lower transition bandwidth: 0.10 Hz (-6 dB cutoff frequency: 0.05 Hz)
  • Upper passband edge: 30.00 Hz
  • Upper transition bandwidth: 7.50 Hz (-6 dB cutoff frequency: 33.75 Hz)
  • Filter length: 19821 samples (33.001 s)

[Parallel(n_jobs=2)]: Using backend LokyBackend with 2 concurrent workers.
[Parallel(n_jobs=2)]: Done 16 tasks | elapsed: 4.1s
[Parallel(n_jobs=2)]: Done 358 tasks | elapsed: 10.5s
[Parallel(n_jobs=2)]: Done 366 out of 366 | elapsed: 10.6s finished
Not setting metadata
86 matching events found
Setting baseline interval to [-0.2996928197375818, 0.0] s
Applying baseline correction (mode: mean)
Created an SSP operator (subspace dimension = 3)
3 projection items activated
Using data from preloaded Raw for 86 events and 601 original time points ...
1 bad epochs dropped
{'auditory/left': 1, 'auditory/right': 2, 'visual/left': 3, 'visual/right': 4, 'face': 5, 'buttonpress': 32}
Sampling frequency of the instance is already 1000.0, returning unmodified.
EEG channel type selected for re-referencing
Adding average EEG reference projection.
1 projection items deactivated
Average reference projection was added, but has not been applied yet. Use the apply_proj method to apply it.
Created an SSP operator (subspace dimension = 4)
4 projection items activated
SSP projectors applied...
0 bad epochs dropped
Reading E:\TLE\test\test-epo.fif ...
Read a total of 4 projection items:
PCA-v1 (1 x 102) active
PCA-v2 (1 x 102) active
PCA-v3 (1 x 102) active
Average EEG reference (1 x 59) active
Found the data of interest:
t = -300.00 ... 700.00 ms
0 CTF compensation matrices available
Not setting metadata
85 matching events found
No baseline correction applied
Created an SSP operator (subspace dimension = 4)
4 projection items activated

KeyError Traceback (most recent call last)
Untitled-1 in line 6
33 path = r'E:\TLE\test\test-epo.fif'
34 #fif_list =
----> 36 epochs = easyEEG.io.load_mne_fif(path)
37 epochs.save('DATAS/EasyEEG_paper/data.h5')

File d:\miniconda\lib\site-packages\easyEEG\io\load.py:228, in load_mne_fif(files, path, subjIDs, montage_path)
225 else:
226 raise ValueError('Parameter [files] should be path(s)')
--> 228 return from_mne_epochs(subj_datas,subjIDs=[],montage_path='standard-10-5-cap385')

File d:\miniconda\lib\site-packages\easyEEG\io\load.py:24, in from_mne_epochs(subj_datas, subjIDs, montage_path)
21 sr = epoch_raw.info['sfreq']
22 channel_names = epoch_raw.info['ch_names']
---> 24 epochs_data_each_subj = epoch_raw.to_data_frame().stack('signal').unstack('time')
25 index_new = [(subjID, condition, trial_num_for_subjects[subjID] + trial, channel) for condition, trial, channel in epochs_data_each_subj.index.tolist()]
26 trial_num_for_subjects[subjID] = max([trial for subjID, condition, trial, channel in index_new])

File d:\miniconda\lib\site-packages\pandas\core\frame.py:8764, in DataFrame.stack(self, level, dropna)
8762 result = stack_multiple(self, level, dropna=dropna)
8763 else:
-> 8764 result = stack(self, level, dropna=dropna)
8766 return result.finalize(self, method="stack")
...
-> 1910 raise KeyError(
1911 f"Requested level ({level}) does not match index name ({self.name})"
1912 )

KeyError: 'Requested level (signal) does not match index name (None)'
Since there is no index called 'signal' in the results of epochs.to_data_frame, what is the 'signal' this function needed?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.