使用 mclust或其他包优化高斯混合的聚类并找到最大的聚类

问题描述

我的问题是我有一项研究结果,我想找到最大的集群并将其绘制为高斯分布。 我用 mclust 和 flexmix 包尝试了不同的东西,但有时最大的集群似乎不对。 所以,我希望这里有人可以帮助我优化我的代码

对于可重现的示例,我使用 rnorm() 创建了数据,因为我无法上传数据。

示例:

library(mclust)
set.seed(42)
dat <- c(rnorm(15000,50,2),rnorm(3000,52,1),rnorm(1000,55,rnorm(500,60,rnorm(50,4),45,rnorm(250,40,4))
mc <- densityMclust(dat,modelNames="V",warn = FALSE,G=1:9)
mat <- matrix(0,mc$G,3)
colnames(mat) <- c("mean","sd","proportion")
for (i in 1 : mc$G){
  mat[i,1] <- mc$parameters$mean[i]
  mat[i,2] <- sqrt(mc$parameters$variance$sigmasq[i])
  mat[i,3] <- mc$parameters$pro[i]
}
max <- which.max(mat[,3])
results_of_max <- mat[max,1 : 3]

d <- density(dat)
d1 <- dnorm(d$x,results_of_max[1],results_of_max[2])* results_of_max[3]
plot(d$x,d$y,type = "l",xlab = "result",ylab = "density")
lines(d$x,d1,col = "red",lwd = 2)

这是我得到的结果:

enter image description here

但我想要的更多是这样的:

enter image description here

这只是一个例子。我知道我创建这个例子的方式可能会导致这个结果,但我只是想说明我的问题。 我有几个数据集。有时 mclust 会找到最大的集群,但有时结果会有点偏差,就像我的例子一样。我拥有的数据集是相似的,但高斯分布的形状和大小可能会有所不同。我需要找到一个可以用于所有数据集并始终获得满意结果的解决方案。

我喜欢设置 modelNames="V" 因为高斯分布的方差可能会有所不同,如果可能的话,我想设置 G=1:9,因为我知道我的数据有一个大集群,但也有几个更小的集群

所以我的问题是,我可以用这个函数做些什么来保证我总是得到我想要的结果,还是有其他包可以更好地解决我的问题?

我知道最大的集群至少拥有所有数据的 70%。 我可以将其用作知识来获得我想要的东西,还是可以使用该模式以某种方式优化我的代码

任何帮助将不胜感激。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)