異なる祝日に従う複数の時系列データをまとめる+ggplot2を用いたプロット

概要

・複数の時系列データをまとめる+プロットするためのほぼ自分用メモ
・例えばNYSEに上場している株式と、東証に上場している株式では米国祝日と日本祝日の日にそれぞれ欠損値がある。
・ggplot2の練習も兼ねて複数の時系列をまとめてプロットする

データの準備

いちいち株価を取得するのは少し面倒なので自前でテストデータを準備

最後の2行はデフォルトのplotを使っていまして、実際のプロット結果としては以下の様な感じ。

140402_1

このままだと日付と関連付けられていないため、一旦日付を紐付けxtsオブジェクトへと変換

どんなデータとなっているかというと

このような感じで、stockAは4月6日が祝日だっためデータが欠損していますが、stockBは平日だったためデータが存在。
4月12日は逆パターンといった感じ。

複数の時系列データをまとめる

といっても1行で済むのですが、

merge関数で複数のxtsオブジェクトをまとめます。
この関数はデフォルトでjoin=”outer”という設定がされておりまして、SQLをイメージするとわかりやすいかもしれないですが、外部結合ってやつですかね。
mergeだけ行った場合は以下の様な感じに。
片方しか存在しない日付に関しては、相方にNAが格納されています。

さらにその外側でna.locf関数をかませることで、NAの部分を直近の値で上書きするようにしてくれます。
エクセルでいうVlookupの第四引数をTRUEにした場合でしょうか

こうすると何が嬉しいかというと、リターン系列を簡単に計算することができる。

ret1はadditive return(という言葉があるかは知らんが汗)の計算でして、要は今日の株価から昨日の株価を引いたものが今日のリターンとするもの。
ret2はいわゆる普通のリターンの計算でして、今日の株価/昨日の株価-1という計算ですな。
arithmeticという引数をTrue(デフォルト)にすると、単純なdiffをとってくれる一方で、Falseにすると、比率で計算してくれるというわけですな。

祝日に関してはリターン0が格納されているので問題無いですね。

プロットしてみる

で、このデータをまとめてプロットしてみます。
普通(?)のやり方としては

140402_2

一方で、ggplot2を使う場合は

140402_3

facets=NULLを指定することで1つの画面に重ね書きしてくれます。

参考

Package ‘xts’
http://cran.r-project.org/web/packages/xts/xts.pdf

R Financial Time Series Plotting
http://timelyportfolio.github.io/rCharts_time_series/history.html

R: Convenience Functions for Plotting zoo Objects with ggplot2 http://hosho.ees.hokudai.ac.jp/~kubo/Rdoc/library/zoo/html/ggplot2.zoo.html