## Median Posteior from 2-D Gaussian Samples
# Step 1. let's build a list of atoms whose numbers differ
set.seed(8128) # for reproducible results
mydata = list()
mydata[[1]] = cbind(rnorm(96, mean= 1), rnorm(96, mean= 1))
mydata[[2]] = cbind(rnorm(78, mean=-1), rnorm(78, mean= 0))
mydata[[3]] = cbind(rnorm(65, mean=-1), rnorm(65, mean= 1))
mydata[[4]] = cbind(rnorm(77, mean= 2), rnorm(77, mean=-1))
# Step 2. Let's run the algorithm
myrun = mpost.euc(mydata, show.progress=TRUE)
# Step 3. Visualize
# 3-1. show subset posterior samples
opar <- par(no.readonly=TRUE)
par(mfrow=c(2,3), no.readonly=TRUE)
for (i in 1:4){
plot(mydata[[i]], cex=0.5, col=(i+1), pch=19, xlab="", ylab="",
main=paste("subset",i), xlim=c(-4,4), ylim=c(-3,3))
}
# 3-2. 250 median posterior samples via importance sampling
id250 = base::sample(1:nrow(myrun$med.atoms), 250, prob=myrun$med.weights, replace=TRUE)
sp250 = myrun$med.atoms[id250,]
plot(sp250, cex=0.5, pch=19, xlab="", ylab="",
xlim=c(-4,4), ylim=c(-3,3), main="median samples")
# 3-3. convergence over iterations
matplot(myrun$weiszfeld.history, xlab="iteration", ylab="value",
type="b", main="convergence of weights")
par(opar)
Run the code above in your browser using DataLab