相関
国語と算数の点数を格納したベクトルを作り、分散と共分散を計算する。
国語と算数の点数は、合計で10点だとする。
> kokugo<-c(5,3,8,7,9) > sansu<-c(5,7,2,3,1) > var(kokugo,sansu) [1] -5.8 > cov(kokugo,sansu) [1] -5.8
合計で100点の場合は次のようになる。
> kokugo<-10*kokugo > sansu<-10*sansu > var(kokugo,sansu) [1] -580 > cov(kokugo,sansu) [1] -580
分散も共分散も100(10の2乗)されている。
つまり、分散と共分散は「スケール変換に対して不変ではない」という常識。
一方、相関係数は不変である。
> cor(kokugo,sansu) [1] -1 > cor(kokugo/10,sansu/10) [1] -1
さて、前置きはこの程度にしておいて、本題に移る。
TOPIXのリターンと個別銘柄のリターンの相関を計算してみることが目的。
まず、「6869 シスメックス」のデータを取得。
> getSymbols('YJ6869.T', src='yahooj') [1] "YJ6869.T" > head(YJ6869.T) YJ6869.T.Open YJ6869.T.High YJ6869.T.Low YJ6869.T.Close YJ6869.T.Volume YJ6869.T.Adjusted 2007-01-04 1177.5 1180.0 1165.0 1172.5 300000 1172.5 2007-01-05 1175.0 1175.0 1150.0 1157.5 858000 1157.5 2007-01-09 1157.5 1160.0 1132.5 1142.5 976800 1142.5 2007-01-10 1137.5 1140.0 1110.0 1117.5 1243200 1117.5 2007-01-11 1120.0 1130.0 1102.5 1112.5 1169200 1112.5 2007-01-12 1115.0 1122.5 1095.0 1117.5 1276800 1117.5 >
リターンを計算。
> YJ6869_returns<-(diff(log(YJ6869.T$YJ6869.T.Adjusted))) > YJ6869_returns<-YJ6869_returns[-1,] > head(YJ6869_returns) YJ6869.T.Adjusted 2007-01-05 -0.012875714 2007-01-09 -0.013043663 2007-01-10 -0.022124796 2007-01-11 -0.004484312 2007-01-12 0.004484312 2007-01-15 0.015538603
TOPIXのリターンとの相関を計算する。
>cor(topix_returns, YJ6869_returns) cor(topix_returns, YJ6869_returns) でエラー: 互換性のない次元です
駄目だった。
とりあえず、サイズを調べるとサイズが異なったし、駄目な箇所がひと目で分かったので、サイズを揃える。
※)このようなやり方はベストでは無いだろうが、Rリテラシーの低さはすぐには解決しないので、一旦この程度で・・・。
> length(topix_returns) [1] 2209 > length(YJ6869_returns) [1] 2210 > tail(topix_returns) YJ998405.T.Close 2016-01-04 -0.024620393 2016-01-05 -0.003290895 2016-01-06 -0.010602895 2016-01-07 -0.020972813 2016-01-08 -0.007310910 2016-01-12 -0.031849446 > tail(YJ6869_returns) YJ6869.T.Adjusted 2016-01-05 -0.011741818 2016-01-06 0.028462465 2016-01-07 -0.039016652 2016-01-08 -0.003986716 2016-01-12 -0.046329811 2016-01-13 0.026154278 #最後のデータが余分なので2016-01-12までのデータに揃える > YJ6869_returns<-YJ6869_returns[0:(length(YJ6869_returns)-1)]
相関係数を計算する。
> dataF<-data.frame(YJ6869_returns,topix_returns) > cor(dataF) YJ6869.T.Adjusted YJ998405.T.Close YJ6869.T.Adjusted 1.0000000 0.5651332 YJ998405.T.Close 0.5651332 1.0000000 >
散布図を描く。
> plot(dataF, col="blue", pch=16, cex=0.5)
ちなみに、「シスメックス」は、本エントリー作成段階ではTOPIX構成銘柄であり、Mid400、TOPIXに占める個別銘柄の割合は0.2657%となっている。
さて、今度は「メガチップス」の株価を使って同様のことを実施する。
まずは株価取得。
> getSymbols("YJ6875.T",src='yahooj') > YJ6875.T<-YJ6875.T['2007;'] #TOPIXのデータが2007年からなので、それに揃える > head(YJ6875.T) YJ6875.T.Open YJ6875.T.High YJ6875.T.Low YJ6875.T.Close YJ6875.T.Volume YJ6875.T.Adjusted 2007-01-04 2650 2670 2620 2640 148700 2640 2007-01-05 2620 2625 2505 2555 343900 2555 2007-01-09 2500 2565 2460 2515 161300 2515 2007-01-10 2520 2595 2475 2540 304000 2540 2007-01-11 2540 2620 2535 2615 574400 2615 2007-01-12 2640 2700 2630 2645 447200 2645
リターンを計算。
> YJ6875_returns<-(diff(log(YJ6875.T$YJ6875.T.Adjusted))) > YJ6875_returns<-YJ6875_returns[-1,] > head(YJ6875_returns) YJ6875.T.Adjusted 2007-01-05 -0.032726694 2007-01-09 -0.015779420 2007-01-10 0.009891277 2007-01-11 0.029100016 2007-01-12 0.011406968 > YJ6875_returns<-YJ6875_returns[0:(length(YJ6875_returns)-1)] #TOPIXのデータと期間を揃えるため。応急処置。
TOPIXリターンとの相関を計算する。
> dataF1<-data.frame(YJ6875_returns, topix_returns) > cor(dataF1) YJ6875.T.Adjusted YJ998405.T.Close YJ6875.T.Adjusted 1.0000000 0.5619782 YJ998405.T.Close 0.5619782 1.0000000
あれ、50%以上も相関がある。何か間違ったか・・・。
株価はそれぞれこんな感じ。
> par(mfrow=c(2,2)) > plot(YJ6875.T) > plot(YJ6869.T) > plot(YJ998405.T)
> par(mfrow=c(3,1)) > plot(topix_returns) > plot(YJ6869_returns) > plot(YJ6875_returns)