我开始学习时间序列,当我去趋势时,我总是有同样的疑问......
一般来说,我diff()用于,假设有一个像通货膨胀这样的上升趋势......我用它log()来稳定方差。
我的问题是:给定时间序列x,是否有规则我们应该做
log(diff(x))
代替
diff(log(x))
(代码是 R 语言)。
我开始学习时间序列,当我去趋势时,我总是有同样的疑问......
一般来说,我diff()用于,假设有一个像通货膨胀这样的上升趋势......我用它log()来稳定方差。
我的问题是:给定时间序列x,是否有规则我们应该做
log(diff(x))
代替
diff(log(x))
(代码是 R 语言)。
让我们看看这两个选项。
diff(log(x))diff(log(x))计算相对变化。这也考虑了指数趋势。例如,您可以使用它来抑制 Google 的股价发展趋势。根据对数定律:
all.equal(log(3) - log(5), log(3/5))
这意味着,您使用的是相对变化,而不是使用绝对差异来消除趋势。作为奖励,使用自然对数计算的差异也可以解释为百分比变化。有关更多信息,我建议:
Cole, TJ 和 Altman, DG (2017)。统计注释:百分比差异、对称性和自然对数。英国医学杂志,358(八月),j3683。https://doi.org/10.1136/bmj.j3683
log(diff(x))另一方面log(diff(x)),在应用对数之前计算绝对差。如果您使用此方法计算趋势,则趋势将更能抵抗异常值(但这也适用于diff(log(x)))。如果时间序列中有少量的大跳跃,这将很有帮助。请注意,当差异为 0 或负数时,此方法可能会破坏您的分析。(在 R 中:log(0) = -Inf或log(-1) = NaN)
在我看来diff(log(x))是更好的默认选择。虽然 可能有一个用例log(diff(x)),但很难想到一个用例。