##---- Should be DIRECTLY executable !! ----
##-- ==> Define data, use random,
##-- or do help(data=index) for the standard data sets.
## The function is currently defined as
function (emfit, minover)
{
newem <- list(mu = emfit$parameters$mean, pro = emfit$parameters$pro,
z = emfit$z, groups = matrix(nrow = length(emfit$parameters$mean),
ncol = length(emfit$parameters$mean), data = 0),
ngroups = length(emfit$parameters$mean))
diag(newem$groups) <- 1
while (newem$ngroups > 1) {
avz <- (t(newem$z)/colSums(newem$z)) %*% newem$z
diag(avz) <- 0
if (max(avz) > minover) {
g1 <- col(avz)[rev(order(avz))][1]
g2 <- row(avz)[rev(order(avz))][1]
gl <- min(g1, g2)
gr <- max(g1, g2)
newem$z[, gl] <- newem$z[, gl] + newem$z[, gr]
newem$z <- matrix(ncol = ncol(newem$z) - 1, nrow = nrow(newem$z),
data = newem$z[, -gr])
newem$mu[gl] <- (newem$mu[gl] * newem$pro[gl] + newem$mu[gr] *
newem$pro[gr])/(newem$pro[gl] + newem$pro[gr])
newem$mu <- newem$mu[-gr]
newem$pro[gl] <- newem$pro[gl] + newem$pro[gr]
newem$pro <- newem$pro[-gr]
newem$groups[gl, ] <- newem$groups[gl, ] + newem$groups[gr,
]
newem$groups <- matrix(ncol = ncol(newem$groups),
nrow = newem$ngroups - 1, data = newem$groups[-gr,
])
newem$ngroups <- newem$ngroups - 1
}
else break
}
return(newem)
}Run the code above in your browser using DataLab