暇人の研究室

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

<

【R言語】変化率(株価収益率)の計算

 

今回はRによる変化率(株価収益率)の計算を行っていきたいと思います。

 

 

・使うデータ

2005年から2016年までの任天堂の株価の終値

 

 

>Close
2005-01-04 12980
2005-01-05 12930
2005-01-06 12580

2016-11-28 27970

2016-11-29 27990
2016-11-30 27775

 

f:id:oruka199665:20170328185620j:plain

 

 

株価データの取得とデータフレームのxts変換のやり方は↓の記事で紹介しています。

www.dmjtmj-stock.com

 

 

今回は株価データをts.nintenというオブジェクトの中に保存しています。そして、今回のテーマである株価収益率(変化率)の計算を行っていきます。

 

 

変化率の定義は(Xn-Xn-1)/Xn-1 ×100で表されますが、実際には対数変換してから行った方が数値の幅が狭くなり描画したときに見やすくなります。

 

 

www.dmjtmj-stock.com

 

 

要するに、(今日の値ー前日の値)を今日の数値で割って % で表しているだけです。Rで時系列オブジェクトの差をとる場合は、 階差を計算してくれるdiff( )関数と、n期をずらしたラグ(lag)を計算する lag( ) 関数を用います。今回は前日と比較した1日の変化なので階差を計算するdiff関数を使用します。

 

 

> r.ninten<-diff(log(ts.ninten))*100  ##株価収益率を計算する

>任意のオブジェクト<-diff(log(株価のオブジェクト))*100

 

収益率を計算し終わったら次は先頭に出てくるNA(欠損値)を削除します。

 

> r.ninten<-r.ninten[!is.na(r.ninten)]  ##先頭のNaを削除

 

するとこんな感じに計算できます。

 

f:id:oruka199665:20170328191801j:plain

 

 

次にこの株価収益率を描画していきます

 

>plot(r.ninten)

 

f:id:oruka199665:20170328191847p:plain

 

ちなみにヒストグラムで描写するとこうなります。

 

 

> hist(r.ninten, breaks=seq(-20,30,0.05))

 

f:id:oruka199665:20170328193615p:plain

 

正規分布に近い形になりますし、株価収益率を正規近似して計算することに一定の有用性はあるように感じます。(ちょっと裾が広いのが気になりますが・・・)

 

 

・まとめ

 

Rで変化率を計算する際はdiff関数とlag関数を使う。また変化率の数値の幅がとんでもないことになるときは、対数に変換して数値幅を小さくするとplotやhistで描画した時に見やすいグラフになる。

 

 

時系列分析については、この本がとても分かりやすかったので、もし時系列分析で詰まっている人・しっかり勉強したいと考えている人は是非一度読んでみてください。