R语言 时间序列之ARIMA模型

自回归移动平均模型(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)))
R语言 时间序列之ARIMA模型_第1张图片
由时序图可以知道,尼罗河数据有明显递减趋势,故该序列不平稳。接着对尼罗河数据进行差分,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')

R语言 时间序列之ARIMA模型_第2张图片

差分后的时序图在均值为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)
R语言 时间序列之ARIMA模型_第3张图片

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
R语言 时间序列之ARIMA模型_第4张图片
不管是从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)
R语言 时间序列之ARIMA模型_第5张图片
预测残差是均值为0,异方差

综合以上,该模型应该优化





你可能感兴趣的:(r语言,时间序列)