Rで時系列分析の簡単なまとめ


時系列のアプローチ

  • 単系列
    • ざっと見る
    • (S)ARIMAモデルをあてはめる
  • 複数系列→VAR(ベクトル自己回帰)モデル
  • その他の変数がある(時系列+回帰)→状態空間モデル
  • (単なるラグ変数回帰→目的変数自体の時系列性が反映されない)

ライブラリ{forecast}を使う
以下、データはx.tsとする

ざっと見る

コレログラム

acf(x.ts)

トレンド成分、季節成分を抽出してプロット

x.stl<-stl(x.ts,s.window="periodic")
plot(x.stl)

ARMA/ARIMA/SARIMAモデル

SARIMA(p,d,q)(P,D,Q)

  • p: p for AR(p)
  • q: q for MA(q)
  • d: diff
  • P: P for AR(P) of seasonal part
  • Q: Q for MA(q) of seasonal part
  • D: diff of seasonal part

次数を指定して推定

arima()を使う

ARIMA

model1 <- arima(x.ts, order=c(p,d,q) )

SARIMA

12期間周期の季節成分

model1 <- arima(x.ts, order=c(p,d,q), seasonal=list(order=c(P,D,Q), period=12))

次数も自動で算出

auto.arima()を使う

model1 <- auto.arima(
x.ts,
ic='aic', # モデル選択で使う情報量基準。'aic', 'aicc', 'bic'から選択
trace=T, # 計算履歴を表示。デフォルトでFALSE
stepwise=F,# FALSEで総当たり、TRUE(デフォルト)でstepwise(高速)
approximation=F,
d=1, # 指定するとN階の階差、デフォルトで自動計算
start.p=0, # AR(p)の次数の計算スタート
start.q=0, # MA(q)の次数の計算スタート
start.P=0, # 季節部分のAR(P)の次数の計算スタート
start.Q=0, # 季節部分のMA(Q)の次数の計算スタート
seasonal=T # FALSEでARIMA(デフォルト)、TRUEでSARIMA
)

乱数の生成

arima.simを使う

ts.sim <- arima.sim(n=乱数の数, model=list(order=c(p,d,q),ar=c(ARの係数),ma=c(MAの係数)),sd=sqrt(1))

予測値

50%信頼区間、95%信頼区間も一緒に50期間先までプロット

x_ts.pred <- forecast(model1, level = c(50, 95), h = 50)

プロット

plot(x_ts.pred)

多変量時系列(VAR:ベクトル自己回帰モデル)

ライブラリ{vars}を使う

# データの読み込み
traffic<-read.table("clipboard", header=T)
sapply(traffic, function(x) as.integer(gsub(',','',x))) -> traffic

# 1. 最初に次数を決める
require(vars)
VARselect(traffic,lag.max=5)
# 2. モデルを推定する
traffic.var = VAR(traffic, p=4)
summary(traffic.var)
plot(traffic.var)
# 残差間の相関は小さいほうがいい
# 3. 解釈:インパルス応答推定(時間を経ると影響がどのようになるか)
traffic.irf = irf(traffic.var, n.ahead=4,ci=.95)
plot(traffic.irf)
# 4. 予測
predict(traffic.var,n.ahead=4,ci=0.95,dumvar=NULL)

状態空間モデル

{dlm}, {KFAS}もあるが、モデルの指定などがやりにくい。
ライブラリ{bsts}が使いやすいし、正規分布以外にも適用できる