只是几个想法,之前使用过 mclust。
1)mclust使用正确的BIC选择方法;看到这个帖子:
https://stats.stackexchange.com/questions/237220/mclust-model-selection
看到最底部,但总结起来,使用 BIC 取决于您是否在公式中使用负号,是否优化低与高:
BIC的一般定义为BIC=−2×ln(L(θ|x))+k×ln(n)BIC=−2×ln(L(θ|x))+k×ln(n);mclust 不包括负面成分。
2) mclust 使用混合模型进行聚类(即基于模型的);它与 k-means 完全不同,所以我会小心措辞,即它“与其他一些 k-means 集群方法略有不同”(主要是这里的“其他”暗示);mclust手册中简要描述了模型选择的过程:
对于根据 BIC 选择的模型和组件数量,mclust 通过 EM 算法通过最大似然度提供适合数据的高斯混合。根据参考文献部分引用的文章中描述的方法,根据熵标准分层组合相应的组件。具有在 BIC 选择的一个和一个之间的类数的解决方案作为 clustCombi 类对象返回。
查看实际论文以获得全面的解释更有用:
https://www.stat.washington.edu/raftery/Research/PDF/Baudry2010.pdf
或在这里https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2953822/
mclust 提供的熵图被解释为因子分析的碎石图(即,通过寻找肘部来确定最佳类别数);我认为碎石图对于证明选择集群数量的合理性很有用,这些图属于附录。
除了 BIC 之外,mclust 还返回 ICL 统计信息,因此您可以选择将其报告给审阅者作为妥协:
https://cran.r-project.org/web/packages/mclust/vignettes/mclust.html(参见示例,了解如何让它输出统计信息)
3)如果你想创建一个 entPlot 值的表,你可以像这样提取它们(来自 ?entPlot 示例):
## Not run:
data(Baudry_etal_2010_JCGS_examples)
# run Mclust to get the MclustOutput
output <- clustCombi(ex4.2, modelNames = "VII")
entPlot(output$MclustOutput$z, output$combiM, reg = c(2,3))
# legend: in red, the single-change-point piecewise linear regression;
# in blue, the two-change-point piecewise linear regression.
# added code to extract entropy values from the plot
combiM <- output$combiM
Kmax <- ncol(output$MclustOutput$z)
z0 <- output$MclustOutput$z
ent <- numeric()
for (K in Kmax:1) {
z0 <- t(combiM[[K]] %*% t(z0))
ent[K] <- -sum(mclust:::xlog(z0))
}
data.frame(`Number of clusters` = 1:Kmax, `Entropy` = round(ent, 3))
Number.of.clusters Entropy
1 1 0.000
2 2 0.000
3 3 0.079
4 4 0.890
5 5 6.361
6 6 20.158
7 7 35.336
8 8 158.008