Как сделать график сгруппированных логических переменных в 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

Цель состоит в том, чтобы переупорядочить строки таким образом, чтобы группы с похожими шаблонами членства было легче идентифицировать визуально.

Я подумал, что какой-то алгоритм кластеризации, вероятно, будет подходящим, но я не уверен, какие функции использовать или как это сделать.

В идеале таблица должна быть представлена ​​в виде шахматной доски. С заштрихованными квадратами для того, является ли каждая точка истинной или ложной.


person Henry E    schedule 27.02.2016    source источник


Ответы (1)


Это решение использует иерархическую кластеризацию для изменения порядка переменных. Стоит отметить, что это плохо масштабируется при большом количестве наблюдений из-за того, что матрицы несходства становятся слишком большими. Альтернативный алгоритм для многих наблюдений был предложен в этом ответе, но я не полностью его понял и не видел, как реализовать это основано на упомянутой главе.

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()

введите здесь описание изображения

person Henry E    schedule 27.02.2016