R语言进行ARIMA分析报告.docx
- 文档编号:23775979
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:11
- 大小:165.32KB
R语言进行ARIMA分析报告.docx
《R语言进行ARIMA分析报告.docx》由会员分享,可在线阅读,更多相关《R语言进行ARIMA分析报告.docx(11页珍藏版)》请在冰豆网上搜索。
R语言进行ARIMA分析报告
R学习日记——时间序列分析之ARIMA模型预测
今天学习ARIMA预测时间序列。
指数平滑法对于预测来说是非常有帮助的,而且它对时间序列上面连续的值之间相关性没有要求。
但是,如果你想使用指数平滑法计算出预测区间,那么预测误差必须是不相关的,而且必须是服从零均值、方差不变的正态分布。
即使指数平滑法对时间序列连续数值之间相关性没有要求,在某种情况下,我们可以通过考虑数据之间的相关性来创建更好的预测模型。
自回归移动平均模型(ARIMA)包含一个确定(explicit)的统计模型用于处理时间序列的不规则部分,它也允许不规则部分可以自相关。
首先,先确定数据的差分。
ARIMA模型为平稳时间序列定义的。
因此,如果你从一个非平稳的时间序列开始,首先你就需要做时间序列差分直到你得到一个平稳时间序列。
如果你必须对时间序列做d阶差分才能得到一个平稳序列,那么你就使用ARIMA(p,d,q)模型,其中d是差分的阶数。
我们以每年女人裙子边缘的直径做成的时间序列数据为例。
从1866年到1911年在平均值上是不平稳的。
随着时间增加,数值变化很大。
>skirts<-scan("
Read46items
>skirtsts<-ts(skirts,start=c(1866))
>plot.ts(skirtsts)
我们可以通过键入下面的代码来得到时间序列(数据存于“skirtsts”)的一阶差分,并画出差分序列的图:
>skirtstsdiff<-diff(skirtsts,differences=1)
>plot.ts(skirtstsdiff)
从一阶差分的图中可以看出,数据仍是不平稳的。
我们继续差分。
>skirtstsdiff2<-diff(skirtsts,differences=2)
>plot.ts(skirtstsdiff2)
二次差分(上面)后的时间序列在均值和方差上确实看起来像是平稳的,随着时间推移,时间序列的水平和方差大致保持不变。
因此,看起来我们需要对裙子直径进行两次差分以得到平稳序列。
第二步,找到合适的ARIMA模型
如果你的时间序列是平稳的,或者你通过做n次差分转化为一个平稳时间序列,接下来就是要选择合适的ARIMA模型,这意味着需要寻找ARIMA(p,d,q)中合适的p值和q值。
为了得到这些,通常需要检查[平稳时间序列的(自)相关图和偏相关图。
我们使用R中的“acf()”和“pacf”函数来分别(自)相关图和偏相关图。
“acf()”和“pacf设定“plot=FALSE”来得到自相关和偏相关的真实值。
>acf(skirtstsdiff2,lag.max=20)
>acf(skirtstsdiff2,lag.max=20,plot=FALSE)
Autocorrelationsofseries‘skirtstsdiff2’,bylag
0 1 2 3 4 5 6 7 8 9 10
1.000-0.303 0.096 0.009 0.102-0.453 0.173-0.025-0.039 0.073-0.094
11 12 13 14 15 16 17 18 19 20
0.133-0.089-0.027-0.102 0.207-0.260 0.114 0.101 0.011-0.090
自相关图显示滞后1阶自相关值基本没有超过边界值,虽然5阶自相关值超出边界,那么很可能属于偶然出现的,而自相关值在其他上都没有超出显著边界,而且我们可以期望1到20之间的会偶尔超出95%的置信边界。
>pacf(skirtstsdiff2,lag.max=20)
>pacf(skirtstsdiff2,lag.max=20,plot=FALSE)
Partialautocorrelationsofseries‘skirtstsdiff2’,bylag
1 2 3 4 5 6 7 8 9 10 11
-0.303 0.005 0.043 0.128-0.439-0.110 0.073 0.028 0.128-0.355 0.095
12 13 14 15 16 17 18 19 20
0.052-0.094-0.103-0.034-0.021-0.002 0.074 0.020-0.034
偏自相关值选5阶。
故我们的ARMIA模型为armia(1,2,5)
>skirtsarima<-arima(skirtsts,order=c(1,2,5))
>skirtsarima
SSeries:
skirtsts
ARIMA(1,2,5)
Coefficients:
ar1 ma1 ma2 ma3 ma4 ma5
-0.4345 0.2762 0.1033 0.1472 0.0267 -0.8384
s.e. 0.1837 0.2171 0.2198 0.2716 0.1904 0.2888
sigma^2estimatedas206.1:
loglikelihood=-183.8
AIC=381.6 AICc=384.71 BIC=394.09
预测后5年裙子的边缘直径
> skirtsarimaforecast<-forecast.Arima(skirtsarima,h=5,level=c(99.5))
>skirtsarimaforecast
PointForecast Lo99.5 Hi99.5
1912 548.5762507.1167590.0357
1913 545.1793459.3292631.0295
1914 540.9354396.3768685.4940
1915 531.8838316.2785747.4892
1916 529.1296233.2625824.9968
> plot.forecast(skirtsarimaforecast$residuals) #谢谢@忆水如烟的指正
第三步,检验
在指数平滑模型下,观察ARIMA模型的预测误差是否是平均值为0且方差为常数的正态分布(服从零均值、方差不变的正态分布)是个好主意,同时也要观察连续预测误差是否(自)相关。
>acf(skirtsarimaforecast$residuals,lag.max=20)
>Box.test(skirtsarimaforecast$residuals,lag=20,type="Ljung-Box")
Box-Ljungtest
data:
skirtsarimaforecast$residuals
X-squared=8.5974,df=20,p-value=0.9871
既然相 关图显示出在滞后1 - 20阶( l a g s 1 - 20 )中样本自相关值都没有超出显著(置信)边 界,而且Ljung-Box检验的p值为0.99,所以我们推断在滞后1-20阶(lags1-20)中没明显证据说明预测 误差是非零自相关的。
为了调查预测误差是否是平均值为零且方差为常数的正态分布(服从零均值、方差不变的正态分布),我们可以做预测误差的时间曲线图和直方图(具有正态分布曲线):
>plot.ts(skirtsarimaforecast$residuals)
>plotForecastErrors(skirtsarimaforecast$residuals)
上图预测中的时间曲线图显示出对着时间增加,方差大致为常数(大致不变)(尽管上半部分的时间序
列方差看起来稍微高一些)。
时间序列的直方图显示预测误大致是正态分布的且平均值接近于0(服从零均值的正态分布的)。
因此,把预测误差看作平均值为0方差为常数正态分布(服从零均值、方差不变的正态分布)是合理的。
既然依次连续的预测误差看起来不是相关,而且看起来是平均值为0方差为常数的正态分布(服从零均值、方差不变的正态分布),那么对于裙子直径的数据,ARIMA(1,2,5)看起来是可以提供非常合适预测的模型。
至此,时间序列的学习结束
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 进行 ARIMA 分析 报告