R中的高斯混合建模(Mclust)在简单正态分布上失败

时间:2014-11-06 11:41:12

标签: r statistics gaussian

我试图了解Mclust所以我认为最简单的方法是使用高斯混合建模来建模高斯。我原本期望G = 1是最合适的。但是,我得到G = 6,如果我打印它们,它们甚至不接近原始高斯。任何暗示这里有什么问题?

x<-seq(-4,4,length=200)
y<-dnorm(x,mean=0, sd=1)
plot(x,y, type="l", lwd=2)
mod1<-Mclust(y)
ColourVec<-c('green','cyan','blue','red','yellow','yellow','yellow')
for (i in 1:max(mod1$G)){
  tmp<-mod1$classification==i  
  par(new=T)
  plot(density(mod1$data[tmp],adjust=2),col=ColourVec[i],xlim=c(-4,4),ylim=c(0,0.4))  
}

Output image

干杯! 都灵

1 个答案:

答案 0 :(得分:1)

Mclust(y,)将数据y作为输入,例如。如果您想要来自单变量法线的数据,则需要通过rnorm()来模拟y。这导致:

library(mclust)
x<-seq(-4,4,length=200)
y<-rnorm(200,mean=0, sd=1)
plot(x,dnorm(x,mean=0, sd=1), type="l", lwd=2)
mod1<-Mclust(y)
ColourVec<-c('green','cyan','blue','red','yellow','yellow','yellow')
for (i in 1:max(mod1$G)){
  tmp<-mod1$classification==i  
  lines(density(mod1$data[tmp],adjust=2),col=ColourVec[i])   
}

enter image description here

当然,增加模拟次数会降低您对内核平滑密度的偏差。 增加到N = 2000次模拟,1000次来自2个不同的单变量高斯和相同的sd,但不同的方法导致:

N<-2000
x<-seq(-4,7,length=200)
y<-c( rnorm(N/2,mean=0,sd=1), rnorm(N/2,mean=3,sd=1) )
plot(x,dnorm(x,mean=0, sd=1), type="l", lwd=2,xlim=c(-3,7))
lines(x,dnorm(x,mean=3, sd=1), lwd=2) 

mod1<-Mclust(y)
ColourVec<-c('green','cyan','blue','red','yellow','yellow','yellow')
for (i in 1:max(mod1$G)){
  tmp<-mod1$classification==i  
  lines(density(mod1$data[tmp],adjust=2),col=ColourVec[i])  
}

enter image description here