R Primary Components Analysis (主成分分析)

<体重、足の大きさの例>

x1 <- c(180, 184, 160, 167, 161, 169, 175, 174, 166, 173)

x2 <- c(29, 28, 25, 25, 26, 24, 25, 28, 24, 27)

x1 <- as.matrix(x1, nrow = 10)

x2 <- as.matrix(x2, nrow = 10)

 

x <- cbind(x1, x2)

colnames(x) <- c("height", "foots")

head(x)

 

scale(x)

cor(x)

bd = x

pca.bd = princomp(bd)

summary(pca.bd)

 

plot(data.matrix(bd) %*% unclass(loadings(pca.bd)[,c(1,2)]))

biplot(pca.bd)

-------------------------------------------------------------------------------------------------------------

<為替データの例>

cur = read.csv("Currency_summary.csv",header=T)

cur1 <- scale(cur[,2:6])

scale(cur1)

PC <- princomp(cur1)

plot (data.matrix(cur[,2:6]) %*% unclass(loadings(PC))[,c(1,2)])

biplot(PC)

-------------------------------------------------------------------------------------------------------------

#主成分分析の仕組み:

#観測値から分散共分散行列を計算。

#当該行列の固有値問題を解く(固有値固有ベクトルを求める)。

#固有ベクトルの長さを1にしておく。(基底とするため)

#最大固有値に対応する固有ベクトルを係数とする本来の変数の

#線形結合が第一主成分。同様に第二、第三主成分を定義。

#お互いの固有ベクトルは直交している。

 

#主成分分析を行う前には、一般的には標準化が必要

 

x1 <- c(180, 184, 160, 167, 161, 169, 175, 174, 166, 173)

x2 <- c(29, 28, 25, 25, 26, 24, 25, 28, 24, 27)

 

x1 <- as.matrix(x1, nrow = 10)

x2 <- as.matrix(x2, nrow = 10)

 

x <- cbind(x1, x2)

 

colnames(x) <- c("height", "foots")

head(x)

 

scale(x)

cor(x)

 

bd = x

pca.bd = princomp(bd)

summary(pca.bd)

 

plot(data.matrix(bd) %*% unclass(loadings(pca.bd)[,c(1,2)]))

biplot(pca.bd)

 

##############寄与率について##############

#p変数の観測値x1,…,xnの分散の総和は、s11+…+snnであり、

#標本分散共分散行列の固有値の総和λ1+…+λnに等しい。

#主成分における分散の大きさを"情報"と考えたとき、

#第k主成分がもつ情報量は λk/(λ1+…+λn)

 

##############主成分負荷量について##############

#得られた主成分と本来の変数の相関係数のこと。

#これを見て本来の変数と主成分の関係を読み解く。

 

##############2次分析について##############

#主成分得点を使ってクラスター分析を行うなど。

 

##############練習用データで実験##############

#http://psy.isc.chubu.ac.jp/~oshiolab/teaching_folder/datakaiseki_folder/add_folder/daad_01.html

#より取得した

 

data <- data.frame(外向性=c(3,6,6,6,5,4,6,5,6,6,5,5,6,5,5,6,4,6,5,4),

                   社交性=c(4,6,5,7,7,5,6,5,6,5,4,5,6,5,6,6,4,6,3,6),

                   積極性=c(4,7,7,5,6,5,7,4,6,6,4,6,5,4,4,6,3,7,4,6),

                     知性=c(5,8,5,4,5,5,6,5,7,6,5,5,5,4,5,4,6,4,3,3),

                   信頼性=c(4,7,5,6,5,6,4,5,7,5,5,4,6,5,6,4,5,5,5,5),

                   素直さ=c(4,7,6,5,5,6,4,6,6,5,5,5,5,3,6,5,6,5,4,4))

names(data)

 

pca.data = prcomp(data)

names(pca.data)

 

pca.data

summary(pca.data)

#Standard deviationsは固有値(=分散)の平方根

#Rotationは固有ベクトル

 

pca.data$center

#本来の変数の平均値

 

pca.data$scale

#変数を標準化したか否かでTRUE/FALSEで表示

 

pca.data$x

#主成分得点の表示

 

cor(pca.data$x, data)

#主成分得点と本来の変数の相関行列

 

plot(pca.data)

#主成分の情報量のヒストグラムを表示

 

plot(data.frame(pca.data$x[,1:4]))

#4主成分で散布図を表示

 

plot(data.matrix(data) %*% unclass(loadings(pca.data)[,c(1,2)]))

biplot(pca.data)

#第1,2主成分でグラフを表示