1

我有一個完全由布爾變量組成的數據集。完全像下面的轉化動物數據集一樣,只有更多的列。如何在R中創建聚集布爾變量的圖形?

# http://stats.stackexchange.com/questions/27323/cluster-analysis-of-boolean-vectors-in-r 
library(cluster) 
head(mona(animals)[[1]]) 

    war fly ver end gro hai 
ant 0 0 0 0 1 0 
bee 0 1 0 0 1 1 
cat 1 0 1 0 0 1 
cpl 0 0 0 0 0 1 
chi 1 0 1 1 1 1 
cow 1 0 1 0 1 1 

目標是重新排列行,使得類似成員資格模式的分組更易於在視覺上進行識別。

我覺得某種聚類算法可能是要走的路,但我不確定究竟要使用什麼函數或如何去精確定位它。

理想情況下,表格可以作爲一種棋盤格。用陰影正方形表示每個點是真還是假。

回答

1

該解決方案使用層次聚類重新排列變量。值得注意的是,由於不相似矩陣越來越大,這不能很好地進行大量的觀察。 this答案中提出了許多觀察的替代算法,但我沒有完全理解它,或者根據參考章節瞭解如何實現它。

library(cluster) 
library(reshape2) 
library(ggplot2) 

# testing that it works using the categorical animals dataset 
adData <- mona(animals)$data 

# import the data, encoded with 0s and 1s for membership 
# adData <- read.csv('adData.csv') 

# clustering based off this answer https://stats.stackexchange.com/a/48364 
# create a dissimilarity matrix 
disimilarAdData <- daisy(adData) 

# hierarchically cluster by dissimilarity 
clusteredAdData <- agnes(disimilarAdData) 

# reorder the rows by dissimilarity 
orderedAdData <- adData[clusteredAdData[[1]], ] 

# make it logical data type for better graphing 
plotData <- sapply(as.data.frame(orderedAdData), as.logical) 
row.names(plotData) <- row.names(orderedAdData) 

# plot graph using shaded rows 
# http://stackoverflow.com/questions/21316363/plot-and-fill-chessboard-like-area-and-the-similars-in-r 
ggplot(melt(plotData), aes(x=Var2, y=Var1, fill=value)) + geom_tile() 

enter image description here