0

我正在研究具有如下结构的时间序列数据:

str(tseries)
 Time-Series [1:479] from 1979 to 2019: 0.0258 0.0234 0.0055 0.0302 0.0305 0.0232 0.025 0.0234 0.0074 0.0089 ...

我正在尝试进行时间序列分析,因此使用自相关函数 (ACF)。首先,它能够在运行时返回绘图:

acf(tseries)

然而,当我尝试执行已区分和记录的 acf() 函数时,它给了我一个错误:

> acf(diff(log(tseries)))
Error in na.fail.default(as.ts(x)) : missing values in object
In addition: Warning message:
In log(tseries) : NaNs produced

它所指的缺失值是什么?因为我已经确保我正在处理的数据集根本没有缺失值,如果这就是它的意思的话。

4

2 回答 2

1

正如科里回答的那样,问题是从负值中获取日志。我想在他的回答中添加评论,以进一步解释如何解决您的问题,但事实证明我的解释太长了。

添加一个常量可以解决您的问题,但这取决于实际的数字是否有意义/是否有效。
通常,ARIMA 和自相关意味着您测量的任何值都依赖于以前的值。例如,如果我想预测明天的温度,我会查看今天的:这 2 个是相关的。
这就是自相关测试的含义:查看一个系列中的值是否与同一系列中附近的其他值相关。

在某些情况下,效果更具乘性,从 1000 增加到 1100 比从 1 增加到 101 的可能性更大。如果它是完全乘法的,从 1000 增加到 1100 的可能性与从 1 增加到 1.1 的可能性一样
在这些情况下,取对数是有意义的,对数的差异表示百分比增加或减少。这意味着日志无法处理符号中的开关:您不能通过乘以或除以任何正数来从 1 变为 -1。

这也可能取决于您的实际值的含义。任何人都会明白,温度从 1º C 升高到 2º C 与从 33.8º F 升高到 35.6º F 一样有意义,尽管第一个看起来像增加了 100%,而第二个看起来只是增加了 5% . 这意味着以摄氏或华氏温度记录是没有意义的,尽管有时以开尔文或兰金为单位的温度记录是有意义的。

实际上,大多数问题将是线性和乘法效应的混合,其中从 1000 增加到 1100 的可能性与从 1 增加到 2 或类似的可能性一样。所以这取决于你的数据代表什么,你需要找到一些自相关最强的计算。实际上,为您添加一些常量a并获取日志的建议对此非常有效!

对于选择什么常数的问题,您需要自己回答:“哪些增加与其他增加的可能性一样?”
在我的示例中,说从 1000 增加到 1100 的可能性与从 1 增加到 2 的可能性一样,意味着求解方程(1000+c)/(1100+c)==(1+c)/(2+c),其中c是我们正在寻找的常数。这里结果是 9.09,尽管自相关函数对小差异不敏感。

你也可以玩一下它,或者尝试其他类型的功能。自相关性越强,拟合度越好。

于 2018-12-11T17:22:23.570 回答
0

如果您的时间序列有任何负值,log 将导致NaN,这会导致您的缺失值错误。

> a <- c(-1,2,3,4,5,6)
> acf(diff(log(a)))
Error in na.fail.default(as.ts(x)) : missing values in object
In addition: Warning message:
In log(a) : NaNs produced
于 2018-12-11T16:02:04.410 回答