您的位置:首页 > 其它

R语言 时间序列之ARIMA模型

2018-03-29 22:25 447 查看

自回归移动平均模型(arima)

ARMA模型是对不含季节变动的平稳序列进行建模。ARIMA模型的本质和ARMA是一样的,只是ARIMA针对不平稳的序列进行建模的,将ARMA模型里的序列值进行差分就可以。

定阶以及参数说明
acf值pcf值模型
拖尾(逐渐为0)p阶截尾ARIMA(p,d,0)
q阶截尾拖尾ARIMA(0,d,q)
拖尾拖尾ARIMA(p,d,q)
以尼罗河数据为例子
plot(Nile)
abline(reg = lm(Nile ~ time(Nile)))



由时序图可以知道,尼罗河数据有明显递减趋势,故该序列不平稳。接着对尼罗河数据进行差分,forecast包中的ndiffs()可以帮助判断差分几次
ndiffs(Nile)
Nile_diff <- diff(Nile, lag = 1)
> ndiffs(Nile) # 差分次数
[1] 1
  # 纯随机性检验
  Box.test(Nile_diff, type = "Ljung-Box")
  > Box.test(Nile_diff, type = "Ljung-Box") # 显然该序列是白噪声序列,应该停止分析,但由于本人不想再找非白噪声序列,还是用该序列来分析,在残差分析中出现问题了

Box-Ljung test

data:  Nile_diff
X-squared = 16.492, df = 1, p-value = 4.885e-05

par(mfrow = c(2, 2))
plot(Nile, main = '差分前')
plot(Nile_diff, main = '差分后')
abline(reg = lm(Nile_diff ~ time(Nile_diff)))
acf(Nile_diff, main = '差分后acf')
pacf(Nile_diff, main = '差分后pacf')




差分后的时序图在均值为0附近波动,不随时间的改变而改变,自相关图显示自相关系数在滞后1阶后就快速的减为0,一阶差分后该序列平稳,那么该序列可以定阶为ARIMA(0, 1, 1)

1. 定阶

Nile.arima <-  arima(Nile_diff, order = c(0,1,1),method = "ML")
Nile.pre <- forecast(Nile.arima, h = 10) # 预测
plot(Nile.pre)



2. 模型估计

模型参数检验包括两个检验:参数的显著性检验和残差的正态性和无关性检验(调查预测误差是否是平均值为零且方差为常数的正态分布(服从零均值、方差不变的正态分布))。 

1)参数估计用估计出的系数除以其的标准差(se)得到的商与T统计量5%的临界值(1.96)比较,商的绝对值大于1.96,则拒绝原假设,认为系数显著的不为0,否则认为系数不显著。系数不显著的可以去掉,语法为arima(data,order,fixed=c(NA,0,NA…)),fixed为0的位置即为被去掉的参数的位置。
Nile.arima <-  arima(Nile_diff, order = c(0,1,1),method = "ML")
> Nile.arima

Call:
arima(x = Nile_diff, order = c(0, 1, 1), method = "ML")

Coefficients:
ma1
-1.0000
s.e.   0.0254

sigma^2 estimated as 28268:  log likelihood = -643.58,  aic = 1291.16
> -1.0000/0.0254
[1] -39.37008
系数除以标准差值为-39.37008绝对值远远大于1.96,则才序列的参数显著
2)残差正态性
# 方法一qq图
qqnorm(Nile.arima$residuals)
qqline(Nile.arima$residuals)

# 正态性检验法
shapiro.test(Nile.arima$residuals)
> shapiro.test(Nile.arima$residuals)

Shapiro-Wilk normality test

data:  Nile.arima$residuals
W = 0.9902, p-value = 0.6876



不管是从qq还是w检验法都可以看出,残差满足正态性
3)无关性检验也称为残差的白噪声检验,由前面白噪声的定义可知,残差(=估计值-真实值)应为不相关的序列。常用LB统计量来检验残差。
> Box.test(Nile.arima$residuals, type = "Ljung-Box")

Box-Ljung test

data:  Nile.arima$residuals
X-squared = 16.171, df = 1, p-value = 5.786e-05
LB检验可以知道,残差不满足无关性# Ps: p值大,说明为纯随机序列。p值小,非纯随机序列,

par(mfrow = c(1, 2))
plot.ts(Nile.arima$residuals)
abline(reg = lm(Nile.arima$residuals ~ time(Nile.arima$residuals)))
acf(Nile.arima$residuals)



预测残差是均值为0,异方差
综合以上,该模型应该优化
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: