fviz_cluster() 不接受 k-medoid (PAM) 结果
fviz_cluster() not accepting for k-medoid (PAM) results
尝试使用 fviz_cluster()
可视化 k-medoid (PAM) 聚类结果,但函数不接受它们。
它在 ?fviz_clust
中声明“对象参数 = class 由函数 pam()
、clara()
或 fanny()
创建的“分区”的对象集群包
我试过通过其他方式访问聚类向量;
pam_gower_2$clustering
pam_gower_2[[3]]
但随后我得到一个单独的错误:
Error: $ operator is invalid for atomic vectors"
pam_gower_2的class是分区?正如论点所期望的那样。
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
的文档:
data: the data that has been used for clustering. Required only when object is a class of kmeans or 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)
我已经通过在加载数据集时添加 row.names=1
解决了这个问题:
read.csv2("index.csv",header=T, sep=";", dec=",", row.names=1)
尝试使用 fviz_cluster()
可视化 k-medoid (PAM) 聚类结果,但函数不接受它们。
它在 ?fviz_clust
中声明“对象参数 = class 由函数 pam()
、clara()
或 fanny()
创建的“分区”的对象集群包
我试过通过其他方式访问聚类向量;
pam_gower_2$clustering
pam_gower_2[[3]]
但随后我得到一个单独的错误:
Error: $ operator is invalid for atomic vectors"
pam_gower_2的class是分区?正如论点所期望的那样。
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
的文档:
data: the data that has been used for clustering. Required only when object is a class of kmeans or 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)
我已经通过在加载数据集时添加 row.names=1
解决了这个问题:
read.csv2("index.csv",header=T, sep=";", dec=",", row.names=1)