R 型号选择-mclust

R 型号选择-mclust,r,cluster-analysis,model-comparison,R,Cluster Analysis,Model Comparison,我使用MCLUST包在R中进行了潜在类/聚类分析。我对我的论文进行了修改和重新提交,评审员建议为集群解决方案制作一个拟合指数表(到目前为止,我刚刚在文本中报告了BIC)。当我看一些使用LCA方法的论文时,他们报告了BIC、样本量调整的BIC和熵;MCLUST给出的唯一拟合统计是BIC。我能找到熵图,但不能找到熵统计。对我来说,重新运行MPLU分析(我发现这些论文中的LCA使用了MPLU)有点晚了。坦率地说,使用另一个集群包重新运行我的分析有点晚了。从我所有的阅读来看,听起来MCLUST做的事情与

我使用MCLUST包在R中进行了潜在类/聚类分析。我对我的论文进行了修改和重新提交,评审员建议为集群解决方案制作一个拟合指数表(到目前为止,我刚刚在文本中报告了BIC)。当我看一些使用LCA方法的论文时,他们报告了BIC、样本量调整的BIC和熵;MCLUST给出的唯一拟合统计是BIC。我能找到熵图,但不能找到熵统计。对我来说,重新运行MPLU分析(我发现这些论文中的LCA使用了MPLU)有点晚了。坦率地说,使用另一个集群包重新运行我的分析有点晚了。从我所有的阅读来看,听起来MCLUST做的事情与其他k-means集群方法略有不同。 此外,似乎有时会选择BIC最低的模型(在某些论文中),但在MCLUST中,会选择BIC最高的模型吗?为什么?


因此,tldr;当使用MCLUST时,在报告中还报告了哪些其他型号选择统计信息?有bIC是标准的/可以的吗?我如何证明这一点呢?

只是一些想法,之前使用过mclust

1) mclust使用正确的BIC选择方法;见此帖:

见最底部,但总结一下,对于BIC,取决于您是否在公式中使用负号,是否优化低与高:

BIC的一般定义如下: 比克=−2×ln(L(θ| x))+k×ln(n)BIC=−2×ln(L(θ| x))+k×ln(n);麦克卢斯特没有 包括负面因素

2) mclust使用混合模型进行聚类(即基于模型);它与k-means有很大的不同,所以我会小心措辞,它“与其他k-means集群方法有一点不同”(这里主要是指“其他”的含义);mclust手册中简要介绍了型号选择过程:

对于根据BIC选择的模型和组件数量,mclust通过EM算法通过最大似然法为数据提供高斯混合。按照参考文献部分引用的文章中描述的方法,根据熵标准将相应的组件分层组合。BIC选择的类数与一个类数之间的解作为clustCombi类对象返回

更有用的是查看实际的论文以获得全面的解释:

还是在这里

mclust提供的熵图被解释为因子分析的scree图(即,通过寻找弯头来确定最佳类数);我认为,对于证明集群数量选择的合理性,scree图是有用的,这些图属于附录

除BIC外,mclust还返回ICL统计数据,因此您可以选择向审核人报告:

(请参见如何使其输出统计信息的示例)

3) 如果要创建entPlot值表,可以这样提取它们(从?entPlot示例中):

##未运行:
数据(Baudry_etal_2010_JCGS_示例)
#运行Mclust以获取Mclust输出
输出
## 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