2

MClust(, G = 1) を使用して、単一の正規分布を仮定して、値の Mu と Covariance を推定しようとしています。ほとんどの場合、問題なく動作すると思います。しかし、変数の 1 つが繰り返される定数 (たとえば、すべて 0、すべて 5 など) で構成されている場合、それは私には理解できない方法で共分散に影響を与えます。

たとえば、次のコードでは、列 D を導入すると、何らかの理由ですべてが等しくなるように Sigma が変更されます。D の 1 つの値を変更すると、より多くの期待値に戻ります。行数によっては、複数のサンプルを変更する必要がある場合があります。

これには理由や説明がありますか?私はそれをよりよく理解しようとしているので、変数の1つがたまたま「一定」である場合にそれを回避する方法を予測できます. 予測可能な場合は、いくつかのロジックを使用して変数を手動で削除し、単変量として分析して元に戻すことができます。

テストデモ:

library(mclust)    
testing <- data.frame(A = runif(100, -5.0, 10.0), 
                      B = runif(100, -7.5, 5.0), 
                      C = runif(100, -5.0, 5.0), 
                      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
4

2 に答える 2