まずデータを入手したら
- 時系列プロット
- 単位根検定(Augmented Dickey–Fuller Test, Phillips-Perron Test for Unit Roots)
- adf.test(data, alternative ="stationary") (tseries package)
- PP.test(data)
データが非定常だったら・・・
- 移動平均でdetrend
- 単位根検定でひっかかったら、diffを取る(ex: Z_t = Y_t - Y_t-1)
- Exponential smoothingでdetrend
- Simple Exponential Smoothing
- HoltWinters(data,alpha=数字, beta=FALSE, gamma=FALSE) #ARIMA(0,1,1)と同じこと
- Double Exponential Smoothing
- HoltWInters(data,alpha=数字, beta=数字, gamma=FALSE) #ARIMA(0,2,2)と同じこと
- 以下2つを使う場合、dataはtsオブジェクトでfrequencyが定義されてるもの
- Seasonal Exponential Smoothing without Trend
- HoltWinters(data,alpha=数字, beta=FALSE, gamma=数字)
- Seasonal Exponential Smoothing with trend
- HoltWinters(data, alpha=数字, beta=数字, gamma=数字)
データは定常。ではWhite noiseか?
- 時系列データがWhite noiseかどうかの検定 (Box Pierce , Box Ljung test)
- Box.test(data, lag=1 , type = c("Box-Pierce", "Ljung-Box")
White noiseではないようだ。では、ARIMAモデルか?
- Sample Auto Correlation, Sample Partial Auto Correlationのプロット
- acf(data, plot=TRUE)
- pacf(data,plot=TRUE)
- ARMAのパラメータ候補を絞りたい
- eacf(data) (TSA package)
- ARIMA(p,d,q) モデルの推定(dataはtsオブジェクトです)
- arima(data, order=c(p,d,q),method="ML")
- ARIMA(p,d,q) モデルの推定(dataはtsオブジェクトです)
- arima(data,order=c(p,d,q),seasonal=list(order=c(P,D,Q),period=S),method="ML")
ARIMAモデルの残差はWhite noiseになったのか?
- 残差プロット + Box testでチェック
- 残差プロットの中でvolatility clusteringがあれば、ARCH LM testをやってみる
ARCH/GARCHモデル
- garchFit(~arma(p,q)+garch(q,p),data=data) (GARCHのパラメータqはalpha, pのパラメータはbeta)
予測
- arimaで推定したモデルであれば、forecast(arimaクラスのオブジェクト) (forecast library)
- garchFitで推定したモデルであれば、predict(fGarchクラスのオブジェクト)