我有一个包含某种动物在12个月内每小时访问次数的数据集。我希望使用快速傅里叶变换来检查其循环模式和周期性。以前我用 Statistica 来完成这个任务,但现在我想用 R 生成频谱密度与周期的图形。请问有什么简便的方法可以在 R 中实现吗?如果可能的话,我还想识别出12小时和24小时的最高活动峰值。
TSA
包中的periodogram
函数会立即绘制出一个周期图。GeneCycle
包中的periodogram
函数返回频率列表和估计的功率谱密度。它是一个对stats::spectrum
的封装,具有一些特殊选项。stats
包中的spectrum
函数允许您选择用于估计谱密度的方法:使用周期图或自回归过程。stats
包中的cpgram
函数会绘制出累积周期图以及置信区间。例如,查看?cpgram
或?spectrum
获取所有详细信息,并记住当函数名称重复时,使用的是TSA::periodogram
和GeneCycle::periodogram
。
此外,网上还有很多示例和教程可供使用这些函数。在这里查看如何使用fft
,在这里查看更详细的教程。
另外,如您所知,给定时间序列必须去趋势。因此,请使用diff(x)
而不是x
。最后,您的时间序列长度必须是12的倍数,以便能够识别12和24小时频率,可以通过例如x[-(1:(length(x) %% 12))]
来实现,其中x
是去趋势的时间序列。
使用spectrum
进行频谱密度分析;同时使用fft
进行基础快速傅里叶变换。
spectrum
是一个独立的谱密度分析器;它通过一些预处理、后处理和绘图来调用fft
。 - Ben Bolker