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主成分でグラフを表示