以下の書籍
を中心に時系列解析を勉強していきます。
2. スペクトル表現
時系列解析における典型的な道具がスペクトル表現である。時間軸を周波数軸に変換することで、個々の時間に捉われることなく、時系列に含まれる周期的な動きを明らかにすることができる。
ここで直交増分過程はならば内積
が常に成り立つような確率過程で、重複しない区間での値の増分が常に直交しているような確率過程である。
この定理は一般のに対して成り立つ。次の定理を用いると、これを整数時点に限定しに取ることができ、のスペクトル表現が導かれる。
三角モーメント問題 複素系列が系列、すなわちが成り立つとき、
が成り立つような測度が存在する必要十分条件はが非負定符号系列であることである。ここでが非負定符号であるとは任意の複素数列に対してが成り立つことをいう。
さらにが実数の場合には、
Cramérの定理 弱定常過程は、その共分散関数が連続ならば、直交増分過程で
を満たすものが存在する。
詳細を省くと、自己共分散関数に関して
が成り立つ。ここでのはの大きさである。は自己共分散関数のスペクトル表現に現れる関数というのみならずをに変換したときのの増分の大きさという意味がある。このをパワースペクトル関数(スペクトル分布関数)という。またをスペクトル密度関数という。
################ ### Spectrum ### ################ # 正規ホワイトノイズ vc_white_noise <- rnorm(500,0,1) ts_white_noise <- ts(vc_white_noise,frequency = 500) ls_acf <- acf(ts_white_noise,type = "correlation",plot = F) vc_acf <- as.vector(ls_acf$acf) df_acf <- data.frame(lag = 0:(length(vc_acf)-1), data = vc_acf) g <- ggplot(df_acf,aes(x = lag, y = data, color = "red", fill = "red")) + geom_bar(stat = "identity") + theme_classic() g <- g+ theme(plot.title = element_text(hjust = 0.5),legend.position = "none", legend.title=element_text(size = 7), legend.text=element_text(size = 7)) g <- g + geom_hline(yintercept = 0, linetype = 1) g <- g + geom_hline(yintercept = -0.25, linetype = 3) + geom_hline(yintercept = 0.25, linetype = 3) + geom_hline(yintercept = 0.5, linetype = 3) + geom_hline(yintercept = 0.75, linetype = 3) + geom_hline(yintercept = 1, linetype = 3) + scale_y_continuous(labels = seq(-0.25,1,0.25),breaks = seq(-0.25,1,0.25)) plot(g) ls_pgram <- spec.pgram(ts_white_noise,plot = F,) df_pgram <- data.frame(freq = ls_pgram$freq, spec = log10(ls_pgram$spec)) g <- ggplot(df_pgram,aes(x = freq, y = spec, color = "red")) + geom_line() + theme_classic() g <- g + labs(x ="周波数[Hz]",y="log10(スペクトル密度)") g <- g+ theme(plot.title = element_text(hjust = 0.5),legend.position = "none", legend.title=element_text(size = 7), legend.text=element_text(size = 7)) g <- g + geom_hline(yintercept = 0, linetype = 1) plot(g)
3. ARMA過程
時系列解析で焦点を当てているのは異時点間の相関であるから、それをモデルに織り込むことが論点である。相関のモデル化には2つの考え方がある。1つは異なる時点の値に共通の成分を含める方法である。もう1つの方法はある時点に過去時点の値を盛り込む方法である。前者が過程であり後者が過程である。実はこれらを組み合わせた過程を考えることもできる。
(1) | 過程 | 異なる時点の値に共通の成分を含める。 | |
(2) | 過程 | ある時点に過去時点の値を盛り込む。 |
3.1 ホワイトノイズ
時系列解析において通常の統計解析(たとえば回帰分析)での誤差項に相当する概念としてホワイトノイズ(白色雑音)を導入する。すなわち任意のに対して
を満たすような系列をホワイトノイズという*1。定義から明らかにホワイトノイズは弱定常である。
3.2. MA過程
前者の「異時点の値に共通の成分を含める方法」として移動平均モデル(過程)がある。これは分析対象となる系列をそれより過去の各時点に生成されたホワイトノイズの線形和として表すというものである。すなわち次過程は
と定義される*2。ホワイトノイズが弱定常過程であり、過程はその線形和で表されることから、過程は常に弱定常性を持つ。
具体例を考えてみよう。たとえば次過程は
と書ける。このときとなりがともにを含むことで相関が生まれることとなる。にはの係数であるが掛かっている点に留意する必要がある。なぜならばこのが両者の相関の大きさを意味するからである。
過程では確率変動をすべてホワイトノイズが決定する。またホワイトノイズの期待値がであることに注意すると
である。また
が成り立つ。
さらにラグに対して自己共分散を計算する。
である。ここでならばであることに注意すると
である。他方でならばいずれの項もとなるからである。したがって
である。
更にここから
他方でMA過程はつの欠点を持つ。つは長期の(大きいの)自己相関をモデリングするにはそれよりも多い数の観測数が必要となるため、モデル構築が実用上不便であるという点である。またMA過程はホワイトノイズの線形和で与えられるためモデルの解釈が困難であるという点である。
3.2.1 MA過程の統計量
平均 | ||
分散 | ||
自己共分散関数 | ||
自己相関関数 |
############## ### MA過程 ### ############## set.seed(1) vc_ma <- arima.sim(n=500, model=list(order=c(0, 0, 1), ma=c(0.8)), sd=1) df_ma <- data.frame(date = 1:length(vc_ma), MA = vc_ma) # 図示 g <- ggplot(df_ma,aes(x = date, y = MA, color = "red")) + geom_line() + theme_classic() g <- g + ggtitle("MA過程(ドリフト=0, 係数=0.8)") g <- g + labs(x ="",y="") g <- g+ theme(plot.title = element_text(hjust = 0.5),legend.position = "none", legend.title=element_text(size = 7), legend.text=element_text(size = 7)) g <- g + geom_hline(yintercept = 0, linetype = 1) g <- g + geom_hline(yintercept = -4, linetype = 3) + geom_hline(yintercept = -3, linetype = 3) + geom_hline(yintercept = -2, linetype = 3) + geom_hline(yintercept = -1, linetype = 3) + geom_hline(yintercept = 1, linetype = 3) + geom_hline(yintercept = 2, linetype = 3) + geom_hline(yintercept = 3, linetype = 3) + geom_hline(yintercept = 4, linetype = 3) g <- g + scale_y_continuous(labels = seq(-4,4,1),breaks = seq(-4,4,1)) plot(g)