如果一个变量是 'too constant',R Mclust(data, G = 1) 给出奇怪的 Sigma 输出?
R Mclust(data, G = 1) giving weird Sigma outputs if one variable is 'too constant'?
我正在尝试使用 MClust(, G = 1) 估计单正态分布的值的 Mu 和协方差。我认为它在大多数时候都很好用。但是,如果其中一个变量由重复常量组成(例如全 0、全 5 等),它会以我不理解的方式影响协方差。
例如,在下面的代码中,引入了 D 列,更改了 Sigma,以便它们出于某种原因都相等。如果我改变 D 中的一个值,事情会回到更多的预期值。根据行数,有时需要更改 1 个以上的样本。
这有什么原因或解释吗?我试图更好地理解它,以便在我的变量之一恰好是 'too constant' 的情况下预测如何避免它。如果它是可预测的,我也许可以使用一些逻辑来手动删除变量,分析为单变量并将其放回等等
测试演示:
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
添加 'too constant' 变量:
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
稍微更改 'too constant' 变量:
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
包括常量“变量”意味着协方差矩阵对于包括常量在内的任何一对变量都将为 0。实际上,在混合模型中包含常量没有意义(例如,使用 Mclust
创建的模型)。
在你拟合之后应该总是检查 BIC 选择的模型,所以如果我们 运行 它没有最后一个常数列:
set.seed(111)
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
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" spherical, equal volume
"VII" spherical, unequal volume
因此,您还可以 运行 在非常量列上使用 EII 或 VII 模型,得到相同的形状:
Mclust(testing[,1:3], 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
如果您有一个常数列,则从中估计高斯分布没有意义,更不用说多元高斯分布了
我正在尝试使用 MClust(, G = 1) 估计单正态分布的值的 Mu 和协方差。我认为它在大多数时候都很好用。但是,如果其中一个变量由重复常量组成(例如全 0、全 5 等),它会以我不理解的方式影响协方差。
例如,在下面的代码中,引入了 D 列,更改了 Sigma,以便它们出于某种原因都相等。如果我改变 D 中的一个值,事情会回到更多的预期值。根据行数,有时需要更改 1 个以上的样本。
这有什么原因或解释吗?我试图更好地理解它,以便在我的变量之一恰好是 'too constant' 的情况下预测如何避免它。如果它是可预测的,我也许可以使用一些逻辑来手动删除变量,分析为单变量并将其放回等等
测试演示:
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
添加 'too constant' 变量:
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
稍微更改 'too constant' 变量:
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
包括常量“变量”意味着协方差矩阵对于包括常量在内的任何一对变量都将为 0。实际上,在混合模型中包含常量没有意义(例如,使用 Mclust
创建的模型)。
在你拟合之后应该总是检查 BIC 选择的模型,所以如果我们 运行 它没有最后一个常数列:
set.seed(111)
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
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" spherical, equal volume
"VII" spherical, unequal volume
因此,您还可以 运行 在非常量列上使用 EII 或 VII 模型,得到相同的形状:
Mclust(testing[,1:3], 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
如果您有一个常数列,则从中估计高斯分布没有意义,更不用说多元高斯分布了