Engineering Skills

製品開発エンジニアがデータ解析のノウハウを垂れ流します

自己相関関数と周期性解析(2)

こちらでは自己相関関数について簡単な紹介を書きました。実装してみたのと、スピアマンやケンドールの順位相関係数でも自己相関関数(コレオグラム)ライクな表示をしてみています。

順位相関係数で自己相関

自己相関関数とはこちらに示すように、時系列データに対しLag#分ずらして相関係数を計算するものです。周期性などがわかったりします。

例えば下記のようなデータの自己相関関数をプロットすると

f:id:OceanOne:20201007232315p:plain:h250

周期4と8の成分がある傾向がわかります。点線は95%の棄却限界です。

f:id:OceanOne:20201007234040p:plain:h300

通常、相関係数というとピアソンの積率相関係数を指しますが、スピアマンやケンドールの順位相関係数というものもあります。順位に基づいた統計量なので、外れ値や正規性の仮定についてロバストです。

スピアマンの順位相関係数で自己相関を計算した結果と

f:id:OceanOne:20201007234954p:plain:h300

ケンドールの順位相関係数で自己相関を計算した結果がこちらです。

f:id:OceanOne:20201007235104p:plain:h300

全て重ねると下図のようになり、どれも似たような感じです。ややケンドールの順位相関係数が鈍感でしょうか。

f:id:OceanOne:20201007235323p:plain:h300

外れ値を含む時系列データ

今度は外れ値を含むデータに適用してみます。先ほどと同じデータを用いてt=4付近にx(t)=100の外乱を挿入しています。下図の通りです。

f:id:OceanOne:20201007235627p:plain:h250

通常の自己相関関数

f:id:OceanOne:20201008000004p:plain:h300

スピアマンの順位相関関数ベース

f:id:OceanOne:20201008000043p:plain:h300

ケンドールの順位相関関数ベース

f:id:OceanOne:20201008000102p:plain:h300

全て重ねた結果

f:id:OceanOne:20201008000139p:plain:h300

大きなノイズを加えたので、途端に通常の自己相関関数は相関係数が小さくなってnoisyになっています。ノイズの多いデータを解析する場合は、やはり順位統計量ベースの方がロバストに思えます。

まとめ

順位相関係数ベースで自己相関関数を計算してみました。実務の上で以前からこれを計算したかったのですが、簡単に計算してくれるものがなく実装がてら比較してみました。

こちらのツールに実装しています。メニューバー"File">Open File (Auto correlation)からヘッダ1行系列名で数値縦書きのテキストファイルを読み込ませる。メニューバー"Setting">optionからACFタブで各相関係数の表示/非表示切り替えです。