Group-level average of (individual-level average) source timecourses

Dear MNE community,

I am extracting (per-ROI) average activity in source space via mne.extract_label_time_course() at the individual (participant) level, using mode="mean_flip", which results in timecourses that are overall positive for some participants, but negative for some other participants (in the same ROI).

What is the recommended pipeline for computing group-level average activity? Is it better to use mode="mean" (to avoid averaging positive and negative values) or to first transform (e.g., squaring) the individual-level source activity before averaging at the group level?

Thanks for your help!

Best wishes,

Ladislas

Hi Ladislas,

that is an important topic in source reconstructed time series and I don’t think there is a correct answer on how to deal with sign ambiguity. You could just take the mean or square the data, both is valid. If you want to dig a bit deeper there is a method that basically sign flips on the group level, it’s implemented in the osl dynamics toolbox. The paper explaining the method is by Vidaurre et al (search for sign ambiguity). As far as I know this is not (yet) implemented in MNE.

Cheers,

Carina

2 Likes

Thank you very much for your response and for the links!

I am still struggling to understand what happens in my case. I have use apply_inverse(…, pick_ori=None), which discards orientation and results in positive-only sources activations (gray lines in the attached figure). However, averaging sources within a given label (ROI) with mode=“mean_flip” or mode="pca_flip" produces average timecourses that can have both positive and negative values…

Do you know what happens there? My intuition is that the issue may come from the fact that mne.extract_label_time_cours(..., mode="mean_flip") was not intended to be used with positive-only values (e.g., sources activations with pick_ori=None).

I do think that the sign flipping can produce negative values even when all the input is positive but I am not confident to say whether that makes sense or not. Maybe we should update the documentation, so a good thing that you raised that issue.

Thank you for your response! It seems that (at least in this situation) mode=”pca_flip” produces a similar timecourse as mode=”mean” (i.e., the shape of the timecourse is similar, but the sign is flipped), but mode=”mean_flip” does more than just sign flipping, it also changes the shape of the timecourse, which I am also not sure makes sense.

To be fair, I am also a bit confused about the change in the signal due to ‘mean_flip’.

I will have a look at the source code.

Maybe @larsoner can explain why the signal (which should be all positive) flattens after ‘mean_flip’?

If your original STC is all positive, mean_flip should not be used. mean is a more correct choice.

Imagine your label contained just two vertices, one on top of a gyrus (normal pointed upward/outward) and one very close but at the bottom of a sulcus (normal pointed downward/inward). Assuming you’re using minimum norm, these would have very similar activations, but with opposite signs (i.e., their 3D vectors would point in the same direction, but one would be in the opposite direction from its vertex normal). But if you take the abs of the activation – or do pick_ori=None instead of pick_ori=”normal” – whichever one had a negative activation becomes positive. Then mean_flip – which takes into account the normal difference – will flip it back, and they will cancel out. Hence why you only want mean_flip for activations that are (in principle) signed, and why mean would be a better choice if you’ve already taken the abs (implicitly or explicitly)

3 Likes

Thank you very much for taking the time to write this explanation!

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.