時間序列模型

kings<-scan("http://robjhyndman.com/tsdldata/misc/kings.dat",skip=3)
#讀入時間序列數據,忽略前三行
kings
kingstimeseries<-ts(kings)#將數據存儲到一個時間序列對象中去

births<-scan("http://robjhyndman.com/tsdldata/data/nybirths.dat")
births
birthstimeseries<-ts(births,frequency=12,start=c(1946,1))
birthstimeseries

souvenir<-scan("http://robjhyndman.com/tsdldata/data/fancy.dat")
souvenirtimeseries<-ts(souvenir,frequency=12,start=c(1987,1))
souvenirtimeseries

plot.ts(kingstimeseries)#可用相加模型來描述,
plot.ts(birthstimeseries)#
plot.ts(souvenirtimeseries)#相加模型不適合描述,季節性波動和隨機變動的大小隨時間序列逐步上升
logsouvenirtimeseries<-log(souvenirtimeseries)#自然對數轉換
plot.ts(logsouvenirtimeseries)

library("TTR")
kingstimeseriesSMA3<-SMA(kingstimeseries,n=3)#跨度爲3的簡單移動平均平滑
plot.ts(kingstimeseriesSMA3)
kingstimeseriesSMA8<-SMA(kingstimeseries,n=8)#跨度爲3的簡單移動平均平滑
plot.ts(kingstimeseriesSMA8)

birthstimeseriescomponents<-decompose(birthstimeseries)
birthstimeseriescomponents$seasonal#季節
birthstimeseriescomponents$trend#趨勢
birthstimeseriescomponents$random#隨機
plot(birthstimeseriescomponents)

birthstimeseriesseasonallyadjusted<-birthstimeseries-birthstimeseriescomponents$seasonal
plot(birthstimeseriesseasonallyadjusted)
#使用指數平滑法進行預測
#簡單指數平滑法
rain<-scan("http://robjhyndman.com/tsdldata/hurst/precip1.dat",skip=1)
rainseries<-ts(rain,start=c(1813))
plot.ts(rainseries)

rainseriesforecasts<-HoltWinters(rainseries,beta=FALSE,gamma=FALSE)
rainseriesforecasts

rainseriesforecasts$fitted#預測值
plot(rainseriesforecasts)
rainseriesforecasts$SSE

library("forecast")
rainseriesforecasts2<-forecast.HoltWinters(rainseriesforecasts,h=8)
plot.forecast(rainseriesforecasts2)
rainseriesforecasts2$residuals

acf(rainseriesforecasts2$residuals,lag.max=20)

plotForecastErrors<-function(forecasterrors)#檢驗預測誤差是均值爲零的正態分佈
{
  #forecasterrors<-rainseriesforecasts2$residuals
  mybinsize<-IQR(forecasterrors)/4
  mysd<-sd(forecasterrors)
  mymin<-min(forecasterrors)-mysd*3
  mymax<-max(forecasterrors)+mysd*3
  mybins<-seq(mymin,mymax,mybinsize)
  hist(forecasterrors,col="red",freq=FALSE,breaks=mybins)
  mynorm<-rnorm(10000,mean=0,sd=mysd)
  myhist<-hist(mynorm,plot=FALSE,breaks=mybins)
  points(myhist$mids,myhist$density,type="l",col="blue",lwd=2)
}

plotForecastErrors(rainseriesforecasts2$residuals)
#####################################################################
###霍爾特指數平滑法                                               ###
#####################################################################
skirts<-scan("http://robjhyndman.com/tsdldata/roberts/skirts.dat",skip=5)
skirtsseries<-ts(skirts,start=c(1866))
plot.ts(skirtsseries)
skirtsseriesforecasts<-HoltWinters(skirtsseries,gamma=FALSE)
skirtsseriesforecasts
skirtsseriesforecasts$SSE
plot(skirtsseriesforecasts)

skirtsseriesforecasts2<-forecast.HoltWinters(skirtsseriesforecasts,h=19)
plot.forecast(skirtsseriesforecasts2)
acf(skirtsseriesforecasts2$residuals,lag.max=20)
Box.test(skirtsseriesforecasts2$residuals,lag=20,type="Ljung-Box")

