読者です 読者をやめる 読者になる 読者になる

暇人の研究室

金融工学やR言語・統計学について書いてます。

<

【R言語】データが正規分布なのか検定する方法

 

今日は統計フリーソフトRを使ってデータが正規分布なのかを検定する方法について説明してきます。

 

ファイナンスでよく使われる確率分布が正規分布です。ちなみになぜよく使われるのかというと計算しやすいからです。

 

www.dmjtmj-stock.com

 

・今回使うデータ

任天堂の2015年の株価収益率(対数差収益率)

 > r.ninten2015 ##対数差収益率を入れているオブジェクト
Close
2015-01-06 -4.27007876
2015-01-07 0.50697194

2015-12-29 2.96473278
2015-12-30 -1.12760839

 

これをヒストグラムにするとこうなります。

>hist(r.ninten2015,breaks=seq(-10,20,0.5)) ##ー10から20までの幅で0.5刻みでヒストグラムを描く

f:id:oruka199665:20170402214726p:plain

 

 これ全然正規分布に見えませんよね?だから任天堂の株価収益率は正規分布じゃないと結論付けたくなりますが、そうではありません。

 

次はちょっと数値を弄ったヒストグラムを書いて見ます。もちろんデータ自体は何も変わってません。

 

> hist(r.ninten2015,breaks=seq(-20,20,0.5))  ##ー20から20までの幅で0.5刻みのヒストグラムを描く

 

f:id:oruka199665:20170402215243p:plain

 

正規分布の特徴である左右対称の釣り鐘型っぽくなりました。このようにヒストグラムは見せ方によって見る人に全然違う印象を与えることができます。伝える側の意図で結構形を変えることができてしまうので、テレビなどの情報番組で分析結果を見る際にも、ヒストグラムはあまり信用せず疑ってかかったほうがいいでしょう。

 

ではどうやってデータが正規分布なのかを検証するのかというと、QQプロットという方法を使います。

 

qqプロットの作成

> qqnorm(r.ninten2015) ##qqプロットの作成
> qqline(r.ninten2015)   ##第1四分位範囲と第3四分位範囲を結んだ線を描く

f:id:oruka199665:20170402220444p:plain

グラフの大半がこの線上にあれば正規分布とすることができます。ヒストグラムもqqプロットもあくまで視覚イメージなので次は数値によって正規分布かどうかを判断する検定の一つであるシャピロ・ウィルク検定をしてみます。

 

・シャピロ・ウィルク検定

 

シャピロ・ウィルク検定は得られたデータが正規分布に従うものを調べる検定です。帰無仮説 (H0) は「標本分布が正規分布に従う」ことで、今回は有意水準5%(P値が0.05以下なら正規分布とみなすということ)にて検定すします。

 

> data<-as.data.frame(r.ninten2015) ##時系列データをデータフレームに変換
> class(data)   ##データの確認

[1] "data.frame"

※この手順は使うデータがもとからデータフレームの人は必要ないです。

 

> shapiro.test(data$Close)  ##シャピロ・ウィルク検定

Shapiro-Wilk normality test

data: data$Close
W = 0.90387, p-value = 2.301e-11

 

 

p値は2.301×10⁻¹¹なので、有意水準を満たしており2015年の任天堂の株価収益率は正規分布であるとみなすことができます。