Puede alguien ayudarme con el código R para implementar el algoritmo EM. Obtuve un valor diferente si elegí un valor inicial diferente; claramente esto no es bueno. Y el valor de $\mu$ , $\sigma$ pasa a NA después de algunas iteraciones. Este es mi código
da1=read.table("anythin.Rdata", header=TRUE)
y=as.vector(da1[,2])
n=length(y)
mu=matrix(NA,1000,2)
sigma=matrix(NA,1000,2)
w=matrix(NA,1000,2)
mu[1,]=c(2,4)
sigma[1,]=c(0.5,0.1)
w[1,]=c(0.5,0.5)
xi1=0
xi2=0
for (i in 2:1000){
# E step
xi1=w[i-1,1]*dnorm(y,mean=mu[i-1,1],sd=sigma[i-1,1])/(w[i-1,1]*dnorm(y,mean=mu[i-1,1],sd=sigma[i-1,1])+w[i-1,2]*dnorm(y,mean=mu[i-1,2],sd=sigma[i-1,2]))
xi2=w[i-1,2]*dnorm(y,mean=mu[i-1,2],sd=sigma[i-1,2])/(w[i-1,1]*dnorm(y,mean=mu[i-1,1],sd=sigma[i-1,1])+w[i-1,2]*dnorm(y,mean=mu[i-1,2],sd=sigma[i-1,2]))
# M step
w[i,1]=sum(xi1)
w[i,2]=sum(xi2)
mu[i,1]=sum(xi1*y)/sum(xi1)
mu[i,2]=sum(xi2*y)/sum(xi2)
sigma[i,1]=sum(xi1*(mu[i,1]-y)^2)/sum(xi1)
sigma[i,2]=sum(xi2*(mu[i,2]-y)^2)/sum(xi2)
}