如果一个变量“太恒定”,R Mclust(data, G = 1) 会给出奇怪的 Sigma 输出?

问题描述

我正在尝试使用 MClust(,G = 1) 来估计假定单正态分布的值的 Mu 和协方差。我认为它大部分时间都可以正常工作。但是,如果其中一个变量包含一个重复的常量(例如全 0、全 5 等),它会以一种我不明白的方式影响协方差。

例如,在下面的代码中,引入 D 列,更改了 Sigma,因此出于某种原因它们都相等。如果我改变 D 中的一个值,事情就会回到更多的预期值。根据行数,有时需要更改 1 个以上的样本。

对此有原因或解释吗?我试图更好地理解它,以便我可以预测在我的变量之一碰巧“太恒定”的情况下如何避免它。如果它是可预测的,我可能会使用一些逻辑来手动删除变量,分析为单变量并将其放回等

测试演示:

library(mclust)    
testing <- data.frame(A = runif(100,-5.0,10.0),B = runif(100,-7.5,5.0),C = runif(100,D = rep(0,100))
testing$B <- testing$B + testing$A
testing$C <- testing$C - testing$B

使用 3 个典型变量:

testing_OP <- Mclust(testing[,1:3],G = 1)
testing_OP$parameters$variance$Sigma
testing_OP$parameters$mean

输出

      A         B         C
A  19.73553  19.58861 -19.75416
B  19.58861  31.11929 -31.57945
C -19.75416 -31.57945  39.59255

   [,1]
A  3.086933
B  2.133667
C -1.980933

添加“太恒定”变量:

testing_OP <- Mclust(testing,G = 1)
testing_OP$parameters$variance$Sigma
testing_OP$parameters$mean

输出

         A        B        C        D
A 22.61184  0.00000  0.00000  0.00000
B  0.00000 22.61184  0.00000  0.00000
C  0.00000  0.00000 22.61184  0.00000
D  0.00000  0.00000  0.00000 22.61184

       [,1]
A  3.086933
B  2.133667
C -1.980933
D  0.000000

稍微改变“太恒定”变量:

testing$D[100] = 1
testing_OP <- Mclust(testing,G = 1)
testing_OP$parameters$variance$Sigma
testing_OP$parameters$mean

输出

             A            B            C           D
A  19.73552599  19.58861034 -19.75416206  0.04663097
B  19.58861034  31.11928871 -31.57945373  0.03878541
C -19.75416206 -31.57945373  39.59255338 -0.06956324
D   0.04663097   0.03878541  -0.06956324  0.00990000

       [,1]
A  3.086933
B  2.133667
C -1.980933
D  0.010000

解决方法

拟合后应该总是检查 BIC 选择的模型,所以如果我们在没有最后一个常量列的情况下运行它:

set.seed(111)
testing <- data.frame(A = runif(100,-5.0,10.0),B = runif(100,-7.5,5.0),C = runif(100,D = rep(0,100))
testing$B <- testing$B + testing$A
testing$C <- testing$C - testing$B

testing_OP <- Mclust(testing[,1:3],G = 1)

testing_OP$BIC
Bayesian Information Criterion (BIC): 
        EII       VII       EEI       VEI       EVI       VVI       EEE
1 -1895.339 -1895.339 -1883.817 -1883.817 -1883.817 -1883.817 -1655.214
        VEE       EVE       VVE       EEV       VEV       EVV       VVV
1 -1655.214 -1655.214 -1655.214 -1655.214 -1655.214 -1655.214 -1655.214

Top 3 models based on the BIC criterion: 
    EEE,1     EEV,1     EVE,1 
-1655.214 -1655.214 -1655.214 

如果您的变量之一是常数,则不太可能计算常数变量与其他变量之间的协方差,从而导致许多模型无效:

testing_OP$BIC
Bayesian Information Criterion (BIC): 
        EII       VII EEI VEI EVI VVI EEE VEE EVE VVE EEV VEV EVV VVV
1 -2410.511 -2410.511  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA

Top 3 models based on the BIC criterion: 
    EII,1     VII,1           
-2410.511 -2410.511        NA

您只剩下 EII 和 VII 模型,来自 the help page it would be

“EII”球形,等体积

“VII”球形,不等体积

因此,您还可以在非常量列上运行 EII 或 VII 模型,并获得相同的形状:

Mclust(testing[,G = 1,model="EII")$parameters$variance$Sigma

         A        B        C
A 30.52413  0.00000  0.00000
B  0.00000 30.52413  0.00000
C  0.00000  0.00000 30.52413

如果你有一列是常数,从它估计高斯分布是没有意义的,更不用说多元高斯分布了

,

包含常量“变量”意味着协方差矩阵对于包括常量在内的任何一对变量都将具有 0。实际上,在混合模型(例如,使用 Mclust 创建的模型)中包含常量是没有意义的。