ICA advice for cleaning long (~9 hour) EEG recordings

Hi everyone
I’m after some general advice for preprocessing EEG data and using ICA for artifact/noise removal.
I am analysing sleep data from humans, in 64channel recordings which are ~9 hours long. My current preprocessing procedure is as follows:

  • Load in data
  • downsample from 512–>256Hz
  • bandpass filter 1-40Hz
  • flag, remove & interpolate bad channels
  • add in FCz reference channel & re-reference to average reference
  • mark noisy data segments as ‘bad’
  • run fastica with 30 components to identify artifacts & noise & then manually pick which components to remove from my data
  • fit the ICA to my raw data

I am however not convinced that the ICA is appropriate to use in this way. As my recordings are so long (with many channels), there is a lot of variabiltiy in the signals due to movements & the different brain activity profiles in each sleep stage. I am concerned which components I should remove, as quite a few tend to be centred around one electrode. As example of components I generate is as follows:

When I topoplot the resulting data, there does not appear to be clear power distributions of different frequencies as I might expect (e.g. high delta & theta power at the front of the head). I am therefore hoping for some guidance on whether my method is correct.

I was wondering whether I ought to epoch my data and run the ICA according to the sleep stage (e.g. run ICA only on the stage 3 sleep, then fit to stage 3 sleep and this will identify components specific to that stage & allow for more specific cleaning). Alternatively, maybe epoching the data into 30 second chunks regardless of sleep stage is better than my current method of running the ICA on the entire 9 hour recording.

Any advice is greatly appreciated as I feel I am going round in circles trying to figure out the right approach!
Many thanks

  • MNE-Python version: 0.22
  • operating system: windows 10

Your approach looks solid. I would focus on removing components that represent stereotypical non-brain activity such as eye movement (ICA000 in your example). Components with activity focused around a single electrode are very likely large-ish artifacts that occurred only once or twice (e.g. a spike due to movement). You can safely remove those components, but not removing then won’t change much either. I usually prefer to leave them in the data, because you always risk removing some amount of brain activity as well (since separation is never perfect).

ICA does not care about the order of samples you give it. That’s why it is irrelevant if you epoch the data or not (as long as you use the same data samples).

If you are only interested in specific segments within the whole recording, I usually restrict ICA to these segments (because I completely discard everything outside). I’m not sure if that’s the case in your analysis when you want to look at the whole sleep duration.

In summary, ICA used like that works fine for cleaning eye artifacts. If you also want to get rid of muscle artifacts, you should take a look at alternative artifact cleaning methods.