R入門
情報量規準による統計解析入門(講談社サイエンティフィク)
最終更新:
r-intro
-
view
ミス・ユニバース日本代表の体系に関する主成分分析(pp.153-164)
Rに標準で搭載のvar関数は不偏分散を求めるものであり、偏差平方和を標本数で割ったものではない。そこで、最初にvarpという自作関数を使用して、途中で使用している。
> varp <- function(val) {
+ return((length(val) - 1) / length(val) * var(val))
+ }
> dtf <- read.csv("data/table12_1.csv", header = TRUE)
> mxxx <- as.matrix(dtf[, 2:6])
> n <- nrow(mxxx)
> p <- ncol(mxxx)
> dmean <- apply(mxxx, 2, mean) # 各列の平均
> dvarp <- apply(mxxx, 2, varp) # 各列の分散(不偏分散ではない)
> dstde <- sqrt(dvarp) # 各列の標準偏差
> mxtemp <- sweep(mxxx, 2, dmean, FUN = "-")
> mxxx0 <- sweep(mxtemp, 2, dstde, FUN = "/")
> mxrr <- t(mxxx0) %*% mxxx0 / n
> eigval <- eigen(mxrr)$values
> d1 <- eigval / sum(eigval)
> d2 <- double(p)
> for (i in 1:p) d2[i] <- sum(d1[1:i])
> eigvec <- eigen(mxrr)$vectors
> rownames(eigvec) <- c("身長", "体重", "バスト", "ウェスト", "ヒップ")
> colnames(eigvec) <- c("x1", "x2", "x3", "x4", "x5")
> dtf <- t(data.frame(固有値 = eigval, 寄与率 = d1, 累積寄与率 = d2))
> colnames(dtf) <- c("x1", "x2", "x3", "x4", "x5")
> mxxxa <- mxxx0 %*% eigvec
> colnames(mxxxa) <- c("第1", "第2", "第3", "第4", "第5")
> # 相関行列
> print(mxrr)
height weight bust waist hip
height 1.00000000 0.6173717 0.3620673 0.368208142 -0.043119609
weight 0.61737166 1.0000000 0.3341712 0.665307665 -0.107443062
bust 0.36206726 0.3341712 1.0000000 0.280441930 0.685251832
waist 0.36820814 0.6653077 0.2804419 1.000000000 -0.006370564
hip -0.04311961 -0.1074431 0.6852518 -0.006370564 1.000000000
> # 固有ベクトル
> print(eigvec)
x1 x2 x3 x4 x5
身長 -0.4891523 -0.1816188 0.71013804 -0.4612335 0.1034999
体重 -0.5504555 -0.2906559 -0.06017657 0.6881357 0.3679210
バスト -0.4417133 0.5304590 0.08611513 0.2402352 -0.6770332
ウェスト -0.4869700 -0.2144097 -0.68751116 -0.4820622 -0.1087803
ヒップ -0.1596195 0.7451010 -0.10952321 -0.1537397 0.6194472
> # 固有値・他
> print(dtf)
x1 x2 x3 x4 x5
固有値 2.3741918 1.5421066 0.6417648 0.26079368 0.18114304
寄与率 0.4748384 0.3084213 0.1283530 0.05215874 0.03622861
累積寄与率 0.4748384 0.7832597 0.9116127 0.96377139 1.00000000
> # 第1~5主成分
> print(mxxxa)
第1 第2 第3 第4 第5
[1,] 0.77600803 0.06769004 0.09345140 0.07497037 0.21346159
[2,] 4.00845539 1.03038774 -0.20956461 -0.22943730 -0.24070481
[3,] -1.01409374 -1.65269885 -1.45873809 -0.69958763 -0.43883604
[4,] -1.17933206 1.06949076 -1.19162979 0.58640025 0.19802651
[5,] -0.07964604 -1.56295274 1.07839702 0.47967860 -0.76054108
[6,] 0.41384431 0.13304684 -0.40348070 0.44476269 0.04544139
[7,] -1.88001803 2.48238435 0.43763819 -0.10261088 -0.36915114
[8,] -0.88302667 -0.13708737 0.93628588 -0.05892987 0.14806400
[9,] -0.35297587 -0.07669839 0.64665696 -1.00651873 0.52352423
[10,] 0.19078467 -1.35356239 0.07098373 0.51127250 0.68071535
一部の固有ベクトルと主成分は、書籍p.164の表12.5の値と符号が異なるが、固有ベクトルは0以外の実数をかけたものもまた固有ベクトルであることから、問題はない。