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で計算できるか調べ中