Recommendation of decomposition method for non-linear, quasi-stationnary 3D dataset
Hello,
Context I have a 3D dataset (time, lat, lon, only 1 variable) that has non-linear patterns (in time and space), quasi-stationnary in time. This dataset is made of glacier surface velocities (always positive).
Request I am looking for the most appropriate PCA/EOF-based technique, reproducible, that would allow me to analyze the variance modes of my dataset given its non-linearity. It can be assumed stationary, or non-stationary. I have tried REOF, EOF, and Complex-EOF, but I wanted to know if another method would be more appropriate ?
Suggestion Other than the xeofs paper, is there a guide that would help choosing the most appropriate method based on dataset characteristics ? (linearity, stationarity, geophysical, etc...).
Thank you !
Declaration
- [x] I have consulted the documentation but could not find a solution.
Desktop (please complete the following information):
- OS: [Ubuntu]
-
xeofsversion [e.g. 3.0.4]
Additional context I was initially working with ROCK-PCA method, but the Python code (translated from Matlab) does not reproduce the Matlab results from the demo, and the method is not maintained anymore. I contacted the authors to no avail.
Hey, great question, it actually reminds me of your earlier suggestion about putting together a guideline paper on which methods are best suited for different situations. Unfortunately, I don’t have a solid answer for this one right now, and I likely won’t have the time in the near future to expand the documentation enough to address it properly.
That said, here are a few quick pointers that might help, especially for cases involving non-linearity and quasi-stationarity. Besides the kernel-based ROCK-PCA (which honestly sounds like a great fit), you might want to look into neural network–based methods like the non-linear Hilbert PCA proposed by Rattan & Hsieh — method paper, application. It's a bit under the radar, probably because neural nets weren’t mainstream in the early 2000s, but it's definitely doable now with tools like PyTorch.
Just a note: Hilbert-based methods assume the signals are roughly narrow-band. If you're dealing with broader-band signals, Dynamic Mode Decomposition (DMD) might be more appropriate. I recently came across a variant called mrCOST at EGU, could be worth a look. There’s also a Python implementation in PyDMD.
Lastly, have you explored Koopman operator-based spectral decomposition? Might be relevant too (see #245).
Sadly, none of these are currently implemented in xeofs, but hopefully, this gives you a few directions to explore!