xeofs icon indicating copy to clipboard operation
xeofs copied to clipboard

Recommendation of decomposition method for non-linear, quasi-stationnary 3D dataset

Open vdevauxchupin opened this issue 9 months ago • 1 comments

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]
  • xeofs version [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.

vdevauxchupin avatar May 07 '25 19:05 vdevauxchupin

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!

nicrie avatar May 12 '25 13:05 nicrie