JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

Distributed Inverse Solutions: MNE, sLORETA, dSPM

The workhorse linear estimators — minimum-norm and its noise-normalized cousins — derived, compared, and demystified.

The minimum-norm estimate, derived

The archetypal distributed solver picks, out of all currents that fit the data, the one with the smallest total energy \lVert\mathbf{j}\rVert^2. That single choice — Occam's razor cast as an ℓ₂ penalty — turns the ill-posed inverse into a stable linear estimator.

\hat{\mathbf{j}} = \arg\min_{\mathbf{j}}\;\lVert \mathbf{v}-\mathbf{L}\mathbf{j}\rVert^{2} + \lambda\lVert\mathbf{j}\rVert^{2}

The (Tikhonov-)regularized minimum-norm objective: data fit plus an ℓ₂ energy penalty weighted by λ.

The minimum-norm estimate picks, among all source patterns that fit the data, the one with the least total energy. The \lambda term stops it from chasing noise. It's 'the simplest explanation that fits', made precise.

\lVert\mathbf{v}-\mathbf{L}\mathbf{j}\rVert^{2}
The data-fit term.
\lVert\mathbf{j}\rVert^{2}
Total source energy — the ℓ₂ (minimum-norm) penalty.
\lambda
Weights how strongly to prefer low-energy solutions.

Setting the gradient to zero gives a closed form — a single matrix, the inverse operator \mathbf{G}, that you apply to the data at every time sample. Because it is linear and precomputable, MNE source imaging costs essentially one matrix multiply per sample at run time.

\hat{\mathbf{j}} = \mathbf{L}^{\top}\bigl(\mathbf{L}\mathbf{L}^{\top} + \lambda\mathbf{I}\bigr)^{-1}\mathbf{v} \;\equiv\; \mathbf{G}\,\mathbf{v}

The minimum-norm estimate in closed form. With a noise covariance C the identity is replaced by C (whitening); with a source covariance prior R it generalizes to G = R Lᵀ (L R Lᵀ + λC)⁻¹.

The minimum-norm solution has a clean formula — no iteration needed. It packages into a single 'inverse operator' \mathbf{G} that you just multiply the data by. Swapping the identity for a noise covariance whitens the data; adding a source prior generalizes it further.

\mathbf{L}^{\top}
The transpose of the lead field, mapping sensors back toward sources.
(\mathbf{L}\mathbf{L}^{\top}+\lambda\mathbf{I})^{-1}
The regularized inverse that keeps the computation stable.
\mathbf{G}
The resulting inverse operator: \hat{\mathbf{j}}=\mathbf{G}\mathbf{v}.
\lambda
Regularization strength.
G = R @ L.T @ inv(L @ R @ L.T + lam * C)   # inverse operator, precomputed once
j_hat = G @ v                              # apply per time sample (a matrix multiply)
In practice G is built once from the lead field, noise covariance C and source prior R, then applied to every sample — source imaging is a matrix multiply at run time.

The depth bias and how weighting fixes it

Plain MNE has a notorious flaw: because deep sources project weakly to the scalp (their lead-field columns are small), minimizing energy prefers to explain the data with superficial currents. Uncorrected, MNE smears everything onto the cortical surface nearest the sensors — a systematic depth bias, not random error.

The standard fix is depth weighting: inflate the prior variance of deep sources (through the source covariance \mathbf{R}) so the estimator stops penalizing them merely for being far away. This is one instance of the general lesson that \mathbf{R} is precisely where you inject anatomical and physiological prior knowledge into a linear inverse.

Noise normalization: dSPM and sLORETA

A cleaner way to counter depth bias is to standardize the estimate — divide each source's amplitude by its own estimated variability, converting raw current amplitudes into statistical maps. Two standards dominate.

