基於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')


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM