fviz_cluster() 不接受 k-medoid (PAM) 结果

mad*_*d-a 3 r data-visualization cluster-analysis pam

尝试使用 可视化 k-medoid (PAM) 聚类结果fviz_cluster(),但是函数不接受它们。

它指出内?fviz_clust“对象参数=类的一个对象‘分区’由函数创建pam()clara()fanny()在集群包”

我尝试通过其他方式访问聚类向量;

pam_gower_2$clustering
pam_gower_2[[3]]

Run Code Online (Sandbox Code Playgroud)

但后来我得到一个单独的错误:

错误:$ 运算符对原子向量无效”

pam_gower_2 的类是分区?正如论证所期望的那样。

class(pam_gower_2)
> class(pam_gower_2)
[1] "pam"       "partition"
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的代码:

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)
Run Code Online (Sandbox Code Playgroud)

以上行产生以下错误:

数组错误(x, c(length(x), 1L), if (!is.null(names(x))) list(names(x), :'data' must be a vector type, is 'NULL '

非常感谢反馈/修复,为什么这不起作用的原因,或可视化的替代方法。

谢谢 :)

Sta*_*ieu 6

这里是文档fviz_cluster

数据:已用于聚类的数据。仅当对象是 kmeans 或 dbscan 类时才需要。

因此,您只需要通过结果pamfviz_cluster

这是fviz_clusterwith 的一个最小示例pam

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

data("USArrests")
res <- pam(USArrests, 4)
fviz_cluster(res)
Run Code Online (Sandbox Code Playgroud)

如果您使用pam距离矩阵应用,则会出现错误。解决方法是在之后设置data结果字段。这是使用距离矩阵 ( diss)的修改示例:

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

data("USArrests")

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

res$data = USArrests
fviz_cluster(res)
Run Code Online (Sandbox Code Playgroud)