TL;DR: Как использовать библиотеку WeightedCluster
(в частности, метод wcKMedoids()
) в качестве входных данных для heatmap
, heatmap.2
или подобных, чтобы предоставить ей информацию о кластеризации?
Мы создаем тепловую карту из некоторых двоичных данных (значения да/нет, представленные в виде единиц и нулей) в R, и нам нужно настроить веса некоторых строк для кластеризации на основе столбцов.
(они генерируются из категорий с множественным выбором в несколько двоичных строк со значением «да/нет» и, таким образом, перепредставлены).
Я нашел библиотеку WeightedCluster, которая может выполнять кластеризацию с весами.
Теперь вопрос в том, как использовать эту библиотеку (в частности, метод wcKMedoids()
) в качестве входных данных для heatmap
, heatmap.2
или подобных?
Я пробовал следующий код, который приводит к сообщению об ошибке ниже:
library(gplots)
library(WeightedCluster)
dataset <- "
F,T1,T2,T3,T4,T5,T6,T7,T8
A,1,1,0,1,1,1,1,1
B,1,0,1,0,1,0,1,1
C,1,1,1,1,1,1,1,0
D,1,1,1,0,1,1,1,0
E,0,1,0,0,1,0,1,0
F,0,0,1,0,0,0,0,0
G,1,1,1,0,1,1,1,1
H,1,1,0,0,0,0,0,0
I,1,0,1,0,0,1,0,0
J,1,1,1,0,0,0,0,1
K,1,0,0,0,1,1,1,1
L,1,1,1,0,1,1,1,1
M,0,1,1,1,1,1,1,1
N,1,1,1,0,1,1,1,1"
fakefile <- textConnection(dataset)
d <- read.csv(fakefile, header=T, row.names = 1)
weights <- c(1,1,1,1,1,1,1,1,1,1,1,1,1,1)
distf <- function(x) dist(x, method="binary")
wclustf <- function(x) wcKMedoids(distf(x),
k=8,
weights=weights,
npass = 1,
initialclust=NULL,
method="PAMonce",
cluster.only = FALSE,
debuglevel=0)
cluster_colors <- colorRampPalette(c("red", "green"))(256);
heatmap(as.matrix(d),
col=cluster_colors,
distfun = distf,
hclustfun = wclustf,
keep.dendro = F,
margins=c(10,16),
scale="none")
Но запуск дает:
Error in UseMethod("as.dendrogram") :
no applicable method for 'as.dendrogram' applied to an object of class "c('kmedoids', 'list')"
По-видимому, wcKMedoids
не является заменой R hclust
, но кто-нибудь может подсказать, как это обойти?
ОБНОВЛЕНИЕ: Небольшой прогресс, которого я добился до сих пор, указывает на то, что я должен реализовать метод as.dendrogram.kmedoids
, который выдает результат, аналогичный hclust(dist(x))
. (Его вывод можно подробно проверить с помощью dput
: dput(hclust(dist(x)))
). Идеи и указатели приветствуются.