Rによるデータ分析
カテゴリの類似度の分析 の方法です。
基本的には質的変数に対しての方法ですが、量的変数は、 1次元クラスタリング の方法で、質的変数に変換するコードが入っているので、 質的・量的が混合していたり、量的変数だけでも使えるようにしてあります。
量的変数だけの場合は、変数の非線形の関係を分析する方法として使えます。
1変数中心型アソシエーション分析の方法です。
中心にしたい変数は、1と0だけの2値データなことが前提です。 以下では、まず、1について調べます。次に、0について調べます。
setwd("C:/Rtest")
library(fastDummies)
library(ggplot2)
Data <- read.csv("Data.csv", header=T)
Data1 <- Data
YdataNo <- 1# 中心にしたい変数の列番号
Y <- names(Data1[YdataNo])
Ydata <- Data1[,YdataNo]
Data1[,YdataNo] <- NULL
for (i in 1:ncol(Data1)) {
if (class(Data1[,i]) == "numeric" || class(Data1[,i]) == "integer" ) {
Data1[,i] <- droplevels(cut(Data1[,i], breaks = 3,include.lowest = TRUE))# 3分割する場合。量的データは、質的データに変換する。
}
}
Data2 <- Data1
for (i in 1:ncol(Data2)) {
if (class(Data2[,i]) == "character") {
Data2 <- dummy_cols(Data2,remove_first_dummy = FALSE,remove_selected_columns = TRUE)# ダミー変換
break
}
}
pY1X <- data.frame(X = 1,p =1)
pXY1 <- data.frame(X = 1,p =1)
for (i in 1:ncol(Data2)) {
DataYX <- cbind(Ydata,Data2[,i])
DataYX3 <- DataYX[,1] * DataYX[,2]
SumDataY <- sum(DataYX[,1])
SumDataX <- sum(DataYX[,2])
SumDataYX <- sum(DataYX3)
pY1X[i,1] <- names(Data2[i])
pY1X[i,2] <- SumDataYX / SumDataX
pXY1[i,1] <- names(Data2[i])
pXY1[i,2] <- SumDataYX / SumDataY
}
Ydata <- abs(Ydata - 1)
pY0X <- data.frame(X = 1,p =1)
pXY0 <- data.frame(X = 1,p =1)
for (i in 1:ncol(Data2)) {
DataYX <- cbind(Ydata,Data2[,i])
DataYX3 <- DataYX[,1] * DataYX[,2]
SumDataY <- sum(DataYX[,1])
SumDataX <- sum(DataYX[,2])
SumDataYX <- sum(DataYX3)
pY0X[i,1] <- names(Data2[i])
pY0X[i,2] <- SumDataYX / SumDataX
pXY0[i,1] <- names(Data2[i])
pXY0[i,2] <- SumDataYX / SumDataY
}
pY1X <- pY1X[order(-pY1X[,2]), ]
pXY1 <- pXY1[order(-pXY1[,2]), ]
pY0X <- pY0X[order(-pY0X[,2]), ]
pXY0 <- pXY0[order(-pXY0[,2]), ]
if(ncol(Data2) > 10){
pY1X <- pY1X[1:10,]
pXY1 <- pXY1[1:10,]
pY0X <- pY0X[1:10,]
pXY0 <- pXY0[1:10,]
}
pY1X
pXY1
pY0X
pXY0
ggplot(pY1X, aes(y=reorder(pY1X[,1], pY1X[,2]), x=pY1X[,2])) + geom_bar(stat = "identity")+ labs(title="p(Y=1 | X)", y="X",x="p")
ggplot(pXY1, aes(y=reorder(pXY1[,1], pXY1[,2]), x=pXY1[,2])) + geom_bar(stat = "identity")+ labs(title="p(X | Y=1)", y="X",x="p")
ggplot(pY0X, aes(y=reorder(pY0X[,1], pY0X[,2]), x=pY0X[,2])) + geom_bar(stat = "identity")+ labs(title="p(Y=0 | X)", y="X",x="p")
ggplot(pXY0, aes(y=reorder(pXY0[,1], pXY0[,2]), x=pXY0[,2])) + geom_bar(stat = "identity")+ labs(title="p(X | Y=0)", y="X",x="p")
グラフは4つ作ります。4つめのグラフの例が下になります。
