如何“取消差异”时间序列变量

机器算法验证 时间序列 预测 有马 平稳性
2022-03-24 17:06:03

我需要“无差异”或“整合”时间序列变量。在当前状态下,它是双重差分的(货币市场,现金回报代理变量是 I(2) 以实现平稳性)。我与其他变量一起模拟了该变量,以从拟合的 copula 生成 100,000 个观察值,因此我没有初始参考值来启动 R 函数中的“无差异”diffinv()函数。

这是一个简化的问题来说明(使用 R):

创建任意原始系列:

undifferenced = c(0.5, -0.1, 0.2, 0.08, -0.02)

区分系列:

differenced = diff(undifferenced)

Output: -0.60  0.30 -0.12 -0.10

尝试“不区分”系列:

diffinv(differenced)

Output: 0.00 -0.60 -0.30 -0.42 -0.52, 

这不是原始系列

或者,如果您想删除以0.00进行清理:

diffinv(differenced)[-1]

Output: -0.60 -0.30 -0.42 -0.52, 

无论如何都不是原始系列

如果您“以某种方式”先验地知道原始系列的初始值,则输出是正确的:

diffinv(fff, xi = 0.5)

Output: 0.50 -0.10  0.20  0.08 -0.02, 

这是原始系列。

在我的模拟中,我无法指定xi.

在这一点上,如果有人有任何正确“无差异”的经验或可以帮助找出问题,我将不胜感激。

顺便说一句,对于非 R 用户,我可以导出数据以在 Excel 中使用。

提前致谢。


@Andy @Glen_b 感谢您的帮助,谢谢。mean我以原始系列的 是一个足够好的代理来初始化函数的借口进行评估diffinv()(在没有实际原始值要初始化的模拟上下文中)。然后假设模拟的差异数据与原始差异数据具有相同的质量。

虽然在初始化时出现了一个问题xi = mean(undifferenced)- 这个标量值适用于较小的一组观察值(~240 obs),但标量不允许diffinv()函数在模拟的 100,000 个观察值系列上运行。R的帮助文件描述xi为“ numeric vector, matrix, or time series containing the initial values for the integrals”。有什么想法或参考吗?没有关于xi向量长度的指导,我认为只需一个标量就足以启动无差异过程。

3个回答

恐怕你已经找到了最简单的解决方案,那就是选择一个xi,也就是积分常数另一种方法是表达您对“无差异”序列提出的任何问题,以便积分常数无关紧要。

潜在的问题是“差异”将许多值序列映射到相同的差异序列。如果是您的序列,那么对于任何常数,序列将具有相同的差异。xnCxn+C

不要diff()使用实际的时间序列数据,而是使用函数中的 d 参数auto.arima来定义它。假设您的数据系列是val.ts并且您只想在第一次订购之前进行差分以使您的系列静止,而不是使用auto.arima(diff(val.ts)), do auto.arima(val.ts,d=1)我已经在这里回答了我的实际问题 将双差预测转换为实际值

由于该系列有两倍的差异,因此您需要原始源数据的前两个值。

你提到它是一个货币市场,现金回报代理变量。不应该可以获取源数据吗?

在您的模拟中,我假设您正在生成 100,000 个与两次差分数据具有相似特征(使用拟合的 copula)的系列?您只需要选择您的 xi 值来“重新校准”您的差分序列,使其与原始序列相似。

在您的示例中, 0.5 是在添加每个差分步骤时开始的初始值。

如果我生成 100,000 个差分序列,我会将 xi 设置为 0.5 以与原始序列具有相同的起点。