Handling complex numbers in LCMV Beamformer with rank deficient data

I am performing source reconstruction using an LCMV beamformer on MEG data that is highly rank deficient (~75). The source space is volumetric. Following the recommendations of @britta-wstnr and in 10.1016/j.neuroimage.2021.118789, I have configured my filter as follows:

filters = make_lcmv(
    epochs.info, 
    forward_model, 
    data_covariance, 
    reg=0,  # No regularization
    noise_cov=noise_covariance,  # From empty-room recordings
    rank=rank,  # The smallest rank between noise and data covariance
    reduce_rank=True,  
    pick_ori="max-power",  
    weight_norm="unit-noise-gain"
)

As I understand, MNE automatically applies a truncated pseudo-inverse when there is rank deficiency. I opted for this approach instead of regularization, given the severe rank deficiency. However, I noticed that when I set reg=0, the resulting solution contains complex numbers (small imaginary components), suggesting numerical instability in the matrix inversion.

What is the best way to handle this situation?

  1. Is it possible to combine regularization (maybe small, like 1%) with a truncated pseudo-inverse?
  2. Would adding a small amount of regularization (e.g., 1–5%) be a better solution than taking the real part of the result (e.g., using np.real())?

Thank you for your insights!

Hi @emarca,

if you data is highly rank-deficient (I assume maybe through maxfiltering), then just using the truncated pseudo-inverse is often not enough. You can try adding regularization, but double-check for sensible results (i.e. source reconstruct something that you know the localization of, e.g. a visually evoked field or compare to another method).

As discussed in the paper, I’d try and use whitening in combination with the truncated pseudo-inverse - which it seems you are already doing based on your code.
To further look into this issue, I’d:

  1. plot the covariance matrices and see if they behave
  2. check if the whitening behaves
  3. see if you get useful results with another method such as dSPM - to make sure it’s not the forward model that is the culprit (which is unlikely because you mention that this is only if you set reg=0?)

If your LCMV results contain complex numbers they cannot be trusted, so I would not recommend using the real part.

Hope this helps,
Britta

1 Like

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