Rによるデータ分析

Rによる質的変数の主成分分析

主成分分析 のRによる実施例です。

特にこのページは、 広義の数量化V類 と、このサイトで呼んでいる方法の実施例になります。

モデルの作成

サンプルのデータは下記を使っています。「Name」の列はなくても動きます。
PCA

library(fastDummies)# ライブラリを読み込み
setwd("C:/Rtest") # 作業用ディレクトリを変更
Data <- read.csv("Data.csv", header=T) # データを読み込み
DataName <- Data$Name
# Nameの列を別名で保管する
Data$Name <- NULL
# データからNameの列を消して、Xの列だけにする
Data_dmy <- dummy_cols(Data,remove_first_dummy = FALSE,remove_selected_columns = TRUE)
# ダミー変換
pca_model <- prcomp(Data_dmy, scale=TRUE)
# 主成分分析
summary(pca_model)
# 「Cumulative Proportion」が累積寄与率。

サンプルの類似度の分析

手順は、 Rによる変数の類似度の主成分分析 と同じですが、ダミー変換で、ひとつの変数がひとつのカテゴリに対応するようになっているので、 カテゴリの類似度の分析をしていることになります。

pca_data1 <- as.data.frame(pca_model$x) # 主成分得点を得る
pca_dataA <- transform(pc1 ,name = DataName)
# サンプル名を追加
pca_dataA$Index <-row.names(Data)
# Indexという名前の列を作り、中身は行番号にする

library(ggplot2) # パッケージの読み込み
library(plotly)
# パッケージの読み込み
ggplotly(ggplot(pca_dataA, aes(x=PC1, y=PC2,label=name)) + geom_text())
# 第1主成分と第2主成分で言葉の散布図
PCA

高次元2次元化散布図による、サンプルの類似度の分析

基本的に Rによるサンプルの類似度の主成分分析 です。 ただし、質的変数の場合、「まったく同じ値のサンプル(距離がゼロの組合せ)」が含まれることが多く、そうなると多次元尺度構成法でエラーになります。 そこで、下記では、エラーが起きないUMAPを使っています。

library(MASS)# ライブラリを読み込み
pca_data11 <- pca_data1
row.names(pca_data11) <- DataName
Data11_dist <- dist(pca_data11)
# サンプル間の距離を計算
#sn <- sammon(Data11_dist)
# 多次元尺度構成法
#output <- sn$points
# 得られた2次元データの抽出
library(Rcpp)
library(umap)
ump_out <- umap(as.matrix(Data11_dist),n_neighbors=10)
# UMAP n_neighborsは、大き過ぎでも、小さ過ぎでもエラーが出る。
output <- ump_out$layout
Data2 <- as.data.frame(cbind(output, pca_data11)) 
# 元データと多次元尺度構成法の結果を合わせる。
ggplotly(ggplot(Data2, aes(x=Data2[,1], y=Data2[,2],label=row.names(pca_data11))) + geom_text())
# 言葉の散布図
PCA

カテゴリの類似度の分析

pca_data2 <- sweep(pca_model$rotation, MARGIN=2, pca_model$sdev, FUN="*") # 因子負荷量を計算
pca_dataB <- transform(pca_data2,nameCol=rownames(pca_data2))
# 言葉の散布図
ggplotly(ggplot(pca_dataB, aes(x=PC1, y=PC2,label=nameCol)) + geom_text())
# 言葉の散布図
PCA

高次元2次元化散布図による、カテゴリの類似度の分析

基本的に Rによる変数の類似度の主成分分析 です。 質的変数の場合は、まったく同じということは起こりにくく、 UMAPは、n_neighborsの設定によっては、近くにないはずの組合せが近くになることがあるため、多次元尺度構成法を使っています。

library(MASS)# ライブラリを読み込み
Data11_dist <- dist(pca_data2)
# サンプル間の距離を計算
sn <- sammon(Data11_dist)
# 多次元尺度構成法
output <- sn$points
# 得られた2次元データの抽出
library(Rcpp)
library(umap)
#ump_out <- umap(as.matrix(Data11_dist),n_neighbors=3)
# UMAP n_neighborsは、大き過ぎでも、小さ過ぎでもエラーが出る。
#output <- ump_out$layout
Data2 <- as.data.frame(cbind(output, pca_data2)) 
# 元データと多次元尺度構成法の結果を合わせる。
ggplotly(ggplot(Data2, aes(x=Data2[,1], y=Data2[,2],label=row.names(pca_data2))) + geom_text())
# 言葉の散布図
PCA



Rによる質的変数のコレスポンデンス分析

Rによる分割表のコレスポンデンス分析

Rによる主成分分析の基本

Rによる変数の類似度の主成分分析

Rによるサンプルの類似度の主成分分析

Rによるクロス集計表の主成分分析



Tweet データサイエンス教室