我正在尝试使用mixtool软件包分析混合模型,换句话说,我想分析我的数据是单模,双模还是多模分布。
为简单起见,这里有一个例子:
library(mixtools)
#creating an aritifical normal distribution
mydata <- rnorm(1000, 1750, 60)
#defining the cuts and preparing it for calculations
cutp <- seq(1600, 2300, by=25)
mult <- makemultdata(mydata, cuts = cutp)
comp <- multmixmodel.sel(mult, comps = 1:3, epsilon = 0.01)
#plotting the data (in this case 2 subpopulations)
mixmdl = normalmixEM(mydata, k=2, maxit=50000)
plot(mixmdl,which=2)
lines(density(mydata), lty=2, lwd=2)
现在作为'comp'的结果,我得到:
1 2 3 Winner
AIC -Inf -94.04097 -124.04097 2
BIC -Inf -35.04097 -35.04097 2
CAIC -Inf -64.54097 -79.54097 2
ICL -Inf -35.04097 -35.04097 2
Loglik -Inf -35.04097 -35.04097 2
在我对这种执行的非常有限的理解中,我期望看到1作为“胜利者”(因为我制作了一个正态分布)。 但是,正如您所看到的,我得到1的无限值,以及2和3的BIC,ICL和Loglik的相同值。这与正态分布和处理双线性的更高(或相同)概率相反。多式联运。由于我使用正态分布开始,我希望看到1的概率最高,并且至少在2和3之间存在一些差异。在一些测试中,最让我困惑的是2和3的相同值。 / p>
所以我的问题是为什么我的方法无法将分布识别为高斯分布而是将其归类为双模/多模式?
答案 0 :(得分:0)
我对mixtools
包不太了解。我确实尝试过你所做的事情,但我没有得到与你相同的结论。
当我拟合双组分多项式混合模型时(这是你用multmixmodel.sel
做的),第二个组件是不存在的;后验概率几乎为零。
set.seed(1)
mydata <- rnorm(1000, 1750, 60)
cutp <- seq(min(mydata), max(mydata), by=25)
mult <- makemultdata(mydata, cuts = cutp)
multmod2 <- multmixEM(mult, k=2)
multmod2 $posterior
# comp.1 comp.2
# [1,] 1 1.980052e-226
当我将混合模型拟合到原始数据时,每次都会选择单个组件。
library(mclust)
fit <- Mclust(mydata)
fit
#'Mclust' model object:
# best model: univariate normal (X) with 1 components
library(EMMIX)
# Available from
#https://people.smp.uq.edu.au/GeoffMcLachlan/mix_soft/EMMIX_R/
fit_1 <- EMMIX(mydata, g=1)
fit_2 <- EMMIX(mydata, g=2)
c(fit_1$bic, fit_2$bic)
# [1] 11108.02 11128.67
#(BIC selects the one component model)