相関

国語と算数の点数を格納したベクトルを作り、分散と共分散を計算する。
国語と算数の点数は、合計で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)