Skip to content

Instantly share code, notes, and snippets.

@zaking331
Last active February 15, 2019 05:58
Show Gist options
  • Save zaking331/c2e34d1523de862308d2af28f6f39a7a to your computer and use it in GitHub Desktop.
Save zaking331/c2e34d1523de862308d2af28f6f39a7a to your computer and use it in GitHub Desktop.
研究室のクラスター分析ゼミ資料です。
#成績データの入力
seiseki<-matrix(c(89,90,67,46,50,57,70,80,85,90,80,90,35,40,50,40,60,50,45,55,78,85,45,55,60,55,65,80,75,85,90,85,88,92,95),7,5,byrow=TRUE)
colnames(seiseki)<-c("算数","理科","国語","英語","社会")
rownames(seiseki)<-c("田中","佐藤","鈴木","本田","川端","吉野","斎藤")
#ユークリッド距離を求める。distは、成績のユークリッド距離を求めている。
seiseki.d<-dist(seiseki)
#小数点以下を丸める
round(seiseki.d)
#階層的クラスターの分析(最遠隣法)
seiseki.d<-dist(seiseki)
#階層的クラスター分岐の関数(hclust) hclust(d,method="complete",...),defaultはcomplete(最遠隣法)
(sei.hc<-hclust(seiseki.d))
#結果のオブジェクトに格納されたデータのリストの呼び出し
summary(sei.hc)
#上からの行番号がクラスター形成の順番,マイナスが個体の番号
sei.hc$merge
#クラスターを形成する樹形図の高さ
sei.hc$height
#樹形図の左から右方向の個体番号が記録される。
sei.hc$order
#樹形図の作成
plot(sei.hc)
#重心法
plot(hclust(seiseki.d,"centroid"),hang=-1)
#ウォード法
plot(hclust(dist(seiseki,"canberra"),"ward"),hang=-1)
#各個体がどのクラスターに属すRかに関する情報が返される。
cutree(sei.hc,k=2)
#コーフェン行列を求める。
cophenetic(sei.hc)
#妥当性を求めるためにユーグリッド距離と最遠隣法によるコーフェン相関係数を求める。相関係数が高ければ、距離行列と用いた方法のコーフェン行列との歪みが小さい。
cor(seiseki.d, cophenetic(sei.hc))
#irisデータから2種類のデータを取り出してキャンベラ距離の群平均法とウォード法の結果を出している。ウォード法は妥当と思われる結果を返す確率が高い。
d<-dist(iris[c(51:60,141:150),1:4],"can")
ha<-hclust(d,"average")
hw<-hclust(d,"ward")
cor(cophenetic(ha),d)
cor(cophenetic(hw),d)
plot(ha,main="キャンベラ距離",群平均法,cop-cor=0.8057",cex=1.2,hang=-1)
plot(h2,main="キャンベラ距離",ウォード法,cop-cor=0.608",cex=1.2,hang=-1)
#コーフエン相関係数は、ウォード法が群平均法より低い。
#k-means法
#kmeasn(x, centers, iter.max=10,nstart = 1,algorithm =c("Hartigan-Wong","Lloyd","Forgy","MacQueen")),defaultはHartigan-Wongが指定
#クラスターの数を2つに指定,Hartigan-Wong法がその他の方法をよりよいと言われている。
(seiseki.km<-kmeans(seiseki,2))
summary(seiseki.km)
#kmeans法による分類結果と各クラスのサイズ
seiseki.km$cluster
#階層的クラスター分析と
#Rがupdateされてないとできない?-今回はpassで!
#モデルの選択と解析,混合分布によるクラスター分析,潜在クラスター分析とも呼ばれる。
#モデルに基づいたクラスター分析は、観測データが異なる確率分布による混合分布であると仮定し、個体が属するクラスのラベルをも隠れ変数として推定。
install.packages("mclust");library(mclust)
#hclassを用いるために、EMclustを用いてクラスターの数を推測。BICの折れ線グラフを作成(R上では1を選択)。
plot(Mclust(iris[,1:4]))
#VVVモデルを選択
iris.hc<-hc(modelName = "VVV", data= iris[,1:4])
#クラスターの数を3つとした
iris.hcl<-hclass(iris.hc,3)
tatable(iris[,5],iris.hcl)
#散布図の作成
clPairs(iris[,1:4],cl=iris.hcl)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment