1. 程式人生 > 其它 >基於R語言的時間序列分析預測

基於R語言的時間序列分析預測

  • 資料來源: R語言自帶 Nile 資料集(尼羅河流量)
  • 分析工具:R-3.5.0 & Rstudio-1.1.453
#清理環境,載入包
rm(list=ls())
library(forecast)
library(tseries)
#趨勢檢視
plot(Nile)
#平穩性檢驗
#自相關圖
acf(Nile)
#偏相關圖
pacf(Nile)
#也可以直接用tsdisplay檢視
tsdisplay(Nile)
#單位根檢驗
adf.test(Nile)
  • 從自相關圖上看,自相關係數沒有快速衰減為0,呈拖尾,單位根檢驗進一步驗證,存在單位根,所以序列為非平穩序列
#做序列差分
#可以用ndiffs判斷需要做幾階差分
ndiffs(Nile)
  • 需要做一階差分
#做一階差分,然後再進行檢驗
Nile_diff=diff(Nile,1)
plot(Nile_diff)
acf(Nile_diff)
pacf(Nile_diff)
adf.test(Nile_diff)
#建立模型
(mod=arima(Nile,order=c(0,1,1),method='ML'))
  • 根據acf圖和pacf圖,擬定為0,1,1
#auto.arima通過選取AIC和BIC最小來選取模型,與根據acf和pacf圖建立的模型進行比較
(mod_auto=auto.arima(Nile))
# 殘差正態性檢驗
qqnorm(mod$residuals)
qqline(mod$residuals)
qqnorm(mod_auto$residuals)
qqline(mod_auto$residuals)
# 殘差白噪檢驗
Box.test(mod$residuals,type='Ljung-Box')
Box.test(mod_auto$residuals,type='Ljung-Box')
  • 根據檢驗結果來看,還是選擇根據acf圖和pacf圖建立的模型比較好
# 進行預測
(pre=forecast(mod,5))
plot(Nile,col='pink')
par(new=T)
plot(pre,col='green')
plot(pre,col='green')