簡単のため、下記のような2次元の身体運動のデータを観測したとする。
library(MASS)
par(pty="s", mfrow=c(1,3))
# 平均
mu = c(0, 0)
# 分散共分散行列(相関 > 0)
Sigma = rbind(
c(1, 0.5),
c(0.5, 1)
)
dat = mvrnorm(1000,mu,Sigma)
r = cor(dat)
plot(dat, main = bquote("r = " ~ .(r[1,2])), asp = 1)
このとき、PCAは、
library(stats)
res = prcomp(dat) # この中で平均0に合わせてくれる(must)。各要素の標準偏差も本来1にすべきで、その場合は、scale.=Tとうつ
res$sdev # PC1 (第1固有ベクトル)、PC2上 (第1固有ベクトル)でのばらつき
## [1] 1.2166970 0.7053614
cumsum(res$sdev)/sum(res$sdev) # PCkまですべて利用した場合の分散説明率 (k = 1, 2)
## [1] 0.6330177 1.0000000
res$rotation # PC1, PC2 (i.e., 固有ベクトル)
## PC1 PC2
## [1,] 0.7017961 -0.7123779
## [2,] 0.7123779 0.7017961