[尝试使用fviz_cluster()可视化k-medoid(PAM)簇结果,但是函数不接受它们。
它在?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)
以上行产生以下错误:
"Error in array(x, c(length(x), 1L), if (!is.null(names(x))) list(names(x),
:'data' must be of a vector type, was 'NULL'"
[非常感谢您提供反馈/修复,为何不起作用或其他可视化方法。
谢谢:)
这里是fviz_cluster
的文档:
数据:已用于集群的数据。仅当object是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)