Mais conteúdo relacionado
とある金融屋の統計技師が時系列解析してみた
- 11. まずはデータのダウンロード
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. まずはデータのダウンロード
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. データの変換(変化率・差分)
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. データの変換
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
- 17. x
Density
T10Y
-0.05 0.05 0.10
0.38*** 0.30
***
-0.10 0.00 0.05 0.10
-0.40.0
0.13
***
-0.050.10
x
Density
SP500
0.72*** 0.55***
x
Density
IBM
-0.050.10
0.37***
-0.4 -0.2 0.0 0.2
-0.100.05
-0.05 0.05 0.10
x
Density
PCG
相関構造の可視化(概要把握)
17
# 相関構造の可視化(psychパッケージのpairs.panels関数も似た感じ)
install.packages("PerformanceAnalytics")
library(PerformanceAnalytics)
chart.Correlation(data.converted, histogram=TRUE)
- 20. ローリング回帰
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パッケージの機能
- 21. 結果の表示 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でインタラクティブでびゅーてぃふるなグラフが作成可能