我试图了解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))
}
干杯! 都灵
答案 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])
}
当然,增加模拟次数会降低您对内核平滑密度的偏差。 增加到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])
}