自相关函数(ACF)中的错误:对象中缺少值

时间:2018-12-11 15:57:07

标签: r time-series autocorrelation

我正在处理具有以下结构的时间序列数据:

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

缺失值指的是什么?因为那是我的意思,所以确保我正在处理的数据集完全没有缺失值。

2 个答案:

答案 0 :(得分:0)

如果您的时间序列具有任何负值,则日志将生成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

答案 1 :(得分:0)

正如Corey回答的那样,问题在于从负值获取日志。 我想在他的回答中添加评论,以解释更多有关如何解决您的问题的信息,但事实证明我的解释太长了。

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

在某些情况下,效果是乘法的,从1000到1100的增加比从1到101的增加更可能。如果是完全乘法,则从1000到1100的增加与从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。

您也可以使用它,或者尝试其他类型的功能。自相关性越强,适合度越高。