Multivariate SSA
Multivariate SSA
| Property | Value |
|---|---|
| Method | MSSA |
| Input mode | multivariate |
| Trend shape | (96, 3) |
| Notebook execution | ran |
| Reconstruction RMSE | 0.00000000 |
Notebook example metric: root mean square of input - (trend + season + residual) over all samples and channels. This checks additive bookkeeping; it is not a forecast error or a component-recovery score. The separate teaching input and intermediate arrays for the animation are linked below.
How it works
Method maturity: maintained. Implementation: native-backed.
A joint trajectory-matrix SVD produces modes that are reconstructed separately for each channel.
Deterministic synthetic teaching signal; not a benchmark.
Open GIF · Static PNG · Source arrays (NPZ) · Trace metadata
Follow the four steps
1. Stack aligned windows
Use a common window length and start positions for all channels, then stack their trajectory matrices vertically. Columns describe simultaneous multichannel windows.
2. Compute shared singular modes
Compute the exact NumPy SVD and retain the requested rank. Every matrix mode spans all channel blocks, so a mode can express related temporal structure across channels.
3. Reconstruct each channel
Split each rank-one matrix into its original channel blocks. Within each block, average entries representing the same time index to obtain one reconstructed series per channel.
4. Group trend and season
This example uses DeTime's primary-period frequency heuristic. Low-frequency modes are assigned to trend and modes near 1/period to season, with documented fallbacks if a group is empty. Residual is the observed input minus those two groups. For MSSA, the grouping frequency comes from the mean across channels of each reconstructed mode.
Parameters that change the result
| Parameter | Effect on the computation |
|---|---|
window |
Embedding length L; changes the temporal scale and matrix dimensions. |
rank |
Number of singular modes available for grouping; more modes can retain both signal structure and noise. |
primary_period |
Target period for the frequency-based seasonal grouping heuristic. |
trend_components / season_components |
Optional zero-based mode indices that explicitly define the groups. |
season_freq_tol_ratio / trend_freq_threshold |
Control the frequency bands used by automatic grouping. |
What this animation computes
The trajectory matrix, exact SVD, reconstructed modes, and grouped outputs are computed from the source algorithm. Checks compare trace modes and final groups with the configured Python implementation. The animation explains construction order, not solver wall-clock execution.
Interpretation
- The labels trend and season come from a grouping rule; singular-value order alone does not establish physical meaning.
- Changing window, rank, or grouping can change components even when additive reconstruction remains exact.
- The animation uses backend='python', speed_mode='exact'. Native or randomized fast paths are separate numerical execution choices.
- This is an offline decomposition. Forecasting features must be recomputed using only observations available at each forecast origin.
- Channel magnitudes affect the stacked SVD. Scale channels deliberately when units or amplitudes differ.
- The current automatic grouping uses the mean across channels; opposing phases can cancel in that mean.
Try the method
Use this configuration with DecompositionConfig and decompose. The animation generator supplies the teaching input and records intermediate arrays.
{
"method": "MSSA",
"backend": "python",
"speed_mode": "exact",
"params": {
"window": 36,
"rank": 8,
"primary_period": 24
}
}
See the configuration reference for the full interface and optional dependencies.
Sources and reproduction
- Golyandina and Zhigljavsky (2020), Singular Spectrum Analysis for Time Series
- DeTime implementation:
src/detime/methods/mssa.py - DeTime implementation:
native/src/mssa.cpp - DeTime implementation:
src/detime/methods/utils.py
Regenerate this animation with python scripts/generate_method_animations.py --methods MSSA.
The reproduction guide explains the environment,
numerical checks, coverage manifest, and how to inspect the stored arrays.
Code
case = CASES["MSSA"]
run_gallery_case("MSSA")
Output
MSSA: Multivariate SSA for shared-structure decomposition across channels. status: ran input mode: multivariate trend shape: (96, 3) backend: python reconstruction RMSE: 0.00000000
Decomposition Plot

