頭のリフレッシュ 〜 時系列分析1

ここ1年、システムの仕事ばかりしている。しかも、運用・保守が殆ど。
使わない知識は自ずと忘れていく。

そこで息抜きに時系列分析について非常に簡単に整理しておく。
難しいことには触れないので、レベルは高校3年生〜大学1年生といったところ。


下図は、ある時系列データをプロットしたもの。

このデータの現時点含めて過去5つのデータの平均を計算したものもプロットするとこんな感じ。つまり移動平均
平均をとることで、時系列データの変動が滑らかになる。

過去5つのデータの平均は、(当たり前だけど)過去データを使用して計算した値なので、過去のデータに依存する。
どれだけ依存するのだろうか。

関係性を表す指標の1つの相関係数というものがあろう。
こんなやつ。これはxとyの相関係数

分母が「分散の平方根の積」、分子が「共分散」。
イメージとしては、ベクトルの内積をとった際のコサイン。
ベクトルが同じ方向を向いていればコサインは+1(正の相関が最大)、真逆であればコサインは−1(負の相関が最大)、直角であればコサインは0(相関性は無い)。

これは2つの変数の相関だけど、これを真似して、時系列データを特定期間(ラグ)分だけずらしたデータと原系列を比較してみれば、過去データとの相関性がわかるのではないかと。
試しに1期(ラグ1)ずらしてExcel相関係数を計算してみたところ「0.904800915」。
Excelだと計算するだけで一苦労。検算の意味も込めてRでやってみる。

#CSVからデータを読み込む
>fut <- read.csv("Close.csv")

#型がdata.frameなのでtsへ変換する
>fut.ts <- as.ts(fut)

#試しにplot
>plot(fut.ts)

#自己相関係数を調べる
>acf(fut.ts,type="correlation",plot=FALSE)
Autocorrelations of series ‘fut.ts’, by lag

    0     1     2     3     4     5     6     7     8     9    10    11 
1.000 0.905 0.829 0.761 0.705 0.645 0.587 0.534 0.482 0.443 0.418 0.419 
   12    13    14    15    16    17    18 
0.401 0.366 0.328 0.299 0.281 0.260 0.228 

# ラグ毎の自己相関係数をグラフにする(コレログラム)
> acf(fut.ts,type="correlation",plot=TRUE)

ラグ1の結果は「0.905」なので、Excelで計算した結果とあっている。
※)原系列のグラフ

※)コレログラム

ちなみに、自己相関係数を計算するときの「平均」は、最後の時点における最初の時点からの全てデータの平均を使用した。つまり、平均が一定だとして計算している。でも、平均は各時点で変化するよな?実際に各時点でそれまでのデータを全て使用して計算した平均のグラフは増加している(定常過程ではない)。

でも、今回のエントリーではその部分は気にしないのでご注意を!