首页 文章

型号选择 - mclust

提问于
浏览
1

我使用软件包MCLUST在R中进行了潜在的类/聚类分析 . 我对我的论文进行了修改和重新提交,审稿人建议制作一个关于集群解决方案的拟合指数的表格(截至目前我刚刚在文中报告了BIC) . 当我看几篇使用过LCA方法的论文时,他们报告了BIC,样本量调整后的BIC和熵; MCLUST给出的唯一合适的统计数据是BIC . 我可以找到熵图而不是熵统计量 . 对我来说,重新运行我对Mplus的分析有点晚了(我发现这些分析用于这些论文中的LCA) . 坦率地说,使用另一个集群包重新运行我的分析有点晚了 . 从我的所有阅读中可以看出,MCLUST的做法与其他一些k-means集群方法的做法略有不同 . 此外 - 似乎有时会选择具有最低BIC的模型(在某些论文中)但在MCLUST中选择最高的模型?为什么?

所以,tldr;使用MCLUST时,在报告中报告了哪些其他模型选择统计数据?只有bIC是标准/好吗?我该如何证明这一点?

1 回答

  • 2

    只是几个想法,之前曾使用过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手册中简要描述了模型选择的过程:

    mclust提供了一种高斯混合,通过EM算法通过最大似然拟合数据,用于根据BIC选择的模型和组件数量 . 根据参考部分引用的文章中描述的方法,根据熵标准对相应的组件进行分层组合 . 由BIC和一个选择的类之间具有类数的解决方案作为clustCombi类对象返回 .

    查看实际论文以获得详尽解释更有用:

    https://www.stat.washington.edu/raftery/Research/PDF/Baudry2010.pdf或在这里https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2953822/

    由mclust提供的熵图意味着被解释为用于因子分析的scree图(即,通过寻找肘来确定最佳类的数量);我认为scree图可用于证明簇数的选择是合理的,这些图属于附录 .

    除了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
    

相关问题