【问题标题】:fviz_cluster() not accepting for k-medoid (PAM) resultsfviz_cluster() 不接受 k-medoid (PAM) 结果
【发布时间】:2020-03-02 03:18:59
【问题描述】:

尝试使用 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)

上面一行产生以下错误:

数组中的错误(x, c(length(x), 1L), if (!is.null(names(x))) list(names(x), :'data' 必须是向量类型,为 'NULL'

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

谢谢:)

【问题讨论】:

    标签: r cluster-analysis data-visualization pam


    【解决方案1】:

    我通过在加载数据集时添加row.names=1 解决了这个问题:

    read.csv2("index.csv",header=T, sep=";", dec=",", row.names=1)
    

    【讨论】:

      【解决方案2】:

      这里是fviz_cluster的文档:

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

      因此您只需将pam 的结果传递给fviz_cluster

      这是fviz_clusterpam 的最小示例:

      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)
      

      【讨论】:

      • 即使结果是我提供的唯一参数 fviz_cluster() 我仍然会收到上述错误,是因为它是距离矩阵而不是 df 吗?
      • 所以我只是尝试使用您提供的代码。如果您传递 pam() 参数 diss=T 因为您提供的是距离矩阵而不是 df,则将结果传递给 fviz_cluster() 不起作用rlibrary("factoextra") library("cluster") data("USArrests") res &lt;- pam(USArrests, 4, diss=T) fviz_cluster(res)
      • 我更新了答案以处理传递距离矩阵的情况。
      • 啊甜蜜!谢谢你:) 把所有东西都整理好了
      猜你喜欢
      • 2018-03-12
      • 2023-03-23
      • 1970-01-01
      • 2014-03-04
      • 2021-11-21
      • 2020-05-09
      • 2011-12-01
      • 2021-04-22
      • 2019-03-22
      相关资源
      最近更新 更多