Constraining source space to a label

  • MNE version: 1.7.1
  • operating system: Ubuntu 18.04.6 LTS

Dear users,

I’m conducting source localization (minimum norm estimation) on some epoched MEG data with…

# Read files
epochs = mne.read_epochs(epochs_fname)
MRItrans = mne.read_trans(MRItrans_fname)
bemSol = mne.read_bem_solution(bemSol_fname)

# Get noise covariance for the epochs
epochs_cov = mne.compute_covariance(epochs)

# Create source space
src = mne.setup_source_space(subject, subjects_dir=subjectsDir)

# Forward solution
fwd = mne.make_forward_solution(epochs_fname, trans=MRItrans, src=src, bem=bemSol, meg=True)

# Inverse operator
inv = mne.minimum_norm.make_inverse_operator(epochs.info, forward=fwd, noise_cov=epochs_cov)

# Apply inverse opertaor
snr = 3.0 
lambda2 = 1.0 / snr**2
stc_epochs = mne.minimum_norm.apply_inverse_epochs(epochs, inv, lambda2=lambda2, method="MNE", pick_ori="normal")

We only have partial head coverage with a few sensors, so we’d like to try constraining MNE to a relatively small area (defined by an anatomical label). Is there a way to (safely) crop the source space (src), or constrain the inverse operator (inv), to an anatomical label?

I know that I can easily mask the output (stc.in_label()), but that’s not what I’m talking about. We’re thinking (perhaps incorrectly) that constraining source localization to a small patch will improve localization accuracy, given that we do not have whole-head coverage.

Thanks in advance for any advice :slight_smile:

EDIT:

I see that mne.minimum_norm.apply_inverse_epochs() has a label argument, which the documentation describes as: “Restricts the source estimates to a given label. If None, source estimates will be computed for the entire source space.”

Does this actually constrain the source estimate computation (as opposed to simply masking results)?

MNE/loreta/dspm will project the activity on the sensors back to the available source locations. The complication with this is that a source outside of your source space has produced signal that is picked up on your sensors. This data will then be projected to the available source locations and make it appear that your chosen sources are active when it is actually coming from locations outside of your source space. You probably should just project your data to the entire brain and then select the activity within your anatomical region of interest. Reducing your source space will not make the answer more accurate unless you are certain that the activity is coming from a specific anatomical region (an example where this would be valid would be early activity in primary sensory regions).

NOTE: beamforming does not have this source space issue - but comes with other complexities.

-Jeff

Thanks, Jeff. I’m working with data from a somatosensory paradigm (median nerve stimulation), so we are confident that the activity is coming from S1.

If you are just fitting S1 - you might just want to go with a simple dipole solution and extract the time series. This is used in clinical localization routinely and has been used with a limited number of sensors from before whole head systems came about.

-Jeff

Thanks for the suggestion, Jeff. While we see the value of a simple dipole fit, my co-author and I were really interested to see how constraining source space would affect the results of MNE, considering our partial head coverage.

So far as I can tell, the label argument to mne.minimum_norm.apply_inverse_epochs() (see my original post) does constrain the source space as intended. While this is great for efficiency (it takes much less time than computing whole-brain estimates) the estimates within that label were near-identical to those derived from a whole-brain analysis, even when using a tiny (20 vertices) label.

So, constraining estimates to a single label seems to make virtually no difference to final results (at least, this was true of our data), but it does reduce processing time…