调用NbClust()
时出现以下错误:
NbClust(data = ds [,sapply(ds,is.numeric)],diss = NULL,距离=“ euclidean”,中的错误:TSS矩阵是不确定的。必须有太多的缺失值。索引不能计算。
在运行NbClust之前,我已经致电ds <- ds[complete.cases(ds),]
,所以不会丢失任何值。
知道这个错误的根源是什么吗?
谢谢
答案 0 :(得分:0)
@seni导致此错误的原因与数据有关。如果您查看此函数的源代码,
NbClust <- function(data, diss="NULL", distance = "euclidean", min.nc=2, max.nc=15, method = "ward", index = "all", alphaBeale = 0.1)
{
x<-0
min_nc <- min.nc
max_nc <- max.nc
jeu1 <- as.matrix(data)
numberObsBefore <- dim(jeu1)[1]
jeu <- na.omit(jeu1) # returns the object with incomplete cases removed
nn <- numberObsAfter <- dim(jeu)[1]
pp <- dim(jeu)[2]
TT <- t(jeu)%*%jeu
sizeEigenTT <- length(eigen(TT)$value)
eigenValues <- eigen(TT/(nn-1))$value
for (i in 1:sizeEigenTT)
{
if (eigenValues[i] < 0) {
print(paste("There are only", numberObsAfter,"nonmissing observations out of a possible", numberObsBefore ,"observations."))
stop("The TSS matrix is indefinite. There must be too many missing values. The index cannot be calculated.")
}
}
我认为,此错误的根本原因是当簇数很高时,即max.nc
很高时,渗入的负特征值。因此,要解决该问题,您必须查看您的数据。看看是否有更多的列然后行。删除缺失值,检查共线性和多重共线性,方差,协方差等问题。
对于另一个错误invalid clustering method
,请查看方法here的源代码。查看给定链接中的行号168, 169
。您收到此错误消息,因为聚类方法为空。 if (is.na(method))
stop("invalid clustering method")
答案 1 :(得分:0)
我在研究中遇到了同样的问题。 因此,我已邮寄给包裹维护者Nadia Ghazzali,并得到了答复。 我将附上我的邮件和她的回复。
我的电子邮件:
亲爱的娜迪亚·加扎里(Nadia Ghazzali)。你好纳迪亚。我有一些疑问 R库中的NbClust函数。我曾尝试使用Google搜索,但无法 找到满意的答案。首先,我非常感谢您 这个糟糕的R库。这对我的研究非常有帮助。我测试了 NbClust库中的NbClust函数具有我自己的数据,如下所示。
> clust <- NbClust(data, distance = “euclidean”, min.nc = 2, max.nc = 10, method = ‘kmeans’, index =”all”)
但是很快,发生了一个错误。错误:被零除!错误中 WBT(x = jeu,cl = cl1,P = TT,s = ss,vv = vv):对象 找不到“斯科特”,所以我逐行尝试了NbClust函数,然后 发现一些指数,例如 CCC,Scott,mariort,tracecovw, 由于对象原因,未计算tracew,friedman和rubin vv =0。我对代数不是很熟悉,所以我不知道意思 本征值。但在我看来,对象ss( 保护后,eigenValues)不应为0。 所以,这是我的问题。 我认为我的数据太稀疏(很多零值),导致sqrt(eigenValues)变得太小了,对吗?对不起,我 无法附加我的数据,但可以附加eigenValues的一部分,并且 平方本征值。
> head(eigenValues) [1] 0.039769880 0.017179826 0.007011972 0.005698736 0.005164871 0.004567238 > head(sqrt(eigenValues)) [1] 0.19942387 0.13107184 0.08373752 0.07548997 0.07186704 0.06758134
如果我的假设正确,那么该怎么办?只有一个 掉7个指数的方法? 感谢您的阅读,我们将等待您的回复。最好的问候!
和她的回复:
亲爱的汉索尔,
感谢您的关注。是的,您的理解很好。 不幸的是,这七个索引无法应用。
最诚挚的问候,
Nadia Ghazzali
答案 2 :(得分:-2)
确保还删除所有常量和重复的列。
您确定这是适合您数据的聚类方法吗?