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-05LB检验可以知道,残差不满足无关性# 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,异方差
综合以上,该模型应该优化
相关文章推荐
- R语言时间序列分析之ARIMA模型预测
- R语言-时间序列-arima模型-forecast、tseries包
- R语言时间序列之ARMA、ARIMA模型
- R语言 时间序列分析之ARIMA模型预测
- 时间序列分析--ARIMA模型
- 时间序列ARIMA模型相关
- Python_Statsmodels包_时间序列分析_ARIMA模型
- 金融时间序列分析:6. AR模型实例(R语言)
- 基于R语言的时间序列指数模型
- 时间序列 ARIMA 模型 (三)
- 时间序列(四)ARIMA模型与差分
- 时间序列分析之ARIMA模型预测
- How to Save an ARIMA Time Series Forecasting Model in Python (如何在Python中保存ARIMA时间序列预测模型)
- 【R实践】时间序列分析之ARIMA模型预测___R篇
- 时间序列分析(3)R语言-最基础的回归模型
- 时序分析:ARIMA模型(非平稳时间序列)
- R学习日记——时间序列分析之ARIMA模型预测
- 时间序列分析之 ARIMA 模型的JAVA实现
- 时间序列模式——ARIMA模型
- 时间序列预测之--ARIMA模型