用傅里叶分析去季节化数据

机器算法验证 时间序列 季节性 趋势 傅里叶变换
2022-03-21 13:11:26

我有一个具有两种基本行为的数据。首先,它有一个周期性。它看起来像一个正弦曲线。其次,数据点不断增长。因此,如果我有 100 个没有任何增长的数据点,它将看起来像一条正弦曲线。但由于它的增长率。从点 1 到点 100 的幅度增加。

我不确定在 google 中搜索的正确术语是什么。有这种数据分析的方法吗?

3个回答

您正在寻找的术语是“时间序列的趋势和季节性分解”。谷歌这个。

有很多方法。如果你真的只有 100 分,那么傅立叶就不会很好地工作。基于 Yule-Walker 的方法可能效果更好。还有基于过滤器的方法。例如,Google 带通滤波器,例如来自 Atlanta Fed的bpassm 。这个想法是你从系列中过滤掉不同的频率分量,这样低频是趋势,中频是信号,高频是季节性等。

这个 matlab 示例中有完整的代码集它会带您逐步完成去季节的过程,根据我的经验,它对经济数据非常有效

经典的自回归模型可以处理循环!追溯到很久以前,Yule (1927) 和 Walker (1931) 使用以下形式的方程模拟了太阳黑子的周期性:

yt+1=a+b1yt+b2yt1+ϵt+1

太阳黑子活动往往以 11 年为周期,虽然不是很明显,但包含两个自回归项会产生循环行为!自回归模型现在在现代时间序列分析中无处不在。美国人口普查局使用 ARIMA 模型来计算季节性调整。

更一般地说,您可以拟合一个ARIMA模型,其中包括:

  • p阶自回归项(如上)
  • q顺序移动平均项
  • d差异(使数据稳定)

如果您深入研究数学,则 ARIMA 模型和频域中的表示之间存在傅里叶变换的关系。您可以使用自回归模型、移动平均模型或谱密度来表示平稳的时间序列过程。

前进的实际方法:

  1. 您首先需要获得一个平稳的时间序列例如,对于国内生产总值或总消费,人们通常取对数并计算一阶差。(基本思想是总消费百分比变化的分布在时间上是不变的。)从总消费ΔctCt

Δct=logCtlogCt1

  1. 一旦有了固定的时间序列,就很容易拟合自回归 AR(n) 模型。你可以简单地做最小二乘。对于 AR(2) 模型,您可以运行回归。

yt=a+b1yt!+b2yt2+ϵt

当然,您可以变得更花哨,但通常简单的东西可以很好地工作。在 R、EViews、Stata 等中有很好的时间序列分析包......

如果您的数据是时间序列,您可能需要研究三次指数平滑法,也称为 Holt-Winters 方法。这可以适应加性季节性(季节性幅度不时间的上升趋势而增长)和乘性季节性。这是区别:

加法与乘法季节性

Hyndman 和 Athanasopoulos 的免费在线预测教科书的这一部分解释了Holt-Winters。是基于Gardner (2006, International Journal of Forecasting )的指数平滑方法的完整分类。为了对这样的序列进行实际建模,提取趋势、季节性和误差分量并进行预测,我推荐R 包中ets()的函数forecast