### data and setup #rm(list = ls()) source("datasetup.r") ### ### prior distribution alpha<-1 theta0<-list(mu0=eYn,k0=1/10,S0=CYn,nu0=p+2) spri<-2500 cat("1: sampling from the prior \n") PSIPRI<-NULL for(s in 1:spri) { tmp<-rpsi.0(1,theta0,alpha) # generate functional from DPM PSIPRI<-rbind(PSIPRI,tmp) if(s%%25==0) { cat(s/spri,"\n") } } ### ### starting values n<-dim(Y)[1] G<-1:n ypsi<-rypsi.YG(Y,G,alpha,theta0) ; psi<-ypsi$psi ; ypp<-ypsi$y fast.approx<-FALSE ; use.p1<-FALSE ### ### MCMC cat("2: sampling from the posterior \n") S<-25000 ; ALPHA<-LPY0<-YPP<-PSIPOST<-NULL ; acs<-0 ; plotres<-TRUE for(s in 1:S) { ## update for(i in sample(1:n)) { G1<-G G1[i]<-NA G1[(1:n)[-i]]<-match(G1[-i],unique(G1[-i])) K<-max(G1,na.rm=TRUE) G1[i]<-K+1 lpG<-rep(NA,K+1) for(k in 1:K) { Y0<-Y[G1==k,,drop=FALSE] ; Y1<-rbind(Y0,Y[i,]) lpG[k]<-log(sum(G1==k))+lpy.marg(Y1,theta0)-lpy.marg(Y0,theta0) } lpG[K+1]<-log(alpha) + lpy.marg(Y[i,,drop=FALSE],theta0) G1[i]<-sample(1:(K+1),1,prob=exp(lpG-max(lpG))) ypsi<-rypsi.YG(Y,G1,alpha,theta0) ; psi1<-ypsi$psi ; ypp1<-ypsi$y lhr<-0 if(use.p1) { lhr<-lhr+(lppsi.p1(psi1,theta1) - lppsi.p1(psi,theta1)) if(!fast.approx){lhr<-lhr + (lppsi.p0(psi1,p0pars)-lppsi.p0(psi,p0pars))} } if(log(runif(1))5) {plot2dd(YPP,lwd=2,col="gray",add=TRUE) } points(Y[,1],Y[,2],col=rainbow(max(G))[G],pch=16) for(j in 1:length(psi)) { hist(PSIPOST[,j] ,main="") abline(v=psi.true[j],col="green") abline(v=mean(PSIPOST[,j]),col="blue") } } } } ### dput(list(LPY0=LPY0,YPP=YPP,PSIPOST=PSIPOST,PSIPRI=PSIPRI),"results.prior2")