plot.ts(skirtsseriesforecasts2$residuals)
plotForecastErrors(skirtsseriesforecasts2$residuals)

#####################################################################
###Holt-Winters指數平滑法                                         ###
#####################################################################
souvenir<-scan("http://robjhyndman.com/tsdldata/data/fancy.dat")
souvenirtimeseries<-ts(souvenir,frequency=12,start=c(1987,1))
souvenirtimeseries
logsouvenirtimeseries<-log(souvenirtimeseries)

souvenirtimeseriesforecasts<-HoltWinters(logsouvenirtimeseries)
souvenirtimeseriesforecasts
souvenirtimeseriesforecasts$SSE
plot(souvenirtimeseriesforecasts)

souvenirtimeseriesforecasts2<-forecast.HoltWinters(souvenirtimeseriesforecasts,h=48)
plot.forecast(souvenirtimeseriesforecasts2)

acf(souvenirtimeseriesforecasts2$residuals,lag.max=20)
Box.test(souvenirtimeseriesforecasts2$residuals,lag=20,type="Ljung-Box")

plot.ts(souvenirtimeseriesforecasts2$residuals)
plotForecastErrors(souvenirtimeseriesforecasts2$residuals)
###################################################################
###ARMA        指數平滑法                                         ###
#####################################################################
skirtsseriesdiff1<-diff(skirtsseries,differences=1)
plot.ts(skirtsseriesdiff1)
skirtsseriesdiff2<-diff(skirtsseries,differences=2)
plot.ts(skirtsseriesdiff2)

kings<-scan("http://robjhyndman.com/tsdldata/misc/kings.dat",skip=3)#讀入時間序列數據,忽略前三行
kings
kingstimeseries<-ts(kings)#將數據存儲到一個時間序列對象中去
kingstimeseriesdiff1<-diff(kingstimeseries,differences=1)
plot.ts(kingstimeseriesdiff1)
acf(kingstimeseriesdiff1,lag.max=20)#畫出相關圖
acf(kingstimeseriesdiff1,lag.max=20,plot=FALSE)#取得相關係數
pacf(kingstimeseriesdiff1,lag.max=20)#畫出相關圖
pacf(kingstimeseriesdiff1,lag.max=20,plot=FALSE)#取得相關係數
auto.arima(kings)
kingstimeseriesarima<-arima(kingstimeseries,order=c(0,1,1))
kingstimeseriesarima
kingstimeseriesforecasts<-forecast.Arima(kingstimeseriesarima,h=5,level=c(99.5))
kingstimeseriesforecasts
plot.forecast(kingstimeseriesforecasts)
acf(kingstimeseriesforecasts$residuals,lag.max=20)
Box.test(kingstimeseriesforecasts$residuals,lag=20,type="Ljung-Box")
plot.ts(kingstimeseriesforecasts$residual)
plotForecastErrors(kingstimeseriesforecasts$residual)


volcanodust<-scan("http://robjhyndman.com/tsdldata/annual/dvi.dat",skip=1)
volcanodustseries<-ts(volcanodust,start=c(1500))
plot.ts(volcanodustseries)
acf(volcanodustseries,lag.max=20)#畫出相關圖
acf(volcanodustseries,lag.max=20,plot=FALSE)#取得相關係數
pacf(volcanodustseries,lag.max=20)#畫出相關圖
pacf(volcanodustseries,lag.max=20,plot=FALSE)#取得相關係數
auto.arima(volcanodustseries)

volcanodustseriesarima<-arima(volcanodustseries,order=c(2,0,0))
volcanodustseriesarima
volcanodustseriesforecasts<-forecast.Arima(volcanodustseriesarima,h=31)
volcanodustseriesforecasts
plot.forecast(volcanodustseriesforecasts)
acf(volcanodustseriesforecasts$residuals,lag.max=20)
Box.test(volcanodustseriesforecasts$residuals,lag=20,type="Ljung-Box")
plot.ts(volcanodustseriesforecasts$residual)
plotForecastErrors(volcanodustseriesforecasts$residual)
mean(volcanodustseriesforecasts$residuals)

#

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章