とある金融屋の統計技師が時系列解析してみた
DESCRIPTION
第33回R勉強会@東京(#TokyoR)の資料TRANSCRIPT
とある金融屋の統計技師が 時系列解析してみた
~To my dear wife, Phoenix~
第33回 勉強会@東京(#TokyoR)
@teramonagi
2
本資料は個人的な勉強会のために作成したものです。本情報の内容については万全を期しておりますが、その内容を保証するものではありません。これらの情報によって生じたいかなる損害についても、情報提供者は一切の責任を負いません。なお、本資料における意見、見解等はすべて筆者の個人的なものであり、筆者の属する組織の意見、見解等ではないことをあらかじめご了承ください。
CAUTION
自己紹介
• ID:@teramonagi
3
とある弁当屋の統計技師
4
データサイエンティスト
日本が誇る
最強の 使い
石田基広氏著
発売予定:2013/9/26 税込価格:1,365円 共立出版
とある弁当屋の統計技師
丸善出版に心配されるヤヴァさ 5
データサイエンティスト
とある弁当屋の統計技師
6
データサイエンティスト
• “とある弁当屋”で、データサイエンティストが活躍する統計の入門書!
• データの要約、(単|重|ロジスティック)回帰モデルまでの基本をしっかりカバー!
• 更に、これらの内容をがっつり勉強するためのサポートサイトも開設(予定)!
• この秋、これを買わずしてデータサイエンティストは語れない
•今すぐ予約だ!
その他、同著者のおススメ本
7
~初心者向け~ とりあえずR言語への とっかかりとなる一冊
~中・上級者向け~ 辞書的に手元に 置いておきたい一冊
8
本題へ
本資料の概要
• (重)回帰分析の係数が(時系列データに関して言えば)、分析に使用するデータ期間に応じて相当動くという事を理解する
•どの程度ズレ得るのかを
実際にやってみる
9
まずはデータのダウンロード
•米国金融市場より
–米国債10年金利
–S&P500指数
–IBMの株価
–Pacific Gas & Electricの株価
を取得
10
まずはデータのダウンロード
11
# quantmodパッケージのインストール
install.packages(“quantmod”)
library(quantmod) # quantmod0.4系だとauto.assign=TRUEがいる
# 0.5系からはなくてもOKらしい
# 10年国債金利(アメリカ), S&P500(アメリカの株価指数, IBM, PCGの株価を取得
# 今回はアメリカ市場データを用いている
# …からのデータのマージ&欠損(NA)の除去
data <- na.omit(
merge( getSymbols(“DGS10”, src=“FRED”, auto.assign=FALSE),
getSymbols(“SP500”, src=“FRED”, auto.assign=FALSE),
getSymbols(“IBM”, src=“yahoo”, auto.assign=FALSE, from=“2003-01-01”)[,6],
getSymbols(“PCG”, src=“yahoo”, auto.assign=FALSE, from=“2003-01-01”)[,6]
)) colnames(data) <- c(“T10Y”, “SP500”, “IBM”, “PCG”)
head(data)
※裏では時系列処理のxtsパッケージ等も呼ばれてます
まずはデータのダウンロード
12
> head(data)
T10Y SP500 IBM PCG
2003-01-02 4.07 909.03 68.98 10.56
2003-01-03 4.05 908.59 69.90 10.41
2003-01-06 4.09 929.01 71.56 10.92
2003-01-07 4.04 922.93 73.63 10.63
2003-01-08 4.00 909.93 72.08 10.93
2003-01-09 4.19 927.58 74.48 11.02
データの変換(変化率・差分)
13
#データの変換関数群。変化率(ROC) or 差分(diff)
converter <- list(
function(x){diff(x)},
function(x){ROC(x, type="discrete")},
function(x){ROC(x, type="discrete")},
function(x){ROC(x, type="discrete")}
) #dataの各列に対して各convertを適用し,data.frameとして整形
data.converted <- na.omit(
do.call("cbind",lapply(
1:length(converter), function(i) {converter[[i]](data[,i])}
)
)
)
データの変換
14
> head(data.converted)
T10Y SP500 IBM PCG
2003-01-03 -0.02 -4.840e-04 0.013337 -0.014204
2003-01-06 0.04 2.247e-02 0.023748 0.048991
2003-01-07 -0.05 -6.544e-03 0.028926 -0.026556
2003-01-08 -0.04 -1.408e-02 -0.021051 0.028222
2003-01-09 0.19 1.939e-02 0.033296 0.008234
2003-01-10 -0.03 -1.078e-05 0.007787 0.000000
そもそもなぜ変換がいるのか?
15 TJOssanのサイトを見て下さい ※ http://tjo.hatenablog.com/entry/2013/08/16/095536 より
そもそもなぜ変換がいるのか?
16
http://www.slideshare.net/teramonagi/r-7066155より
拙著でよければ、あるいはこちら
x
Density T10Y
-0.05 0.05 0.10
0.38*** 0.30***-0.10 0.00 0.05 0.10
-0.4
0.0
0.13***
-0.0
50.1
0
x
Density SP500
0.72*** 0.55***
x
Density IBM
-0.0
50.1
0
0.37***
-0.4 -0.2 0.0 0.2
-0.1
00.0
5
-0.05 0.05 0.10
x
Density PCG
相関構造の可視化(概要把握)
17
# 相関構造の可視化(psychパッケージのpairs.panels関数も似た感じ)
install.packages("PerformanceAnalytics")
library(PerformanceAnalytics)
chart.Correlation(data.converted, histogram=TRUE)
回帰モデル
株価変化率
||
α+β×SP500変化率+γ×金利変化
18
株価変化率が、どう金利変化に依存するのかを評価したい(γを評価したい)
ローリング回帰とは
時系列データ (時間方向)
時系列データ全体
回帰分析1
回帰分析4
回帰分析2
回帰分析3
各回帰分析期間に対し、回帰係数を算出、回帰係数の時系列変化を取得する
ローリング回帰
20
# windowサイズ250(営業日)でのローリング回帰(IBM, PCG) # …からの回帰係数(切片・SP500・10年金利)取得
size.window <- 250
coefs.pcg <- rollapplyr(
data.converted, size.window, function(x){
coef(lm(PCG~SP500+T10Y, data=x))
}, by.column = FALSE)
names(coefs.pcg) <- c("PCG.intercept", "PCG.SP500", "PCG.T10Y")
coefs.ibm <- rollapplyr(
data.converted, size.window, function(x){
coef(lm(IBM~SP500+T10Y, data=x))
}, by.column = FALSE)
names(coefs.ibm) <- c("IBM.intercept", "IBM.SP500", "IBM.T10Y")
※裏では時系列処理のxtsパッケージ等も呼ばれてます ※rollapplyrはxtsパッケージの機能
結果の表示 with rCharts
21
# rChartsのインストール
install.packages("devtools")
library(devtools)
install_github('rCharts', 'ramnathv')
library(rCharts) # γのPLOT,数が多いので500個だけ
coefs.plotted <- merge(coefs.pcg, coefs.ibm)
coefs.plotted <- coefs.plotted[floor(seq(1, nrow(coefs.plotted), length.out=500)),]
coefs.plotted <- na.omit(data.frame(date=as.character(index(coefs.plotted)), coefs.plotted))
m1 <- mPlot(x="date", y=c("PCG.T10Y","IBM.T10Y"), type='Line', data=coefs.plotted)
m1$set(pointSize = 3, lineWidth = 2)
m1
※出力はhtml+javascriptでインタラクティブでびゅーてぃふるなグラフが作成可能
回帰係数γの時系列変化表示
22
とある弁当屋の乱子氏による解説
23
一般にPCGに代表される電力・ガスの公益関連
株は巨大設備・施設等の固定資産が多く、その支払いを有利子負債でファイナンスしているわ。従って金利が低下した場合は支払利息が減って業績面でプラス(株価上昇材料)となり、逆に金利が上昇した場合は支払利息が増えて業績面でマイナス(株価下落材料)となる傾向があるわ。γはその傾向を反映してマイナスになっているのね。 一方、IBMは特段強く金利からの影響は受けていないように見えるわね。
24
乱子すげぇ!!! わかりやすい!!! 買うしかない!!!
Enjoy!!! 25