确定ARIMA建模的参数(p,d,q)


10

我是统计学和R语言的新手。我想知道为我的数据集确定ARIMA参数的过程。您能帮我使用R并从理论上(如果可能的话)弄清楚吗?

数据范围为1月12日至14年3月,描述了每月的销售量。这是数据集:

99 58 52 83 94 73 97 83 86 63 77 70 87 84 60 105 87 93 110 71 158 52 33 68 82 88 84

这是趋势:

在此处输入图片说明

数据没有显示趋势,季节性行为或周期性。

Answers:


9

通常,请阅读高级时间序列分析教科书(入门书籍通常会指导您仅信任您的软件),例如Box,Jenkins和Reinsel的时间序列分析。您还可以通过谷歌搜索找到Box-Jenkins程序的详细信息。请注意,除了Box-Jenkins,还有其他方法,例如基于AIC的方法。

在R中,您首先将数据转换为ts(时间序列)对象,并告诉R频率为12(每月数据):

require(forecast)
sales <- ts(c(99, 58, 52, 83, 94, 73, 97, 83, 86, 63, 77, 70, 87, 84, 60, 105, 87, 93, 110, 71, 158, 52, 33, 68, 82, 88, 84),frequency=12)

您可以绘制(部分)自相关函数:

acf(sales)
pacf(sales)

这些并不表示任何AR或MA行为。

然后,拟合模型并对其进行检查:

model <- auto.arima(sales)
model

请参见?auto.arima寻求帮助。如我们所见,auto.arima选择一个简单的(0,0,0)模型,因为它既看不到趋势,季节性,也看不到AR或MA。最后,您可以预测并绘制时间序列和预测:

plot(forecast(model))

预测

看一下?forecast.Arima(注意大写字母A!)。

这本免费的在线教科书很好地介绍了使用R进行时间序列分析和预测。非常推荐。


嗨,斯蒂芬,我已经为数据集添加了数据和绘图。如您所见,我只有27个数据点,因此我在这里运行烟雾。您能在这里提出一些建议吗?
Raunak87

我编辑了答案。您的系列没有太多结构,因此您几乎无能为力。由于本质上噪声很小,因此预测间隔较大。
Stephan Kolassa 2014年

4

两件事。您的时间序列是每月的,您需要至少4年的数据才能进行明智的ARIMA估计,因为有27点未给出自相关结构。这也可能意味着您的销售受某些外部因素的影响,而不是与其自身价值相关联。尝试找出影响您的销售的因素,以及正在衡量的因素。然后,您可以运行回归或VAR(向量自回归)来获取预测。

如果您除了这些值外没有其他任何东西,最好的方法是使用指数平滑法来获得幼稚的预测。R中可以使用指数平滑。

其次,不要孤立地看待某产品的销售,这两种产品的销售可能是相关的,例如,咖啡销售的增加可以反映出茶叶销售的减少。使用其他产品信息来改善您的预测。

这通常发生在零售或供应链中的销售数据中。他们在系列中没有显示很多自相关结构。另一方面,ARIMA或GARCH之类的方法通常适用于通常具有自相关的股市数据或经济指数。


3

这实际上是评论,但超出了允许范围,因此我将其发布为准答案,因为它提出了分析时间序列数据的正确方法。。

众所周知的事实,但在这里和其他地方经常被忽略,是用于制定暂定ARIMA模型的理论ACF / PACF假定没有脉冲/水平移动/季节性脉冲/本地时间趋势。另外,它以恒定的参数和恒定的误差随时间变化为前提。在这种情况下,很容易将第21个观察值(值= 158)标记为离群值/脉冲,建议将其调整为-80会得出修改后的值78。修改后的序列所得的ACF / PACF显示很少或没有随机(ARIMA)结构的证据。在这种情况下,手术成功了,但是病人死亡了。样本ACF基于协方差/方差,并且过度夸大/膨胀的方差会导致ACF的向下偏差。基思·奥尔德教授曾将此称为“爱丽丝梦游仙境效应”


2

正如Stephan Kolassa所指出的那样,您的数据中没有太多结构。自相关函数不建议使用ARMA结构(请参见acf(sales)pacf(sales)),forecast::auto.arima并且不选择任何AR或MA顺序。

require(forecast)
require(tsoutliers)
fit1 <- auto.arima(sales, d=0, D=0, ic="bic")
fit1
#ARIMA(0,0,0) with non-zero mean 
#Coefficients:
#      intercept
#        81.3704
#s.e.     4.4070

但是,请注意,在5%的显着性水平上,残差的正态无效性被拒绝了。

JarqueBera.test(residuals(fit1))[[1]]
#X-squared = 12.9466, df = 2, p-value = 0.001544

旁注:JarqueBera.test基于jarque.bera.test包中提供的功能tseries

将观测值21中包含的加法离群值包括在内,从而检测出tsoutliers的残差具有正态性。因此,截距的估计和预测不受外围观察的影响。

res <- tsoutliers::tso(sales, types=c("AO", "TC", "LS"), 
  args.tsmethod=list(ic="bic", d=0, D=0))
res
#ARIMA(0,0,0) with non-zero mean 
#Coefficients:
#      intercept     AO21
#        78.4231  79.5769
#s.e.     3.3885  17.6072
#sigma^2 estimated as 298.5:  log likelihood=-115.25
#AIC=236.49   AICc=237.54   BIC=240.38
#Outliers:
#  type ind time coefhat tstat
#1   AO  21 2:09   79.58  4.52
JarqueBera.test(residuals(res$fit))[[1]]
#X-squared = 1.3555, df = 2, p-value = 0.5077

1
使用的Jarque Bera检验是没有意义的,因为(i)它依靠渐近逼近,直到达到数百时才起作用,并且(ii)正式的假设检验回答错误的问题(我们知道数据不会完全正常的;真正的问题是多么严重,我们可能会被潜在的非正常影响,该测试不说话n=12n
Glen_b -Reinstate莫妮卡
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.