[Mne_analysis] EEGLAB reader

Christian O'Reilly christian.oreilly at gmail.com
Fri Sep 27 11:30:18 EDT 2019
Search archives:

        External Email - Use Caution        

Hi all,

I am trying to reproduce in MNE some analyses published in
https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0030135
using EEGLAB and I am slowly tracking down sources of differences between
the results I obtain with these two libraries.

The EEGLAB and the MNE readers for .set files seems to give different
results. I am using the file km81.set for this example, which can be
downloaded here: ftp://sccn.ucsd.edu/pub/mica_release.zip

Python/MNE code:

eeg =
mne.io.read_epochs_eeglab('/home/christian/Documents/mica_release/datasets/km81.set')
n_epochs, n_chan, n_sample = eeg.get_data().shape
eeg_data = eeg.get_data().reshape((n_chan, n_sample*n_epochs))
eeg_data *= 1e6
print(eeg_data[:5, :5])
print(eeg_data.shape)
print(sorted(eeg_data[:, 0]))
print(np.min(eeg_data, axis=1)[:5])
print(np.max(eeg_data, axis=1)[:5])
print(np.min(eeg_data, axis=1).shape)

Python/MNE output:

[[ -30.3018589    -9.46370029  -32.11343384  -80.96838379 -112.64376831]
 [  17.98744011   13.38890266    8.96499634    8.95211601   10.52659035]
 [   1.70007288    1.08449709   -1.92835653   -1.52061117    3.14573812]
 [  22.36253166   19.08609772   14.59503269   14.00534725   16.24861908]
 [ -11.30813694  -12.02319813   -9.68249226   -6.36183262   -6.76167011]]
(71, 310450)
[-54.222572326660156, -49.53323745727539, -38.230918884277344,
-30.919052124023434, -30.30185890197754, -28.795389175415036,
-26.802810668945312, -23.46408462524414, -19.828861236572266,
-19.07419776916504, -16.326366424560547, -16.310237884521484,
-14.442460060119629, -14.286537170410154, -13.221666336059569,
-11.308136940002441, -10.6834716796875, -10.423746109008789,
-9.760689735412596, -8.87014102935791, -6.883561611175537,
-6.867288589477539, -5.7860164642333975, -4.9906535148620605,
-3.48313570022583, -3.4533519744873047, -3.3310370445251465,
-2.4730896949768066, -0.9696072936058044, -0.8216205835342406,
-0.40084442496299744, 0.22790522873401642, 0.28669825196266174,
1.3285683393478394, 1.4407401084899902, 1.7000728845596311,
1.7271562814712524, 1.8890516757965088, 3.3240826129913326,
3.567858934402466, 4.892752170562744, 4.926086902618408, 5.629435539245605,
5.7694478034973145, 6.5682663917541495, 7.257050514221191,
7.54573392868042, 7.608102798461913, 7.769186019897461, 7.779174804687499,
8.121392250061033, 9.502474784851074, 9.762967109680174, 9.94691467285156,
10.304577827453613, 10.690375328063965, 11.20960521697998,
13.293575286865234, 14.423436164855955, 15.029093742370604,
16.452854156494137, 17.035533905029297, 17.987440109252926,
18.829505920410156, 22.084123611450195, 22.362531661987305,
24.502143859863278, 26.561006546020504, 36.645851135253906,
48.55062484741211, 121.60424041748047]
[-162.69863892 -201.91339111 -130.68704224 -348.22705078 -198.54916382]
[291.74282837 204.80189514 195.11305237 277.12097168 262.78338623]
(71,)


MATLAB/EEGLAB code:

EEG =
pop_loadset('/home/christian/Documents/mica_release/datasets/km81.set');
data = reshape(EEG.data,nchans,EEG.pnts*EEG.trials);
size(data)
data(1:5, 1:5)
sort(data(:, 1))'
min(data(1:5, :)')
max(data(1:5, :)')
size(min(data(:, :)'))

MATLAB/EEGLAB output:

ans =
          71      310450
ans =

  5×5 single matrix

  -30.3019   -9.4637  -32.1134  -80.9684 -112.6438
  -10.2374   -5.0511   -1.8697   -1.6044   -1.1974
  -20.4854   -9.7555   -1.0124    4.8327    9.6969
  -25.3829  -13.1146   -3.3851    2.5596    7.3826
   -3.8909    2.9585    6.2366    3.6442    0.2817


ans =

  -30.3019  -26.0869  -25.9951  -25.8994  -25.3829  -24.8852  -24.4983
 -23.8505  -23.5649  -23.0836
  -22.0849  -22.0227  -21.2673  -20.4854  -20.4535  -19.2276  -18.0331
 -17.7991  -17.4316  -17.3945
  -17.2824  -16.0406  -15.9822  -15.1589  -15.0862  -14.9993  -14.7288
 -14.5398  -13.8370  -13.3654
  -13.3466  -13.1214  -12.9615  -11.1150  -10.2374   -9.3882   -8.3259
-8.2251   -7.8012   -7.5449
   -6.9841   -6.8029   -6.7175   -6.5904   -6.5436   -6.0545   -5.6778
-5.5130   -5.0071   -4.9592
   -4.3509   -4.3206   -4.0873   -3.8909   -3.4353   -3.3442   -3.1263
-3.0407   -2.7963   -2.7472
   -2.0239   -1.5894   -1.4584   -1.2007   -1.1818   -0.6294   -0.5136
-0.1163    1.2653    2.0582
    2.5924

ans =
 -441.1615 -282.5767  -82.9421  -99.8472 -145.7018

ans =
  449.5460  152.6343   77.8951   76.6568  343.0334

ans =
     1    71

As can be seen, the first samples of the first channel have same values for
the two readers but then it gets different (as seen by the max/min values
of this channel being different between the two code). The other channels
also don't have the same values (even for their first samples). It is not
due to swapped channels, as shown by the fact that the sorted values of the
first sample of the 71 channels are not the same.

At this point, I am not sure if these differences are due to:
- me not using the library correctly (although this code seems pretty
minimal and I made a diligent effort in looking for errors in my code)
- some under-the-hood assumptions that are different between the two
readers (e.g., some preprocessing done automatically like re-referencing or
filtering)
- a bug in one of the two readers

Any ideas?

Best,

Christian
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.nmr.mgh.harvard.edu/pipermail/mne_analysis/attachments/20190927/c0f6a287/attachment-0001.html 


More information about the Mne_analysis mailing list