在R中对时间序列进行离散傅里叶变换

5
我想使用离散傅里叶变换来识别销售动态并聚类相似的模式。然而,我在使用R方面还很新手,在寻找解决方案后,我找到了一个fft()程序,但不确定是否得到与DFT相同的结果。我想在图表上展示波形,然后使用算法聚类类似的销售动态。此外,我想知道是否可以使用fft过程转换所有时间序列,而不是逐个转换(因此建议R:在26周后转换新时间序列 - 查看数据库)。
这是我的数据库的一部分:http://imageshack.com/a/img854/1958/zlco.jpg,三列: 产品 - 表示产品组 周 - 自产品推出以来的时间(周),前26周 销售增益 - 产品销售如何随着周数变化
这是我的时间序列的样子:http://imageshack.com/a/img703/6726/sru7.jpg 我相信我最终可以使用fft()来实现这个目标,但从fft()的输出到我的目标的跃迁有点不清楚。
请注意,我对时间序列分析还比较新手(这就是为什么我不能在这里放置我的代码),因此,您提供的任何关于将fft()的输出放入上下文或任何可以有效完成此任务的软件包的澄清都将不胜感激。
1个回答

1

根据古老的记忆,您应该平方实部以获取频谱,该频谱可在每个频率(例如您的示例中的天数)处给出幅度。

x = some data
plot(Re(fft(x))^2)

一些数据是指y轴或时间上的一列吗?因为我想让FFT考虑每个产品类别在每周的销售增益,并获得结果(向量/点),然后我可以对其进行聚类。每个聚类应该显示具有不同销售动态的产品组。我应该分别计算每个时间序列的FFT吗?如果能提供详细的解释,我将不胜感激。 - user3463225
在使用x=dane$sales_gain plot(Re(fft(x))^2之后,我得到了这个图。你能告诉我它的含义吗?http://imageshack.com/a/img856/5883/jzsy.jpg 它是每个观测值的频率吗?因为我需要分析时间序列,所以可能我应该获取每周产品销售增益的频率。 - user3463225
抱歉 - 刚刚注意到这些消息。 - user3472874
DFT将信号从时间域转换为频率域。x轴是频率,y轴是强度。FFT仅是用于更快地计算DFT的算法。从您的数据中观察,我可能会想问为什么要从DFT入手。使用一些时间序列方法对其进行建模可能会更好,您可以创建一些变量(星期几,工作日/周末等)并查找数据中的趋势或季节性模式。R有一个出色的包来处理这种情况:http://cran.r-project.org/web/packages/forecast/index.html。 - user3472874
@user3472874 我可以问一个问题吗?因为我也是R和FFT的新手,所以你的意思是y轴上的强度是幅度吗?因为我看到FFT的概念中有幅度和相位,但实际上我还是不太理解。然后第二个问题是,你能告诉我为什么我们需要用2的幂次方吗?谢谢你的回答。 - rischan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接