【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年の任天堂の株価収益率は正規分布であるとみなすことができます。

 

 

 

プログラミングの独学はとても難しい


プログラミングは小学校の義務教育にも導入され始めており、これから社会人として生きていく上でプログラミングはもはや出来て当たり前、出来なれば論外というエクセルレベルの必須スキルになりつつあります。そしてそういう話を聞いて参考書なりを購入して独学でプログラミング勉強しようと思っている人も少なくないでしょう。しかしプログラミングを独学で勉強し始めようと思うものの



・「分からない箇所で詰まって挫折してしまった」

・「勉強する時間が足りない」

・「ネットの記事だと情報が断片的でよくわからない」

・「コードのエラーの原因が分からない」



という壁にぶち当たって、プログラミングの勉強を止めてしまう方が少なくありません。独学でプログラミングを勉強してる時間のほとんどはつまづいている時間です。実際僕も最初のころ独学でプログラミングを勉強していた頃はエラーの原因が分からず丸1日を不意にしてしまった・・・そんな苦い経験がありました。



それで僕は一度はプログラミングの学習を諦めてしまいましたが、就活で現実を知る中で「プログラミングを勉強して、いずれフリーランスとして自由な生き方がしたい」「エンジニアとして若いうちから高収入を得たい」という気持ちから一念発起して「侍エンジニアのwebサービスコース」に申し込み、プロのエンジニアの方に対面でマンツーマンでPythonによるWebサービス作り方とWeb技術の基本を教えてもらい、ようやくプログラミングが理解でき、今ではエンジニアとしてそこそこの暮らしができるようになりました。





侍エンジニアでは、とりあえずプログラミングやインターネットの基本を知っておきたい人から、HTML・cssなどでWebサイトやWebアプリを作ってみたい人やPythonを勉強してデータサイエンティストやAIエンジニアになりたい人まで幅広いニーズに応えた様々なコースが用意されています。



IT業界と言ってもエンジニアの仕事はプログラミング言語次第でサーバーから機械学習・ディープラーニングまで多種多様ですし、侍エンジニアの無料レッスン(カウンセリング)を受けてみて、自分のやりたいITの仕事は何なのか?を見つけるのがエンジニアへの第一歩になります。ちなみに今侍エンジニアの無料レッスンを受けると1000円分のAmazonギフト券がもらえるので、試しに受けてみるだけもお得です。


自分は半端に独学やオンラインスクールで勉強して金と時間を無駄にするくらいなら、リアルのプログラミングスクールに通ってしっかりプログラミングを勉強した方がいいと思います。ちなみに今、侍エンジニアに申し込むと、25歳以下の学生の方であれば、受講料が20%OFFになるので超お得です。


そして、プログラミングは大勢で授業を受けたり漫然とオンライン学習をするよりも自分が分からない箇所をピンポイントでプロの講師に直接質問して、ちゃんと納得するというスタイルの方がお金は確かに少し掛かりますが、独学で学ぶよりも絶対にモノになります。


シェアする

  • このエントリーをはてなブックマークに追加

フォローする

コメント

  1. yano_317 より:

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

    とありますが、
    正規分布していないと判断できる結果ではないでしょうか?

  2. tamano より:

    “p値は2.301×10⁻¹¹なので、有意水準を満たしており2015年の任天堂の株価収益率は正規分布であるとみなすことができます。” は、まったく間違っていますので、ご注意ください。正規分布はしていません。