Rのclue(Cluster ensembles)パッケージの使い方(1)

Rのclueパッケージを使って、クラスター分析の手法ごとの類似度を調べてみました。
文法:

library(clue)
Data <- dist(Data)
hclust_methods <- c("ward", "single", "complete",
"average","mcquitty", "median", "centroid")
hclust_results <- lapply(hclust_methods, function(m) hclust(Data,m))
names(hclust_results) <- hclust_methods
hens <- cl_ensemble(list = hclust_results)
plot(hens, main = names(hens)) #各方法のデンドログラムの出力
round(cl_dissimilarity(hens, method = "gamma"), 4) #相関行列の出力

今回はクラスター分析のward法、single法、complete法、average法、mcquitty法、median法、centroid法を指定しています。

実行結果:

ward single complete average mcquitty median
single 0.5796
complete 0.2375 0.6251
average 0.3339 0.3154 0.4149
mcquitty 0.4242 0.4279 0.5088 0.1944
median 0.5739 0.3811 0.5729 0.4556 0.5123
centroid 0.6057 0.2454 0.6336 0.3823 0.4478 0.3617

この表は方法間の相違を示し、値が小さくなるほど、その2つの方法は似ていることを表している。
例えば今回の実行結果では、average法とmcquitty法が一番似ていることがわかる。

その1

ベイジアンネットワークをR既存のデータに当てはめてみた.

低体重児のデータを使用した.

library(MASS)
data(birthwt)
help(birthwt)
head(birthwt,n=10)

簡便化のためデータ加工

data<-birthwt
head(data)

data$体重<-factor(data$low,levels=c(0,1),
labels=c("正常", "異常"),ordered=FALSE)
data$喫煙<-factor(data$smoke,levels=c(0,1),
labels=c("喫煙", "非喫煙"),ordered=FALSE)
data$過敏<-factor(data$ui,levels=c(0,1),
labels=c("過敏あり", "過敏なし"),ordered=FALSE)
data$高血圧<-factor(data$ht,levels=c(0,1),
labels=c("高血圧あり", "高血圧なし"),ordered=FALSE)
data$人種<-factor(data$race,levels=c(1,2,3),
labels=c("白人", "黒人","その他"),ordered=FALSE)
#変数のドロップ
data<-data[, !(colnames(data) %in% c("low", "age",
"lwt","race","smoke","ptl","ht","ui","ftv","bwt"))]

以上のデータにベイジアンネットワークを使用した.

library(deal)#dealを読み込み
pr_net<-network(data)#事前ネットワーク(初期ネットワークを作成)
pr_dist<-jointprior(pr_net)#事前分布(初期モデルの事前分布)
dist_renew<-learn(pr_net,data,pr_dist)#事前ネットワークとデータ,事前分布に基づいてパラメータの分布の更新
pr_net2<-getnetwork(dist_renew)#ネットワークに関係する部分を取り出す

有向辺の制約を設ける
例えば,この例では,低体重児の原因を探りたいため,体重の変数からは,他の要因にベクトルは向かない.
人種への影響を与えるものはない.etc
行列によって,制約を設ける.

banlist(pr_net2) <- matrix(c("1","2","1","3","1","4","1","5","2","5","3","5","4","5"),
ncol=2,nrow=7,byrow=T)#有向辺の制約

ベイジアンネットワークを描く

pos_net <- autosearch(pr_net2,data,pr_dist)

net <- getnetwork(pos_net)
localprob(net)

条件付き確率+ベイジアンネットワークが描ける

例えば,白人,高血圧あり,過敏あり,喫煙,低体重の確率をRで計算できるか調べ中