# This program uses a Bootstrap method and calculates 95% percentile intervals of all the elements in a sample. The number of the original sample is n; resampling is repeated m times.
class=c("c1","c2","c3","c4") # define all the elements
probabilities=c(0.606557377,0.049180328,0.295081967,0.049180328) # and their probabilities
n<-61 # the size of the orignal sample
m<-50000 # the number of resample
my.boot.c1<-numeric(0) # create a hash
my.boot.c2<-numeric(0)
my.boot.c3<-numeric(0)
my.boot.c4<-numeric(0)
for(i in 1:m) {
y<-sample(class,n,replace=TRUE,prob=probabilities) #resampling
my.boot.c1[i]<-length(grep("c1",y)) # count the number of elements, and put it in the hash
my.boot.c2[i]<-length(grep("c2",y))
my.boot.c3[i]<-length(grep("c3",y))
my.boot.c4[i]<-length(grep("c4",y))
}
Y<-matrix(nrow=4,ncol=3) # prepare a matrix to store results
Y[1,1] <- mean(my.boot.c1) # encoding means in the first column
Y[2,1] <- mean(my.boot.c2)
Y[3,1] <- mean(my.boot.c3)
Y[4,1] <- mean(my.boot.c4)
Y[1,2-3]<-quantile(my.boot.c1,p=c(0.025,0.975)) # calculate the percentile intervals
Y[2,2-3]<-quantile(my.boot.c2,p=c(0.025,0.975)) # and store them in Y
Y[3,2-3]<-quantile(my.boot.c3,p=c(0.025,0.975))
Y[4,2-3]<-quantile(my.boot.c4,p=c(0.025,0.975))
Y # print
# If you want each value
mean<-Y[,1] # means
lower<-Y[,2] # lower bound
upper<-Y[,3] # upperbound