Rによるデータ分析

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

分割表 をスタートにする コレスポンデンス分析 の実施例です。

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

関係を表す値が関係の強さを表している場合

多次元同時付置図(コレスポンデンス分析+多次元尺度構成法+同時付置図)

表の値は、頻度や関係の強さを表していて、大きいほど関係が強い場合です。 0が一番小さな値で、「関係なし」の意味になっているとします。 下記のデータの場合は、BとTが一番強い関係を表しているとします。
コードの例では、一番左の列はサンプル名として使われます。

データが0以上の整数の時に使える方法です。 例えば、頻度の時は使えます。

コレスポンデンス分析 の出力を 多次元尺度構成法 で処理して 多次元同時付置図 を作る方法です。
コレスポンデンス分析の結果が多次元になっている場合は、普通の同時付置図では、分析で間違いが起きる可能性があるので、 この方法を使うと便利です。

library(MASS) # パッケージを読み込み
setwd("C:/Rtest")
# 作業用ディレクトリを変更
Data <- read.csv("Data.csv", header=T, row.names=1)
# データを読み込み
pc <- corresp(Data,nf=min(ncol(Data),nrow(Data)))
# コレスポンデンス分析
pc1 <- pc$cscore
# スコアを読み取り
pc1 <- transform(pc1 ,name1 = rownames(pc1), Group = "A")
# 行名を追加
pc2 <- pc$rscore
# スコアを読み取り
pc2 <- transform(pc2 ,name1 = rownames(pc2), Group = "B")
# 列名を追加
Data1 <- rbind(pc1,pc2)
# データを結合
round(pc$cor^2/sum(pc$cor^2),2)
# 寄与率を求める。

# 上記の結果から、3番目までの固有値は寄与率が高いことがわかったので、この後の解析にいれることにします。
# ちなみに、寄与率の低いところを入れると、それがノイズになるらしく、きれいに分離されなくなります。

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

関係を表す値が質的データの場合

表の値は、質的データの場合です。 質的分割表のコレスポンデンス分析 の例です。

いずれの方法も、行の項目名が1列目、列の項目が2列目、値が3列目になるようにデータを並べ変えてから使います。

多次元同時付置図(コレスポンデンス分析+多次元尺度構成法+同時付置図)

library(tidyr) # ライブラリの読み込み
library(dplyr)
# ライブラリの読み込み
library(fastDummies)
# ライブラリの読み込み
library(MASS)
# ライブラリの読み込み
library(ggplot2)
# ライブラリの読み込み#
setwd("C:/Rtest")
# 作業用ディレクトリを変更
Data <- read.csv("Data.csv", header=T)
# データを読み込み
Data1 <- tidyr::gather(Data, key="Group", value = Val, -Name)
# 縦型に変換(Nameの列以外を積み上げる)
Data_dmy <- dummy_cols(Data1,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)
# 寄与率を求める。

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

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

これも、解釈しにくいですが、とりあえずデータがグラフになりました。 Redが外れたところに配置されるのは、上の方法と同じになりました。



Tweet データサイエンス教室