y <- iris[, 1:4]
z <- iris$Species
r <- ncol(y)
M <- 50
thin <- 1
burnin <- 0
Kmax <- 40
Kinit <- 10
G <- "MixStatic"
priorOnE0 <- priorOnE0_spec("G_1_20", 1)
priorOnK <- priorOnK_spec("BNB_143")
R <- apply(y, 2, function(x) diff(range(x)))
b0 <- apply(y, 2, median)
B_0 <- rep(1, r)
B0 <- diag((R^2) * B_0)
c0 <- 2.5 + (r-1)/2
g0 <- 0.5 + (r-1)/2
G0 <- 100 * g0/c0 * diag((1/R^2), nrow = r)
C0 <- g0 * chol2inv(chol(G0))
cl_y <- kmeans(y, centers = Kinit, nstart = 100)
S_0 <- cl_y$cluster
mu_0 <- t(cl_y$centers)
eta_0 <- rep(1/Kinit, Kinit)
Sigma_0 <- array(0, dim = c(r, r, Kinit))
Sigma_0[, , 1:Kinit] <- 0.5 * C0
result <- sampleMultNormMixture(
y, S_0, mu_0, Sigma_0, eta_0,
c0, g0, G0, C0, b0, B0,
M, burnin, thin, Kmax, G, priorOnK, priorOnE0)
K <- result$K
Kplus <- result$Kplus
plot(K, type = "l", ylim = c(0, max(K)),
xlab = "iteration", main = "",
ylab = expression("K" ~ "/" ~ K["+"]), col = 1)
lines(Kplus, col = 2)
legend("topright", legend = c("K", expression(K["+"])),
col = 1:2, lty = 1, box.lwd = 0)
Run the code above in your browser using DataLab