我有一个数据集,其中包含12个月内动物的每小时访问次数。我想使用快速傅立叶变换来检查周期性模式和周期性。在过去,我使用Statistica就是为了这个;但是,我想用R来得到光谱密度与周期的关系图。在R中有一个简单的方法吗?如果可能的话,我想确定12小时和24小时的活动高峰。
答案 0 :(得分:36)
您可以考虑以下功能。
periodogram
包的TSA
会立即绘制一个周期图。periodogram
的GeneCycle
会返回频率列表和估算的功率谱密度。它是stats::spectrum
的包装函数,设置了一些特殊选项。spectrum
的stats
允许您选择用于估算谱密度的方法:周期图或使用自回归过程。cpgram
的stats
绘制累积周期图以及置信区间。请参阅,例如,?cpgram
或?spectrum
了解所有细节,并记住,当函数名称重合时,它是TSA::periodogram
和GeneCycle::periodogram
。
还有很多关于如何使用这些功能的在线示例和教程。有关fft
和here的使用情况,请参阅here以获取更广泛的教程。
另外,正如您可能已经知道的那样,必须取消给定的时间序列。因此,使用例如diff(x)
而不是x
。最后,你的时间序列的长度必须可被12整除,以便能够识别12和24小时的频率,它可以通过例如x[-(1:(length(x) %% 12))]
来实现,其中x
是一个趋势时间系列。
答案 1 :(得分:8)
使用spectrum
进行谱密度分析;对于基本快速傅里叶变换也是fft
。