質的変数が複数あるデータについての コレスポンデンス分析 の実施例です。
分割表をスタートにするコレスポンデンス分析は、 Rによる分割表のコレスポンデンス分析 にあります。
多重対応分析 のRによる実施例です。
この例では、Cドライブの「Rtest」というフォルダに、
「Data.csv」という名前で分割表になっているデータが入っている事を想定しています。
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)# 寄与率を求める。
上の例では、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を使った言葉の散布図
思ったような図ができました。
ちなみに、コレスポンデンス分析の第1、第2の成分でグラフを作ると、以下のようになり、分離ができていません。
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) # グラフを作る
同志社大学 金明哲先生のページ
Rと対応分析
https://www1.doshisha.ac.jp/~mjin/R/Chap_26/26.html