頭のリフレッシュ 〜 時系列分析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で計算した結果とあっている。
※)原系列のグラフ
※)コレログラム
ちなみに、自己相関係数を計算するときの「平均」は、最後の時点における最初の時点からの全てデータの平均を使用した。つまり、平均が一定だとして計算している。でも、平均は各時点で変化するよな?実際に各時点でそれまでのデータを全て使用して計算した平均のグラフは増加している(定常過程ではない)。
でも、今回のエントリーではその部分は気にしないのでご注意を!