Rによるデータ分析

Rによる相互情報量

相互情報量 を計算します。

データの前処理:分割表の準備

相互情報量は、 分割表 から求まります。 ここでは、最初のデータの形式が異なる場合を想定して、分割表を作るまでの部分です。

行名と列名がある分割表からスタートの場合

1行目に行名、1列目に列名が入っています。

setwd("C:/Rtest")
TableXY <- as.matrix(read.csv("Data.csv", header=T,row.name = 1))

行名と列名がない分割表からスタートの場合

行列データのみの場合です。

setwd("C:/Rtest")
TableXY <- as.matrix(read.csv("Data.csv", header=F))

2列の質的変数からスタートの場合

setwd("C:/Rtest")
Data1 <- read.csv("Data.csv", header=T)
TableXY <- table(Data1[,1], Data1[,2])
# 分割表を作成

2列の量的変数からスタートの場合

量的変数の場合は、 1次元クラスタリング で、質的変数に変換してから処理します。

setwd("C:/Rtest")
Data <- read.csv("Data.csv", header=T)
Data1 <- Data
for (i in 1:ncol(Data1)) {
if (class(Data1[,i]) == "numeric") {
Data1[,i] <- droplevels(cut(Data1[,i], breaks = 3,include.lowest = TRUE))
# 3分割する場合。量的データは、質的データに変換
}
}
TableXY <- table(Data1[,1], Data1[,2])
# 分割表を作成

データの前処理:分割表の準備

TableXYという変数に分割表が入っているところからのコードです。

相互情報量

Px <- TableXY
for (i in 1:nrow(TableXY)) {
Px[i,] <- sum(TableXY[i,])/sum(TableXY)
}
Py <- TableXY
for (i in 1:ncol(TableXY)) {
Py[,i] <- sum(TableXY[,i])/sum(TableXY)
}
Pxy <- TableXY/sum(TableXY)
pIxy <- Pxy*log(Pxy/Px/Py,2)
pIxy[is.na(pIxy)] <- 0
Ixy <- sum(pIxy)
Ixy
# 相互情報量

カテゴリ数標準化型相互情報量係数

カテゴリ数標準化型相互情報量係数 の場合です。

Px <- TableXY
for (i in 1:nrow(TableXY)) {
Px[i,] <- sum(TableXY[i,])/sum(TableXY)
}
Py <- TableXY
for (i in 1:ncol(TableXY)) {
Py[,i] <- sum(TableXY[,i])/sum(TableXY)
}
Pxy <- TableXY/sum(TableXY)
pIxy <- Pxy*log(Pxy/Px/Py,2)
pIxy[is.na(pIxy)] <- 0
Ixy <- sum(pIxy)
k <- min(ncol(TableXY), nrow(TableXY))
Ixyk <- sum(pIxy)/log(k,2)
Ixyk
# カテゴリ数標準化型相互情報量係数

情報量標準化型相互情報量係数

情報量標準化型相互情報量係数 の場合です。

Px <- TableXY
for (i in 1:nrow(TableXY)) {
Px[i,] <- sum(TableXY[i,])/sum(TableXY)
}
Hx <- 0
for (i in 1:nrow(TableXY)) {
Hx <- Hx + (-Px[i,] * log(Px[i,], 2))
}
Hx <- as.data.frame(Hx)[1,1]
Py <- TableXY
for (i in 1:ncol(TableXY)) {
Py[,i] <- sum(TableXY[,i])/sum(TableXY)
}
Hy <- 0
for (i in 1:ncol(TableXY)) {
Hy <- Hy + (-Py[,i] * log(Py[,i], 2))
}
Hy <- as.data.frame(Hy)[1,1]
Pxy <- TableXY/sum(TableXY)
pIxy <- Pxy*log(Pxy/Px/Py,2)
pIxy[is.na(pIxy)] <- 0
Ixy <- sum(pIxy)
IHHxy <- Ixy / sqrt(Hx * Hy)
IHHxy
# 情報量標準化型相互情報量係数



Rによるデータ分析

データサイエンス教室