### data and setup #rm(list = ls()) source("datasetup.r") ### ### prior distribution alpha<-1 mu0<-eY0 V0<- cor(Y)*sqrt( outer(diag(CY0),diag(CY0)) ) k0<- n0/(alpha+1) nu0<-n0 S0<- nu0*V0 theta0<-list(mu0=mu0,k0=k0,S0=S0,nu0=nu0) 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))