- ryamada本のR7-5.Rでは、固有値分解を実施している
- 固有値分解では、オリジナルの軸が説明する分散が10人並みなのに対して、固有値分解を施すことにより、説明する分散が大きい方から軸をとっている
- その図がこれだが
- そのようにして軸を取り直すことで、分散共分散行列が
- 対角成分(分散)の和は変わらないが、大きな値を持つものと、ほとんど値を持たないものとに分けなおして、大きい順に並べていること
- 非対角成分(共分散)が小さくなっていることが見て取れる
Nm<-100
Ns<-c(rpois(4,100),rpois(20,10))
Npop<-length(Ns)
M<-NULL
for(j in 1:Npop){
tmpM<-matrix(rep(0,Nm*Ns[j]),ncol=Nm)
for(i in 1:Nm){
af<-rnorm(1)
tmpM[,i]<-rnorm(Ns[j],af)
}
M<-rbind(M,tmpM)
}
wholemean<-mean(M)
M<-M-wholemean
mu<-apply(M,2,mean)
M<-t(t(M)-mu)
svdout<-svd(M)
M2<-svdout$u%*%diag(svdout$d)
par(mfcol=c(1,2))
image(1:sum(Ns),1:Nm,M,xlab="サンプル(大集団→小集団)",ylab="項目")
image(1:sum(Ns),1:Nm,M2,xlab="サンプル(大集団→小集団)",
ylab="PCA後eigen項目")
df1<-as.data.frame(M);df2<-as.data.frame(M2)
L<-1:5;par(mfcol=c(1,1))
plot(df1[,L])
plot(df2[,L])
vM1<-apply(M,2,var)
vM2<-apply(M2,2,var)
ylim<-c(min(vM1,vM2),max(vM1,vM2))
plot(vM1,ylim=ylim,type="b")
par(new=TRUE)
plot(vM2,ylim=ylim,type="b",col="red")
library(rgl)
cD<-cov(M)
cD2<-cov(M2)
sum(diag(cD))
sum(diag(cD2))
sum(cD)-sum(diag(cD))
sum(cD2)-sum(diag(cD2))
open3d()
plot3d(row(cD),col(cD),cD,type="l")
open3d()
plot3d(row(cD2),col(cD2),cD2,type="l")
par(mfcol=c(1,2))
persp(cov(M))
persp(cov(M2))
par(mfcol=c(1,1))