时间序列聚类:傅里叶变换和 PCA

机器算法验证 r 时间序列 聚类
2022-03-26 01:32:21

我有物种生物量的生物时间序列(9 年之久),这些生物量在逻辑上表现出季节性模式。我想根据它们典型的季节性演变(例如春季与夏季物种)将它们分成几组。为此,我被建议使用傅立叶变换将它们的信号分解为N谐波(例如 3:年度、两年和三年的季节性周期),并在主成分分析(PCA)中使用这些信号的幅度和相位; 这将起作用,因为谐波是正交/不相关的)。

我知道这个论坛已经有一些类似的主题,但有些方面我还不清楚。我的问题是:

(1) 当我从离散傅里叶变换 (DFT) 计算的一次谐波重构时间演化时N,原始信号的解释可变性(重构信号与原始数据之间的线性模型的 R²)有时仅为 0.40(N=3) 或 0.60 ( N=5)。根据您的经验,这是否意味着数据不适合这种方法,这会使该方法无效吗?我可以做更多的预处理来解决这个问题吗(例如,平滑信号……)?有些物种表现出突然增加,但完全不存在,我想知道这是否不需要更高频率的谐波;我应该期待那里的困难以及如何解决它们?

(2) 除了这里看起来有限的 DFT,我考虑通过快速傅里叶变换 (FFT) 算法使用连续傅里叶变换并处理每个时间序列的功率谱。我想知道这是否可以让我通过选择周期图中的最高峰然后计算要在后续 PCA 中使用的相应幅度和相位来选择N'所谓的“谐波” ……这有意义吗?N'如何具体使用 R 中的 FFT 算法给出的信息(例如fft()spec.pgram())来运行后续的 PCA(或任何其他聚类方法)?[非常欢迎任何 R 代码片段]

(3) 如何在连续情况下(FFT)从选定的谐波中重建信号?在 DFT 情况下我可以轻松做到这一点,但在连续情况下我被愚蠢地阻止了……任何 R 代码片段当然都非常受欢迎。

任何有关这些问题的帮助将不胜感激。指向具体示例的链接,尤其是相关的 R 代码,也会非常有帮助(以及方法名称或关键字)。谢谢你。

PS:以防万一:时间序列长度相等,并经过预处理以具有统一的采样间隔;可以假设平稳;没有长期趋势在路上。我将时间序列划分为每年 52 次等间隔的观测(即 9 年的 468 次观测)。

0个回答
没有发现任何回复~