SSP altering the shape of an evoked potential

Hi all,

I’m hoping someone more familiar with SSP in MNE-Python for the removal of the heart artefact could be able to give me some clues as to why performing SSP is altering the shape of my evoked potentials. All images shown are grand average potentials from 36 subjects and 2000 trials each (but the effect is seen in single subject data too). All processing bar the application of SSP is the same.

So here is the image when the data has not been processed to remove the heart artefact:

And here is what happens when I apply SSP with 5 projections:

So you can see a very clear deletion of the positive peak at ~11ms, which is not ideal. Anyone have any ideas why this is happening/how to potentially avoid this effect?

  • MNE version: 0.23.4
  • Python: 3.6
  • operating system: Ubuntu


first off: why do you use five projectors? One per channel type ought to be enough – the more projectors you use to remove a specific artifact, to more likely it becomes to also remove physiological brain signal.

How did you create the projector(s), anyway?

Lastly, your version of MNE-Python is rather old, and I’d advise you to update to the latest stable version, 1.0.3.

Best wishes,

Thanks for responding!

We are using 5 projectors as it’s spinal not brain data, so the artefact is far bigger than classic EEG, with 5 seeming to work well for removal. Projectors created in using create_proj_ecg as per: Repairing artifacts with SSP — MNE 1.0.3 documentation

And yeah my MNE is rather old, in the process of upgrading but we haven’t tested all scripts with python 3.9 and MNE 1.0.3 yet so it’s a slow process to migrate :slight_smile:

Have you tried to tear apart the steps that create_proj_ecg() does for you, specifically, have you run mne.preprocessing.find_ecg_events() and then plotted the events on your raw data e.g. via raw.plot(events=ecg_events) and confirmed that it’s actually just heart beats that were detected?

Edit create_proj_ecg() returns the ECG events too, you can also use those directly and pass them to raw.plot(), it’s probably the better way.

Thanks again for the response!

Based on your answers, I checked the effect of fewer projectors, and while removal of the heart artefact is compromised, the shape of the evoked potential is preserved (this graph is with 1 projector):

But I did also check compute_proj_ecg is working as expected and all seems ok there and the raw plot looks fine - heartbeats being detected where I visually expect them :slight_smile:

Nice! So then I believe using 5 projectors is just “too much” and kicks out some of your physiological data.

You may want to give ICA a shot, maybe you can get slightly better results there?

Yeah I agree!

We actually started with an ICA approach and it’s really poor, suffers from a similar problem to what we see here - to remove the heart artefact takes too many components, but the loss of physiological information is even worse than with SSP :slight_smile:

But thanks again for you input it was super helpful!

1 Like