Skip to content
Armand Mensen edited this page Dec 17, 2016 · 1 revision

Filtering and ICA

Following my theoretical work on filtering, that I hope you followed restlessly, I choose to use a butterworth filter order 2 (i.e. 12dB/octave roll-off) with low and high cut-off frequencies of 0.1 and 50Hz defined at -6dB (i.e. with the half-amplitude). For the filtering vocabulary cf. Widemann review paper or Luck’s book “An introduction to the ERP technique”, chapter 7 for filtering, available online with UW library and maybe easier to read.

I choose this filter from ERPLAB as it is what are using the big guys from ERPs as Luck, besides the ERPLAB interface for filtering is nice, you can see in live your filter responses and can adjust easily the roll-off, etc. But I might try other filters later, like the windowed sinc with a kaiser window that Widmann advises, and test which one affects the least my data. I choose 50hz as a low pass to remove the line noise without being too agressive, I can still get lower after.

I then ran the ICA after channel and bad epochs rejection, on the epoched data indeed (-1.5 to 1.5 s around my events), with binica (without downsampling to have more datapoints, and without pca reduction for now). The first problem is that ICA is not very good if I high-pass filter (HP) at 0.1Hz…

ICA after 0.1 or 1Hz high-pass filtering

So following the recommendations on an eeglablist discussion https://sccn.ucsd.edu/pipermail/eeglablist/2011/004417.html , I tried to run ICA on 1hz and then apply the weights on 0.1hz.

Following Armand’s idea of screenshots here you can compare the ICA decompositions : 0.1hz on left, 1Hz on right, just the 30 first components, after they are not very informative.

Figure: ICA components with 0.1 Hz filter

Figure: ICA components after 1 Hz filter

Both isolate major components as blinks and lateral eye movement (LEM) (independent components (ICs) 1 and 2 or 3), but the 0.1hz decomposition is not as precise for the others components. For example

the 1hz allows to see strange patterns like IC10 and also catches heart pulsation IC21 and muscles ICs 27 and 28 and maybe vertical eye movements IC19.

So I’ll definitely keep 1Hz, I tried 2Hz but it’s not improving anything and even reducing the isolation quality of the eyes movements.

Then according to the papers on filtering, if you are not doing ERPs the HP filter at 1Hz won’t change anything to your data. If you are doing ERPs or you want to study low frequencies around 1 or 2 hz, you can do this nice trick described in the eeglablist discussion , which is also the “political line” beyond the people implementing EEGLAB at the SCCN of Scott Makeig, applying the ICA decomposition of your 1hz dataset to your 0.1Hz dataset.

By safety measure I applied the same process to the 2 datasets (same sampling rate, same channels and epoch rejected and same epoching, etc.. except for filtering), but as the ICA weights matrix is just a N by N matrix with N the number of components (in my case the number of channels left), maybe you just need the same number of channels and then when EEGLAB is recomputing the ICA activation matrix with eeg_checkset it is adapting to the number of epochs and datapoints of the new dataset ?…

Anyway the process to do that is pretty simple:

_On EEGLAB go on your 1hz dataset with the ICA computed and in the matlab command line

TMP.icawinv = EEG.icawinv;
TMP.icasphere = EEG.icasphere;
TMP.icaweights = EEG.icaweights;
TMP.icachansind = EEG.icachansind;

_ change the active dataset to your 0.1Hz dataset without any ICA run on it

EEG.icawinv = TMP.icawinv;
EEG.icasphere = TMP.icasphere;
EEG.icaweights = TMP.icaweights;
EEG.icachansind = TMP.icachansind;

_ then recompute the ICA activation matrix

EEG = eeg_checkset( EEG );
eeglab redraw 
Clone this wiki locally