In this tutorial, we will perform an Independent Component Analysis (ICA) to remove artefacts related to eye blinks and eye movements (electrooculographic activity, EOG) (for a theoretical background on this approach, see this short tutorial by Tzyy-Ping Jung & Scott Makeig; see also Jung et al., Psychophysiol 2000; Jung et al., Clin Neurophysiol 2000).
The dataset used for this tutorial can be downloaded here. It consists of a 32-channel EEG recording segmented into 40 epochs lasting 1.5 s, segmented relative to the onset of a transcutaneous electrical stimulus delivered to the right median nerve, at the level of the wrist. The following preprocessing steps were applied (1) band-pass filtering between 0.5-30 Hz, (2) segmentation from -0.5 to +1.0 s relative to stimulus onset and (3) baseline correction.
1. Computing the ICA matrix
Within the Letswave user interface, select the 'merged_S06' datafile and launch Preprocess > ICA > Compute ICA matrix (runica) from the top menu. This opens a new window titled Independent Component Analysis (runica). This window controls a function that performs an ICA decomposition using the runica algorithm (see this link for additional information). The Number of Independent Components (ICs) can be defined in several ways. A first option is to choose a Square Mixing Matrix. With a square mixing matrix the EEG signal will be decomposed into a number of ICs corresponding to the number of channels in the original EEG signal and, taken together, the ICs can reconstruct the entire original dataset with no loss. A second option is to choose a User-defined number of ICs. This will decompose a principal component subspace of the data. The result will be a non-square unmixing matrix which decomposes the EEG signal into a given number of ICs. A third option is to use Probabilistic ICA to automatically constrain the ICA to an estimate of the intrinsic dimensionality of the original signal. It is not recommended to use the second and third options for signal-denoising, and their usefulness will be discussed in a separate tutorial (see also this link for additional information on Probabilistic ICA).
For the removal of eye movement-related artefacts (and other sources of artefacts such as EKG, EMG and environmental noise), we will thus choose a Square Mixing Matrix.
Click Process. This will launch the runica() function (note that this can take a while, depending on the size of the dataset). You can check the check the progress of the function within the Matlab Command Window.
Note that as an alternative to the runica algorithm, you can use the JADE algorithm (see this link for additional information). To perform an ICA using the JADE algorithm, launch Preprocess > ICA > Compute ICA matrix (jader) from the top menu of the Letswave user interface.
2. Identifying and removing artefacts
Within the Letswave user interface, select the 'merged_S06' datafile (not the 'matrix merged_S06' datafile) and launch Preprocess > ICA > Apply ICA Filter from the top menu. This opens a new window titled ICA Filter. This window controls a function that allows viewing and removing selected Independent Components from the EEG dataset.
The Files box lists all the selected datasets. In this tutorial, it contains a single data file (merged_SO7). The Epochs, Channels and ICs boxes list the epochs, channels and ICs of the data file currently selected in the Files box.
Click the Display Filtered Signals button. This opens a figure titled Filtered Signals. This figure displays the time course of the currently selected epoch and channel, before and after the removal of ICs. At present, no ICs have been removed. Hence, the filtered (red) and unfiltered (black) waveforms are strictly identical.
Using the Channels box, select a channel that should receive a strong contribution from EOG artefacts, such as channel FP1. Using the Epochs box, browse through the different epochs of the data file to locate an epoch unequivocally contaminated by an eye blink artefact, such as epoch 19 of the current dataset.
Next, we will try to isolate the IC(s) that could capture this EOG activity. Select IC1 in the ICs box and click the Display IC Timecourses button. This opens a second figure titled IC Timecourse. This figure displays the time course of the selected IC and epoch (here IC1, epoch 19).
ICs are sorted according to the amount of variance they explain. Because EOG activity usually exhibits a large amplitude, ICs explaining EOG activity often appear first. This is clearly the case in the present dataset : IC1 clearly isolates EOG activity.
Another criterion to determine whether or not an IC captures EOG activity is to examine its scalp topography. Indeed, given the position of the eyes relative to the scalp, ICs capturing EOG activity may be expected to have a predominantly frontal contribution. Click the IC maps button to display the scalp topography of the selected IC. This opens a new figure titled IC Maps. Note the anterior distribution of IC1, highly suggestive of EOG activity.
Because of its time course and scalp topography, it is clear that IC1 isolates EOG activity and, hence, that it should be removed from the filtered dataset. Within the ICs panel, the > button moves the selected ICs to the Removed window and the >> button moves all ICs to the Removed window. The < button moves selected ICs back to the Keep window and the << button moves all ICs back to the Keep window. To remove IC1, select that IC and press the > button.
Now, go back to the Filtered Signals figure. Notice that the black and red waveforms are no longer identical. Most importantly, notice that the large EOG artefact present in the unfiltered epoch (black waveform) is no longer visible in the filtered epoch (red waveform).
Finally, click the Process button to save the filtered dataset as a new file. Such as in other Letswave functions, the Prefix parameter defines the prefix that will be appended to the new datafile (here 'icfilt').
Note. If you had chosen to select more that one data file, the Apply Current Selection to All button can be used to apply the current selection of kept and rejected ICs to all datasets.