Rによるデータ分析

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

質的変数が複数あるデータについての コレスポンデンス分析 の実施例です。

分割表をスタートにするコレスポンデンス分析は、 Rによる分割表のコレスポンデンス分析 にあります。

多重対応分析

多重対応分析 のRによる実施例です。

グラフ用のデータの作成

この例では、Cドライブの「Rtest」というフォルダに、 「Data.csv」という名前で分割表になっているデータが入っている事を想定しています。
PCA

library(fastDummies)# ライブラリを読み込み
library(MASS)
# ライブラリの読み込み
setwd("C:/Rtest")
# 作業用ディレクトリを変更
Data <- read.csv("Data.csv", header=T)
# データを読み込み
Data_dmy <- dummy_cols(Data,remove_first_dummy = FALSE,remove_selected_columns = TRUE)
# ダミー変換
pc <- corresp(Data_dmy,nf=min(ncol(Data_dmy)))
# コレスポンデンス分析
pc1 <- pc$cscore
#
pc1 <- transform(pc1 ,name1 = rownames(pc1))
# 行名を追加
round(pc$cor^2/sum(pc$cor^2),2)
# 寄与率を求める。
QM 

上の例では、7番目以降の固有値は寄与率が低いので、この後の解析から外すことにします。

多次元同時付置図

多次元同時付置図 は、多次元を二次元で見れるようにした散布図です。

質的変数が複数ある場合、コレスポンデンス分析で計算される座標データも複数(多次元)になります。 「質的変数が複数を、ひとつのグラフで見る」という意味が、「同時」に入っています。 「計算される多次元データを、ひとつのグラフで見る」という意味が「多次元」に入っています。

MaxN = 6# 使用する固有値の数を指定
Data11 <- pc1[,1:MaxN]
# 項目のある列を指定
Data11_dist <- dist(Data11)
# サンプル間の距離を計算
sn <- sammon(Data11_dist)
# 多次元尺度構成法
output <- sn$points
# 得られた2次元データの抽出
Data2 <- cbind(output, pc1)  # 元データと多次元尺度構成法の結果を合わせる。
library(ggplot2)
# パッケージの読み込み#
ggplot(Data2, aes(x=Data2[,1], y=Data2[,2],label=name1)) + geom_text()
# Nameを使った言葉の散布図
QM
思ったような図ができました。

ちなみに、コレスポンデンス分析の第1、第2の成分でグラフを作ると、以下のようになり、分離ができていません。
QM

4部グラフ

A-B型の 3部グラフ に相当するのは、A-B-C型では4部グラフになります。 色を設定する場所が1行増えますが、作り方は基本的に同じです。

MaxN = 6# 使用する固有値の数を指定
library(igraph)
# パッケージを読み込み
library(sigmoid)
# パッケージを読み込み
Data1p = pc1[,1:MaxN]
# 分析対象のデータを抽出
names(Data1p) = paste(names(Data1p),"+",sep="")
# 列名を変更
DM.matp = apply(Data1p,c(1,2),relu)
# 0以下の値は0に変換
Data1m = -pc1[,1:MaxN]
# 分析対象のデータを抽出。符号を反転
names(Data1m) = paste(names(Data1m),"-",sep="")
# 列名を変更
DM.matm = apply(Data1m,c(1,2),relu)
# 0以下の値は0に変換
DM.mat =cbind(DM.matp,DM.matm)
# プラス側とマイナス側を合体
DM.mat <- DM.mat / max(DM.mat) * 10
# 値が0から10になるように変換
DM.mat[DM.mat < 3] <- 0
# 絶対値が3未満の場合は0にする(非表示にする)
DM.g<-graph_from_incidence_matrix(DM.mat,weighted=T)
# グラフ用のデータを作る
V(DM.g)$color <- c("steel blue", "orange")[V(DM.g)$type+1]
# 色を変える
V(DM.g)$color[1:3] <- "red"
# Aの要素の色を変える。
V(DM.g)$color[4:8] <- "green"
# Bの要素の色を変える。
V(DM.g)$shape <- c("square", "circle")[V(DM.g)$type+1]
# マークの形を変える
plot(DM.g, edge.width=E(DM.g)$weight)
# グラフを作る
QM



参考文献

同志社大学 金明哲先生のページ
Rと対応分析 https://www1.doshisha.ac.jp/~mjin/R/Chap_26/26.html






Tweet データサイエンス教室