NbClust中的错误:没有足够的对象进行聚类

时间:2017-06-28 10:15:25

标签: r grouping cluster-analysis hclust

我正在尝试使用R中的NbClust方法,根据Manning中的方法,确定聚类分析中的最佳聚类数。 但是,我收到一条错误消息:

  

hclust中的错误(md,method =“average”):必须有n> = 2个对象才能   群集。

尽管hclust方法似乎有效。因此,我假设问题是(也是由错误消息说明),NbClust试图创建只有一个对象的组。

我的数据集可以找到here,这是我的代码:

mydata = read.table("PLR_2016_WM_55_5_Familienstand_aufbereitet.csv", skip = 0, sep = ";", header = TRUE)

mydata <- mydata[-1] # Without first line (int)
data.transformed <- t(mydata) # Transformation of matrix
data.scale <- scale(data.transformed) # Scaling of table
data.dist <- dist(data.scale) # Calculates distances between points

fit.average <- hclust(data.dist, method = "average")
plot(fit.average, hang = -1, cex = .8, main = "Average Linkage Clustering")

library(NbClust)
nc <- NbClust(data.scale, distance="euclidean", 
          min.nc=2, max.nc=15, method="average") 

我发现了类似问题here,但我无法调整代码。

1 个答案:

答案 0 :(得分:2)

您的数据集中存在一些问题 最后4行不包含数据,必须删除。

mydata <- read.table("PLR_2016_WM_55_5_Familienstand_aufbereitet.csv", skip = 0, sep = ";", header = TRUE)
mydata <- mydata[1:(nrow(mydata)-4),]
mydata[,1] <- as.numeric(mydata[,1])

现在重新缩放数据集:

data.transformed <- t(mydata) # Transformation of matrix
data.scale <- scale(data.transformed) # Scaling of table

由于某种原因,data.scale不是完整的排名矩阵:

dim(data.scale)
# [1]  72 447
qr(data.scale)$rank
# [1] 71

因此,我们从data.scale删除一行并转置它:

data.scale <- t(data.scale[-72,])

现在数据集已准备好NbClust

library(NbClust)
nc <- NbClust(data=data.scale, distance="euclidean", 
          min.nc=2, max.nc=15, method="average") 

输出

[1] "Frey index : No clustering structure in this data set"
*** : The Hubert index is a graphical method of determining the number of clusters.
                In the plot of Hubert index, we seek a significant knee that corresponds to a 
                significant increase of the value of the measure i.e the significant peak in Hubert
                index second differences plot. 

*** : The D index is a graphical method of determining the number of clusters. 
                In the plot of D index, we seek a significant knee (the significant peak in Dindex
                second differences plot) that corresponds to a significant increase of the value of
                the measure. 

******************************************************************* 
* Among all indices:                                                
* 8 proposed 2 as the best number of clusters 
* 4 proposed 3 as the best number of clusters 
* 8 proposed 4 as the best number of clusters 
* 1 proposed 5 as the best number of clusters 
* 1 proposed 8 as the best number of clusters 
* 1 proposed 11 as the best number of clusters 

                   ***** Conclusion *****                            

* According to the majority rule, the best number of clusters is  2 

******************************************************************* 

enter image description here