主成分を計算する

共和分と総最小二乗法(TLS) 〜 主成分分析(PCA)の利用」の続き。

データは「TOPIXと個別銘柄の価格」で求めた、UFJTOPIXのデータを使用する。

> 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")