最近在搞这个混合模型,需要一个EM算法下的对数正态分布的程序,于是自己试了试,但是不行,会出现
Erreur : indice hors limites
出现这个提示是因为
for (k in 1:2) {
pY[,k] <- p[k]*dlnorm(x,meanlog=m[k],sdlog=s[k])/denom
E[k] <- sum(pY[,k])
p[k] <- E[k]/n
xck <-as.matrix(log(x))
m[k] <- pY[,k]%*%xck/E[k]
xck[,k] <- xck[,k] - mu[k]
s[k]<- (t(matrix(pY[,k],n,1)*xck)%*%xck)/E[k]
}
这一步中xck是149*1,但是我在后面的程序中犯傻,给xck第二列数值,所以出现最上面的警示
Erreur dans while ((kiter < MaxIter) & (err > epsilon)) { :
valeur manquante là où TRUE / FALSE est requis
在之后的程序运行中,出现这个提示,是因为给定的初始值太大或者太小,导致程序无法计算
当我调整初始值大小时,可以解决这个问题