Rによる主成分分析の基本 にあるサンプルの類似度の主成分分析の続きです。
Rによる主成分分析の基本 のコードと、以下は同じです。
setwd("C:/Rtest")
Data <- read.csv("Data.csv", header=T)
DataName <- Data$Name # Nameの列を別名で保管する
Data$Name <- NULL # データからNameの列を消して、Xの列だけにする
pca_model <- prcomp(Data, scale=TRUE) # 主成分分析
summary(pca_model) # 「Cumulative Proportion」が累積寄与率。
pca_data1 <- as.data.frame(pca_model$x) # 主成分得点を得る
pca_dataA <- transform(pca_data1 ,name1 = DataName,name2 = "A")# サンプル名を追加
pca_data2 <- sweep(pca_model$rotation, MARGIN=2, pca_model$sdev, FUN="*") # 因子負荷量を計算
pca_dataB <- transform(pca_data2 ,name1=rownames(pca_data2),name2="B")# 言葉の散布図
library(ggplot2)
library(plotly)
ggplotly(ggplot(pca_dataA, aes(x=PC1, y=PC2,label=name1)) + geom_text())# 言葉の散布図
重なってわかりにくいですが、CとDが近く、他は散らばっています。
基本の分析だと、2つの主成分を散布図の縦軸と横軸にして考察します。
2つの主成分のすべての組合せを見る方法がありますが、「結局、どのサンプル同士が近いのか?」ということが、考察しにくいです。 そこで、 高次元を2次元に圧縮して可視化 の方法で、多次元を2次元にします。
なお、この例だと、基本の分析の時と特に変わらない結果になります。 意味のある主成分の数が、もっと増えると効果的な方法になります。
主成分との関係の情報は不要で、サンプルの類似度だけを詳しく調べたい場合は、 多次元尺度構成法 を使って、 多数の主成分を2つに凝縮すると良いです。
library(MASS)# ライブラリを読み込み
pca_data11 <- pca_data1
row.names(pca_data11) <- DataName
Data11_dist <- dist(pca_data11)# サンプル間の距離を計算
sn <- sammon(Data11_dist) # 多次元尺度構成法
output <- sn$points# 得られた2次元データの抽出
Data2 <- cbind(output, pca_data11) # 元データと多次元尺度構成法の結果を合わせる。
ggplotly(ggplot(Data2, aes(x=Data2[,1], y=Data2[,2],label=row.names(pca_data11))) + geom_text()) # 言葉の散布図
この場合、CとDが「近い」となっています。
高次元データのネットワーク分析 を使う場合です。
library(MASS)# ライブラリを読み込み
pca_data11 <- pca_data1
row.names(pca_data11) <- DataName
Data11_dist <- as.matrix(dist(pca_data11))# サンプル間の距離を計算
library(igraph) # パッケージを読み込み
diag(Data11_dist) <- 1 # 対角成分は1にする
Data11_dist2 <- 1/Data11_dist # 近いほど小さい尺度に変換
diag(Data11_dist2) <- 0 # 対角成分は0にする
Data11_dist3 <- Data11_dist2 / max(Data11_dist2) *10 # 最大値が10になるように変換
Data11_dist3[Data11_dist3 < 1] <- 0 # 1より小さい場合は0に変換
DM.g<-graph.adjacency(as.matrix(Data11_dist3),weighted=T, mode = "undirected") # グラフ用のデータを作る
plot(DM.g, edge.width=E(DM.g)$weight) # グラフを作る
この場合、CとDだけでなく、EとFも「近い」となっています。
RStudioで、このページのコードを扱う時の注意です。
上のコードの場合、散布図は、「Viewer」の所に出ます。
ネットワークグラフは、「Plots」の所にできます。
「グラフができない」となった時の確認ポイントです。