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)))). Идеи и указатели приветствуются.