dSPM (dynamic statistical parametric mapping) divides the MNE estimate at each source by the projected noise standard deviation there, yielding a noise-normalized statistic much like a z- or t-map. sLORETA instead standardizes by the estimate's own resolution (the diagonal of the resolution matrix) and famously has zero localization error for a single point source in the noiseless case.

\hat{s}_k = \frac{\hat{\mathbf{j}}_k}{\sqrt{[\mathbf{S}]_{kk}}},\qquad \mathbf{S}=\begin{cases}\mathbf{G}\,\mathbf{C}\,\mathbf{G}^{\top} & \text{(dSPM: projected noise)}\\[4pt] \mathbf{G}\,\mathbf{L} & \text{(sLORETA: resolution)}\end{cases}

Both methods divide the raw estimate by a source-specific normalizer [S]_kk; they differ only in what S is — the projected noise covariance (dSPM) or the estimator's resolution (sLORETA).

Raw minimum-norm maps are biased toward the surface. These methods fix that by dividing each source's estimate by its own noise or resolution level, so deep and shallow sources are judged on a fair footing. The two methods differ only in what they divide by.

\hat{s}_k
The normalized, statistically comparable estimate at source k.
\hat{\mathbf{j}}_k
The raw minimum-norm estimate there.
[\mathbf{S}]_{kk}
The source-specific normalizer.
\mathbf{S}
Projected noise covariance \mathbf{G}\mathbf{C}\mathbf{G}^{\top} (dSPM) or the resolution \mathbf{G}\mathbf{L} (sLORETA).

Choosing the regularization λ

Every distributed method has one knob that dominates the result: the regularization weight λ, which sets the fit-versus-prior tradeoff. Too small and noise explodes (the ill-posedness returns); too large and the estimate collapses toward zero and over-smooths. Getting λ roughly right matters more than the choice between MNE flavors.

  1. Estimate the sensor noise covariance C from baseline / pre-stimulus data — λ is only meaningful relative to the noise level.
  2. Set λ from an SNR target: on whitened data a common choice is λ ≈ 1 / SNR², so the regularization scales with how noisy the data are.
  3. Or scan λ and use the L-curve — plot residual fit against solution norm on log axes and pick the corner of the resulting 'L', where both are jointly small.
  4. Sanity-check by cross-validation, or by confirming the residual v − L ĵ looks like noise rather than leftover structured signal.

Resolution and leakage: the honest limits

Because every linear inverse is \hat{\mathbf{j}}=\mathbf{G}\mathbf{v}=\mathbf{G}\mathbf{L}\mathbf{j}, the product \mathbf{R}=\mathbf{G}\mathbf{L} — the resolution matrix — tells you exactly how the estimate relates to the truth. If \mathbf{R}=\mathbf{I} you recover sources perfectly; in reality it is a blurred, non-diagonal matrix, and it is fully knowable from your forward model before you ever collect data.

\hat{\mathbf{j}} = \mathbf{G}\mathbf{L}\,\mathbf{j} = \mathbf{R}\,\mathbf{j}

The resolution matrix R = GL maps true sources to estimated ones. Its columns are point-spread functions (how one source smears across the map); its rows are cross-talk functions (how other sources leak into the estimate at k).

An honesty check: the estimate you get is the true source blurred through \mathbf{R}=\mathbf{G}\mathbf{L}. If \mathbf{R} were the identity you'd recover sources perfectly; in reality its columns show how one source smears out, and its rows show how neighbours leak in.

\mathbf{R}=\mathbf{G}\mathbf{L}
The resolution matrix mapping true sources to estimated ones.
\text{columns}
Point-spread functions — how a single source smears across the map.
\text{rows}
Cross-talk functions — how other sources leak into the estimate at k.

The off-diagonal structure of \mathbf{R} is source leakage: activity at one location bleeds into the estimate elsewhere. This is not a cosmetic artifact — it is the reason source-space connectivity estimates can be spuriously high, because two nearby estimated sources share leaked signal and look coupled even when they are not. Correcting for leakage is the bridge to the final guide.