mne_denoise.asr.fit_rms_distribution#

mne_denoise.asr.fit_rms_distribution(values: ndarray, *, min_clean_fraction: float = 0.25, max_dropout_fraction: float = 0.1, fit_quantiles: tuple[float, float] = (0.022, 0.6), beta_grid: ndarray | None = None, return_info: Literal[False] = False) tuple[float, float][source]#
mne_denoise.asr.fit_rms_distribution(values: ndarray, *, min_clean_fraction: float = 0.25, max_dropout_fraction: float = 0.1, fit_quantiles: tuple[float, float] = (0.022, 0.6), beta_grid: ndarray | None = None, return_info: Literal[True]) tuple[float, float, dict[str, Any]]

Fit robust clean EEG RMS statistics.

This implements the truncated generalized-Gaussian grid search used by the ASR calibration. The fitter sorts finite RMS values, searches over plausible low-tail dropout offsets and clean interval widths, and selects the generalized-Gaussian shape with minimum histogram KL divergence.

Parameters:
  • values (ndarray, shape (n_windows,)) – RMS or amplitude statistics for one component/channel.

  • min_clean_fraction (float) – Minimum fraction of values assumed to be clean.

  • max_dropout_fraction (float) – Maximum low-tail fraction that may be ignored as dropouts.

  • fit_quantiles (tuple of float) – Lower and upper quantile span used for the clean interval search. The upper value also controls the preferred interval width.

  • beta_grid (ndarray | None) – Generalized-Gaussian shape grid. If None, use values from 1.7 to 3.5, matching the range commonly cited for ASR ports.

  • return_info (bool) – If True, return an additional diagnostics dictionary.

Returns:

  • mu (float) – Robust location estimate of the clean RMS distribution.

  • sigma (float) – Robust standard-deviation estimate of the clean RMS distribution.

  • info (dict) – Returned only when return_info=True. Contains beta, fit_error, fit_interval, and n_fit_samples.

Examples

Calculate robust statistics for a noisy array, ignoring massive outliers:

>>> import numpy as np
>>> from mne_denoise.asr import fit_rms_distribution
>>> rng = np.random.default_rng(42)
>>> clean = np.abs(rng.normal(10.0, 2.0, 5000))
>>> artifacts = np.abs(rng.normal(30.0, 10.0, 500))
>>> noisy_data = np.concatenate([clean, artifacts])
>>> mu, sigma = fit_rms_distribution(noisy_data)
>>> print(f"Robust mean: {mu:.1f}")
Robust mean: 10.0