Rによるデータ分析

Rによる正規化による有向相関分析

正規化による有向相関分析 の実施例です。

前処理として、 相関偏相関分析 をすることで、不要な探索を減らします。

下のようなデータを例にします。
correlation

相関偏相関分析(正規化による有向相関分析の事前分析)

library(ppcor)
library(tidyr)
library(dplyr)
library(igraph)
setwd("C:/Rtest")
Data <- read.csv("Data.csv", header=T)
cor2<-cor(Data)^2
pcor2 <- (pcor(Data)$estimate)^2
directed_cor2 <- cor2
n <- ncol(cor2)
for (j in 1:n) {
for (i in 1:n) {
if(i < j){
if(cor2[i,j] < pcor2[i,j]){
directed_cor2[i,j] <- cor2[i,j]
directed_cor2[j,i] <- cor2[i,j]
} else {
directed_cor2[i,j] <- pcor2[i,j]
directed_cor2[j,i] <- pcor2[i,j]
}
}
}
}
round(cor2,3) # 相関係数の2乗
round(pcor2,3) # 偏相関係数の2乗
round(directed_cor2,3) #
library(igraph)
#GM1 <- cor2
#GM1 <- pcor2
GM1 <- directed_cor2
diag(GM1) <- 0
GM3 <- GM1*10 # 一番大きな値が10になるように修正
GM3[GM3<1] <- 0 # 1未満の場合は0にする(非表示にするため)
GM4 <- graph.adjacency(GM3,weighted=T, mode = "undirected")
plot(GM4, edge.width=E(GM4)$weight)
correlation

正規化による有向相関分析

Data2 <- Data
directed_cor201 <- directed_cor2
directed_cor201[,1:n] <-0
for (k in 1:n) {
Data2[,k] <- (Data[,k] - min(Data[,k]))/(max(Data[,k]) - min(Data[,k]))
}
for (i in 1:n) {
for (j in 1:n) {
if(i !=j){
if(directed_cor2[i,j] > 0.1){
directed_cor201[i,j] <- sd(Data2[,j]) / sd(Data2[,i])
if(directed_cor201[i,j] > 1){
directed_cor201[i,j] <- 0
}
if(max(sd(Data2[,j]) , sd(Data2[,i])) < 0.2){
# 有向かを判断できる前提が成り立っていなければ、判断しないようにする
directed_cor201[i,j] <- 0
}
} else {
directed_cor201[i,j] <- 0
}
}
}
}
directed_cor201
GM1 <- ceiling(directed_cor201)
diag(GM1) <- 0
GM6 <- graph.adjacency(GM1,weighted=F, mode = "directed")
plot(GM6)

correlation
元の構造をうまく出せています。



Rによるデータ分析

データサイエンス教室