Skip to content

sccn/eegstats

Repository files navigation

EEGSTATS plugin for EEGLAB

This plugin computes frequency band power, alpha peak frequency, and alpha asymmetry. It uses the restingIAF MATLAB code for some computation.

Do not download GitHub zip file

You will miss the resting IAF code dependency when downloading the zip file. Instead, download the plugin from the EEGLAB extension manager or clone the repository as indicated below.

Checkout repository

Make sure to copy the submodule when you clone the repository. You may clone the repository in the plugins folder of EEGLAB, and the plugin will behave as if you had downloaded it from the EEGLAB plugin manager.

git clone --recurse-submodules https://github.com/arnodelorme/eegstats.git

Graphic interface

The plugin may be used from the command line or from its GUI. After installing the plugin using the EEGLAB plugin manager (EEGLAB menu item File > Manage EEGLAB extensions), you may load the tutorial dataset "eeglab_data.set" from the "sample_data" folder of eeglab (or simply type "eeglab cont" on the MATLAB command line). Then use EEGLAB menu item Tools > EEG freq/power statistics and following UI will pop up. In this UI, you may select frequency ranges of interest, electrodes, and other spectral parameters. You may also select to compute individual alpha frequency or alpha asymmetry between electrodes of your choice. See the pop_eegstats.m header for more information.

Some statistics are then shown on the command line

All_channels	FPz	EOG1	F3	Fz	F4	EOG2	FC5	FC1	FC2	FC6	T7	C3	C4	Cz	T8	CP5	CP1	CP2	CP6	P7	P3	Pz	P4	P8	PO7	PO3	POz	PO4	PO8	O1	Oz	O2
4.0-6.0 Hz	10.32874	14.22889	9.67149	12.15102	12.52194	11.41491	8.32056	10.92951	12.55692	12.12547	8.74618	9.27780	11.43005	10.23406	11.97217	5.81186	10.17836	11.12828	10.86633	8.35843	8.59615	10.46200	11.01924	9.80405	5.81822	8.94987	10.24260	9.81776	9.67905	7.94379	7.86885	7.36514	7.68011
8.0-12.0 Hz	14.34564	12.88388	8.29599	14.23616	14.09646	13.61207	9.33680	12.95503	14.09473	13.81112	11.21125	11.13318	14.51065	14.45228	14.24638	7.63537	13.54019	15.94191	16.27163	12.39869	12.74183	16.26172	17.82588	15.80787	10.10653	14.83628	17.25089	17.70982	16.13902	13.31741	14.39267	14.11222	14.18022
18.0-22.0 Hz	1.53140	1.74260	0.55711	3.41521	3.20146	2.81724	0.85928	1.97687	3.33149	3.07455	-0.56236	-0.14296	2.92429	1.89127	2.88576	-3.66506	0.96043	2.88402	2.55589	-0.95219	0.18848	2.11160	2.82488	1.41511	-3.05001	1.16790	2.55386	1.59623	1.61312	-0.32435	0.27099	-0.79813	-0.42993
30.0-45.0 Hz	-4.74193	-3.59272	-2.38355	-3.85762	-4.05003	-4.10457	-2.61030	-4.35485	-3.92142	-4.00219	-6.27543	-4.97281	-4.64989	-5.83781	-4.21922	-6.76074	-5.47909	-5.13860	-5.41030	-6.93733	-4.21273	-5.34485	-5.09403	-5.76578	-6.73008	-3.97376	-4.63646	-5.62076	-5.15805	-5.44294	-4.68207	-5.68633	-5.11051
Peak alpha frequency	9.68	8.50	NaN	9.00	8.50	9.00	NaN	9.00	9.00	9.00	9.00	9.50	9.50	9.50	9.50	9.50	9.50	10.00	10.00	10.00	9.50	10.00	10.00	10.00	9.50	9.50	10.00	10.00	10.00	10.00	10.00	10.00	10.00
Alpha center of gravity	9.36	8.65	8.88	8.94	8.87	8.99	8.97	9.12	8.99	9.05	9.14	9.16	9.45	9.46	9.27	9.13	9.44	9.58	9.56	9.44	9.32	9.64	9.72	9.61	9.39	9.58	9.75	9.83	9.70	9.61	9.71	9.74	9.73
Alpha Asymmetry	0.62408

You can also recover these statistics using the command line call (see function help for more information):

[power, iafSum, iafChan, freqs] = pop_eegstats(EEG, 'thetarange',[4 6] ,'alpharange',[8 12] , ...
            'otherranges',[18 22;30 45],'averagepower','off','channels','','winsize',2, ...
            'overlap',1,'iaf','on','iafminchan',1,'alphaasymmetry','on','asymchans','F3 F4', ...
            'csvfile','save_these_results.csv');

Group analysis (beta)

The EEG.etc.eegstats structure contains the saved EEG spectral statistics. Assuming you have created an EEGLAB study (requires EEGLAB 2024.0 or later version), you may compute EEG statistics on all the datasets (the plugin is compatible with processing an entire EEGLAB STUDY). Then, from the EEGLAB command line, you may recover specific fields for all datasets. You can use the std_readdata function to read the data from all datasets (this uses the default STUDY design in STUDY.currentdesign -- otherwise, you can also specify the design when calling the std_readdata function by setting the 'design' parameter).

{% raw %}

[STUDY,aa,xvals,~,~,~,~,info] = std_readdata(STUDY, ALLEEG, 'customread', 'std_readeegfield', ...
                          'customparams', {{ 'etc', 'eegstats', 'alpha_asymmetry' }}, 'ndim', 1);

{% endraw %}

Then you can perform statistics using EEGLAB building functions.

[~,p] = std_stat(aa, 'groupstats', 'on'), % perform some statistics based on the current STUDY design

p =

  1×1 cell array

    {[0.0345]}

Or convert the data to a table, and perform statistics using MATLAB statistics toolbox or using external software. The table below was obtained by applying these commands to a subset of the STERN EEGLAB STUDY available on this page

res = std_cell2table([], [], aa, info, 'design', STUDY.design(2),  'dimensions', {'subjects' 'alpha_asymmetry' })
writetable(res, 'mydata.csv'); % this writes the data to disk

res =

  4×3 table

     condition      subjects    alpha_asymmetry
    ____________    ________    _______________

    {'ignore'  }       1            -1.4385    
    {'ignore'  }       2              1.882    
    {'memorize'}       1            -1.1305    
    {'memorize'}       2             1.9947    

Version history

v1.2 - better STUDY support

v1.1 - better output formating and saving results in EEG structure

v1.0 - initial version