fviz_cluster() не принимает результаты k-medoid (PAM)

Попытка визуализировать результаты кластера k-medoid (PAM) с помощью fviz_cluster(), однако функция их не принимает.

Он указывает в аргументе объекта ?fviz_clust = объект раздела класса, созданный функциями pam(), clara() или fanny() в пакете кластера.

Я пытался получить доступ к вектору кластеризации другими способами;

pam_gower_2$clustering
pam_gower_2[[3]]

но тогда я получаю отдельную ошибку:

Ошибка: оператор $ недействителен для атомарных векторов

Класс pam_gower_2 является разделом? Как и ожидал аргумент.

class(pam_gower_2)
> class(pam_gower_2)
[1] "pam"       "partition"

Вот код, который я использую:

df_gower <- df[, c(2:21)] 
df_gower <- df_gower[, c(1:4, 11:12, 14:15, 5:10, 16:20)] 

gower_dist <- daisy(df_gower, metric="gower", type=list(ordratio=c(2:4, 6), symm=c(7:8), asymm=c(5), logratio=c(13)))

gower_mat <- as.matrix(gower_dist)
tendency_gower <- get_clust_tendency(gower_mat, 100, graph=T)
tendency_gower$hopkins_stat

fviz_nbclust(gower_mat, pam, method="wss")
fviz_nbclust(gower_mat, pam, method="silhouette")

pam_gower_2 <- pam(gower_mat, k=2, diss=T)

# all of the above functions as expected

fviz_cluster(pam_gower_2, gower_mat)

строка выше выдает следующую ошибку:

Ошибка в массиве (x, c (длина (x), 1L), если (! is.null (имена (x))) список (имена (x), : 'данные' должны быть векторного типа, было 'NULL '

Буду очень признателен за отзыв/исправление, причины, по которым это не работает, или альтернативный метод визуализации.

Спасибо :)


person mad-a    schedule 05.11.2019    source источник


Ответы (2)


Вот документация fviz_cluster:

data: данные, которые использовались для кластеризации. Требуется, только если объект является классом kmeans или dbscan.

Поэтому вам нужно только передать результаты pam в fviz_cluster.

Вот минимальный пример fviz_cluster с pam:

library("factoextra")
library("cluster")

data("USArrests")
res <- pam(USArrests, 4)
fviz_cluster(res)

Если вы применяете pam с матрицей расстояний, у вас есть ошибка. Обходной путь состоит в том, чтобы впоследствии установить поле data результата. Вот модифицированный пример с использованием матрицы расстояний (diss):

library("factoextra")
library("cluster")

data("USArrests")

diss = dist(USArrests)
res <- pam(diss, 4)

res$data = USArrests
fviz_cluster(res)
person Stanislas Morbieu    schedule 05.11.2019
comment
даже если результат является единственным аргументом, который я предоставляю fviz_cluster(), я все равно получаю вышеуказанные ошибки, потому что это матрица расстояний, а не df или что-то в этом роде? - person mad-a; 05.11.2019
comment
Поэтому я просто попытался использовать предоставленный вами код. Если вы передаете pam() параметр diss=T, потому что вы предоставляете матрицу расстояний, а не df, передача результата в fviz_cluster() не работает rlibrary("factoextra") library("cluster") data("USArrests") res <- pam(USArrests, 4, diss=T) fviz_cluster(res) - person mad-a; 05.11.2019
comment
Я обновил ответ, чтобы обработать случай, когда вы передаете матрицу расстояний. - person Stanislas Morbieu; 05.11.2019
comment
Ах, сладкий! Спасибо за это :) Полностью разобрался со всем - person mad-a; 05.11.2019

Я решил эту проблему, добавив row.names=1 при загрузке набора данных:

read.csv2("index.csv",header=T, sep=";", dec=",", row.names=1)
person Carolina Macovei    schedule 08.09.2020