R中的时间序列分析:ts()函数中的频率值与acf图中的滞后

时间:2014-06-01 17:45:46

标签: r time-series

我是时间序列分析的新手。我从2009年1月到20013年12月有60个月的月度销售数据,并尝试通过ARIMA模型预测未来6个月的销售情况。我读取数据并将其转换为时间序列对象,如下所示:

 data <- read.csv(file="monthlySalesData.csv", header=TRUE)
 dataInTimeSeris <- ts(data, frequency = 12, start=c(2009,1), end=c(2013,12)) 

当我尝试绘制acf()绘图来确定滞后,之后我的自相关性降低到零,然后我得到X轴上的滞后量表(小数)。我没有足够的权限发布图像,但X轴上的滞后值是十进制的,最大滞后为1.5。 plot = FALSE的acf值也很奇怪(它没有显示计算自相关的滞后)。我无法解释这一点,也无法找到自动相关性降至零的滞后数。

 acf(dataInTimeSeries, plot=FALSE)

Autocorrelations of series ‘dataInTimeSeries’, by lag

0.0000 0.0833 0.1667 0.2500 0.3333 0.4167 0.5000 0.5833 0.6667 0.7500 0.8333 
 1.000  0.642  0.588  0.490  0.401  0.320  0.311  0.269  0.178  0.198  0.229 
0.9167 1.0000 1.0833 1.1667 1.2500 1.3333 1.4167 
 0.271  0.358  0.240  0.210  0.092  0.135  0.098 

问题是什么 - R设置或数据导入或ts()功能有问题吗?如果这是每月数据显示的acf图表,如何解释它?

提前致谢!!

2 个答案:

答案 0 :(得分:4)

您看到的小数只是几年,例如0.0833 = 1/12年,0.1667 = 2/12年aso。

要获得滞后的ACF情节,您可以尝试以下方式:

## Lacking reproducible example, I use simulated monthly data 
tt <- ts(arima.sim(list(order=c(1,0,0), ar=0.4),60), start=2001, deltat=1/12)
## Calculate, but not plot, acf
acfpl <- acf(tt, plot=FALSE)
## Transform the lags from years to months
acfpl$lag <- acfpl$lag * 12

## Plot the acf 
plot(acfpl, xlab="Lag (months)")

enter image description here


据我所知,您正在处理的问题是识别ARMA的订单。要做到这一点,你需要ACF和PACF图。当你说&#34;死于零&#34;在一些滞后之后,你不应该期望值等于零。 95%置信区间内的值(蓝色虚线)在统计上不显着(另请参阅?plot.acf中的注释)。

识别ARIMA模型的顺序可能很棘手,但您可以遵循一些规则。例如。过程AR(p)模型具有像阻尼指数/正弦函数的ACF和具有p显着滞后的PACF。例如。 MA(q)流程则相反。

就这两个简单的情况而言,我使用arima.sim来模拟两个时间序列,ARIMA(1,0,0)和ARIMA(0,0,1)。

set.seed(1234)
arima100 <- arima.sim(list(order=c(1,0,0), ar=0.9), n=500)
arima001 <- arima.sim(list(order=c(0,0,1), ma=0.9), n=500)

par(mfrow=c(2,2), bycol=TRUE)
acf(arima100); acf(arima001)
pacf(arima100); pacf(arima001)

这会产生以下情节:

enter image description here

ARIMA(1,0,0):ACF衰减为零,PACF有一个显着滞后。 ARIMA(0,0,1):ACF有一个显着的滞后(在滞后0之后始终为1),PACF看起来像一个阻尼正弦函数。

现在,只要看看你的ACF,我就敢说两件事:

  • 您的流程可能还有AR术语(也必须检查PACF)
  • 您的数据可能存在季节性因为第12次滞后的峰值,即一年(您可以通过查看数据图来检查)

您可以遵循以下步骤:

  • 如果您的数据中出现趋势,请采取差异
  • 如果你有年度季节性,则采用滞后12的差异
  • 绘制您的无差异和差异数据的ACF和PACF
  • 安装模型arima并检查残差
  • 如果你有几个候选模型比较他们的AIC或BIC值。

另外,阅读一本好书(我使用Henrik Madsen的时间序列分析)或讲义(these look good)可以帮助你很多。

答案 1 :(得分:-1)

使用coredata()也可以解决问题:

acf(coredata(dataInTimeSeries))