StatsSourceMetrics
Namespace: STSLIB · Library: Statistics Library
#include <sts/sts_source_metrics.h>
class STSLIB::StatsSourceMetrics
Source-space evaluation metrics for inverse solutions.
Provides peak localization error (PE) and spatial dispersion (SD) as defined in Lin et al. (2006) and used for CMNE evaluation in Dinh et al. (2021).
Peak localisation error and spatial dispersion metrics for evaluating distributed M/EEG inverse solutions.
VectorXd amplitudes(4);
amplitudes << 0.1, 2.0, 0.5, -0.4;
MatrixXd positions(4, 3); // metres
positions << 0.00, 0.00, 0.00, 0.01, 0.00, 0.00, 0.02, 0.00, 0.00, 0.01, 0.01, 0.00;
const int peak = StatsSourceMetrics::findPeakIndex(amplitudes);
const double localizationError = StatsSourceMetrics::peakLocalizationError(Vector3d(0.01, 0.0, 0.003),
positions.row(peak).transpose());
const double dispersion = StatsSourceMetrics::spatialDispersion(amplitudes, positions, peak);
Static Methods
peakLocalizationError(truePos, estimatedPos)
Peak localization error (Euclidean distance between true and estimated peak).
Parameters:
-
truePos : const Eigen::Vector3d & True source position (3D).
-
estimatedPos : const Eigen::Vector3d & Estimated source position (3D).
Returns:
- double — Distance (same unit as input, typically mm).
spatialDispersion(sourceAmplitudes, sourcePositions, peakIndex)
Spatial dispersion (amplitude-weighted mean distance from peak).
SD = sum_k |a_k| * d(k, peak) / sum_k |a_k|
Parameters:
-
sourceAmplitudes : const Eigen::VectorXd & Source amplitudes (n_sources).
-
sourcePositions : const Eigen::MatrixXd & Source positions (n_sources x 3).
-
peakIndex : int Index of the peak source.
Returns:
- double — Spatial dispersion value (same unit as positions).
findPeakIndex(sourceAmplitudes)
Find the index of the source with maximum absolute amplitude.
Parameters:
- sourceAmplitudes : const Eigen::VectorXd & Source amplitudes (n_sources).
Returns:
- int — Index of the peak source.
Example
- Full source:
src/examples/ex_sts_statistics/main.cpp - Build target:
ex_sts_statistics(runs under CTest)
Used in examples
ex_sts_statistics
Statistics library on small literal data sets with known answers.
amplitudes << 0.1, 2.0, 0.5, -0.4;
MatrixXd positions(4, 3); // metres
positions << 0.00, 0.00, 0.00, 0.01, 0.00, 0.00, 0.02, 0.00, 0.00, 0.01, 0.01, 0.00;
const int peak = StatsSourceMetrics::findPeakIndex(amplitudes);
const double localizationError = StatsSourceMetrics::peakLocalizationError(Vector3d(0.01, 0.0, 0.003),
positions.row(peak).transpose());
const double dispersion = StatsSourceMetrics::spatialDispersion(amplitudes, positions, peak);
// SD = (0.1 * 0.01 + 0.5 * 0.01 + 0.4 * 0.01) / (0.1 + 2.0 + 0.5 + 0.4)
ok &= expect(peak == 1 && std::fabs(localizationError - 0.003) < 1e-15 && std::fabs(dispersion - 0.01 / 3.0) < 1e-15,
QString("peak 1, PLE 3 mm, SD %1 m = 1/300").arg(dispersion));
Authors of this file
- Christoph Dinh <christoph.dinh@mne-cpp.org>