首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中的时间序列分析: ts()函数中的频率值与acf图中的滞后

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

Stack Overflow用户
提问于 2014-06-02 01:45:46
回答 2查看 9.4K关注 0票数 1

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

代码语言:javascript
复制
 data <- read.csv(file="monthlySalesData.csv", header=TRUE)
 dataInTimeSeris <- ts(data, frequency = 12, start=c(2009,1), end=c(2013,12)) 

当我尝试绘制acf()图来确定延迟,在此之后,我的自相关性逐渐减少到零,然后我得到了X轴上的十进制滞后刻度。我没有足够的权限发布图像,但X轴上的lag值以十进制表示,最大lag为1.5。带有plot=FALSE的ACF值也变得奇怪(它没有显示lag,它已经计算了自相关)。我无法解释这一点,也找不到自相关消亡到零的滞后数量。

代码语言:javascript
复制
 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 plots对月度数据的显示,如何解释它?

提前感谢!!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-02 23:55:00

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

要获得以月为单位的ACF图,您可以尝试执行以下操作:

代码语言:javascript
复制
## 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)")

据我所知,你正在处理的问题是识别ARMA的订单。为此,您需要ACF和PACF图。当你说“快到零了”的时候,你不应该期望这些值在一段时间后等于零。95%置信区间内的值(蓝色虚线)在统计上没有统计学意义(也可以查看?plot.acf中的注释)。

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

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

代码语言:javascript
复制
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)

这将生成以下图:

ARIMA(1,0,0):ACF衰减到零,而PACF有一个显著的滞后。ARIMA(0,0,1):ACF有一个显著的滞后(在lag-0之后,它总是为1),并且PACF看起来像一个阻尼正弦函数。

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

  • 您的流程可能有AR术语(还必须检查PACF )
  • 由于第12个延迟(即一年)的峰值,您的数据可能具有季节性

您可以遵循以下步骤:

如果您的数据中存在明显的趋势,

  • 采取差异
  • 如果您有无差异和差异data
  • Fit模型的年度seasonality
  • Plot ACF和PACF,则
  • differenced of lag 12;如果您有多个候选模型比较其AIC值或BIC值,请检查
  • 。<代码>H223<代码>F224

此外,阅读一本好书(我用的是Henrik Madsen的时间序列分析)或课堂讲稿(these look good)也会对你有很大帮助。

票数 4
EN

Stack Overflow用户

发布于 2015-10-29 01:16:25

使用coredata()也能达到这个目的:

代码语言:javascript
复制
acf(coredata(dataInTimeSeries))
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23982656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档