USD/JPYの為替変動率が正規分布に従うか確認してみる
- 作者: ジェイムズオーウェンウェザーオール
- 出版社/メーカー: 早川書房
- 発売日: 2014/04/01
- メディア: Kindle版
- この商品を含むブログを見る
為替変動率は正規分布に従うと以前読んだ「ウォール街の物理学者」に書かれていた気がするのですが、 実際にそうなのかPython, Pandas, Scipyを使って確認してみました。
USD/JPYのヒストリカルデータを上記サイトからCSV形式でダウンロードしてきます。 文字コードがShit-JISになっているため、nkfでUTF-8に変換しておきます。
nkf -w USDJPY.csv > USDJPY_w.csv
とりあえず2018年のチャートをJupyter Notebook上でプロットしてみます。
import pandas as pd from matplotlib import pyplot as plt import scipy.stats as stats %matplotlib inline df = pd.read_csv('USDJPY_w.csv', index_col='日付') df.index = pd.to_datetime(df.index, format='%Y/%m/%d') print(df['2018']['終値'].describe()) df['2018']['終値'].plot()
1月から4月までは円高基調ですが、その後は円安に転じていますね。
次に、変動率のヒストグラムを作成します。行間の変動率はpct_change()で求めることができます。
print(df.pct_change()['2018']['終値'].describe()) df.pct_change()['2018']['終値'].hist(bins=100)
count 257.000000 mean -0.000037 std 0.004016 min -0.010832 25% -0.002305 50% -0.000177 75% 0.002551 max 0.014240 Name: 終値, dtype: float64
見た目の印象ですが、概ね正規分布に従っているように思えます。 scipy.stat.probplot()でQ-Qプロットを作成してみます。
from matplotlib import pyplot as plt stats.probplot(df.pct_change()['2018']['終値'], dist='norm', plot=plt)
プロットが一直線に並んでいればデータが観測値に従っているとみなせるそうです。 概ね直線に乗っているように思えます。
最後にscipy.stat.shapiro()でシャピロウィルク検定を実施してみます。
stats.shapiro(df.pct_change()['2018']['終値']) # (W, p) = (0.9942488074302673, 0.43847721815109253)
p値>0.05となったので、データが正規分布に従っていないとはいえなさそうです。
付け焼き刃の統計知識で分析してみましたが、どうやら為替変動が正規分布に従うのは事実のようです。