主成分を計算する
「共和分と総最小二乗法(TLS) 〜 主成分分析(PCA)の利用」の続き。
データは「TOPIXと個別銘柄の価格」で求めた、UFJとTOPIXのデータを使用する。
> head(YJ8306_20130101_20140101) YJ8306.Open YJ8306.High YJ8306.Low YJ8306.Close YJ8306.Volume YJ8306.Adjusted 2013-01-04 477 485 474 484 119113900 484 2013-01-07 487 488 475 476 86678900 476 2013-01-08 469 471 457 462 117835800 462 2013-01-09 451 472 449 469 122409400 469 2013-01-10 474 484 472 474 158715200 474 2013-01-11 482 485 476 479 102374600 479 > head(YJ998405_20130101_20140101) YJ998405.Open YJ998405.High YJ998405.Low YJ998405.Close 2013-01-04 876.97 888.53 876.83 888.51 2013-01-07 895.11 895.14 879.22 881.06 2013-01-08 877.58 881.49 868.35 871.88 2013-01-09 863.19 882.29 862.62 879.05 2013-01-10 884.63 892.26 883.33 889.02 2013-01-11 899.32 901.98 895.13 898.69 > UFJ<-YJ8306_20130101_20140101 > TOPIX<-YJ998405_20130101_20140101
可視化。
> x<-diff(as.numeric(UFJ[,4])) > y<-diff(as.numeric(TOPIX[,4])) > x<-diff(as.numeric(TOPIX[,4])) > y<-diff(as.numeric(UFJ[,4])) > plot(x, y, main="Scatter plot of price diff, TOPIX vs UFJ", cex.main=0.8, cex.lab=0.8, cex.axis=0.8) > abline(lm(y~x), col="red") > abline(lm(x~y), lty=2, col="blue") > grid()
PCAを行い、直線を追加。
> r<-prcomp(~x+y) > slope<-r$rotation[2,1] / r$rotation[1,1] > intercept<-r$center[2]-slope*r$center[1] > abline(a=intercept, b=slope, lty=3, col="orange")