標本自己相関関数で遊ぶ
はじめに
(またまた)久しぶりの更新となりました。最近は研究で時系列を扱う機会があり、時系列の勉強をしています。とりあえず北川源四郎「時系列解析入門」(以下、北川時系列)と沖本竜義「経済・ファイナンスデータの計量時系列分析」(以下、沖本時系列)の2冊を手に入れ、まずは北川時系列を読み始めました。とりあえず勉強するがてら手も動かそうという事で、標本自己相関関数で遊んでみたいと思います。
定義
定常な時系列が与えられた時、標本自己共分散関数と標本自己相関関数は次の式で定義されます。
定義を見ればああなるほどという感じですが、「標本」自己共分散『関数』という事で関数自体が標本??になったので、実験して遊んでみたいと思います。きっと時系列のぐにゃぐにゃ1本1本が標本であり、それに対する自己相関関数だから「標本自己相関関数」なのかな?と思います(合ってるのか自身が無い)。
実験
ホワイトノイズとランダムウォークをそれぞれ100本作成し、それぞれで標本自己相関関数をプロットしてみます。
図の上段がホワイトノイズ、下段がランダムウォークです。左側が時系列であり、右側が自己相関関数です。ホワイトノイズはどのぐにゃぐにゃであっても標本自己相関関数は割と同じような感じになっていますが、ランダムウォークはだいぶ異なっているみたいです。全然話は変わりますが、ランダムウォークのグラフがNintendo 64のポケモンスタジアムでポケモンが破壊光線を打った時のグラフィックっぽくて懐かしさを覚えました。初代の破壊光線は凶悪でしたね。
終わりに
とても短い記事となってしまいましたが、今回は標本自己相関関数で遊んでみました。独立性が満たされないデータの分析は非常に興味があったので、とても面白く勉強できています。少しずつ読み進めて、面白いのがあったらまた手を動かして遊んでみたいと思います。
プログラム
# seibisi import numpy as np import matplotlib.pyplot as plt import pandas as pd def main(): N = 500 lag = 200 y1 = [] y2 = [] autocorr1 = [] autocorr2 = [] for i in range(100): # ホワイトノイズとランダムウォーク yy1 = pd.Series(np.random.normal(0, 1, N)) yy2 = np.cumsum(yy1) # 自己相関 autocorr1.append([yy1.autocorr(l) for l in range(lag)]) autocorr2.append([yy2.autocorr(l) for l in range(lag)]) y1.append(yy1) y2.append(yy2) # 描画 t = [i for i in range(N)] k = [i for i in range(lag)] """ for y in y1: plt.plot(t, y) plt.xlabel("t") plt.ylabel("y") plt.show() """ """ for ac in autocorr2: plt.plot(k, ac) plt.xlabel("lag") plt.ylabel("corr") plt.show() """ if __name__ == "__main__": main()