"CgibbsSampler.MBnetwork.MBparams.MBgibbsPars" <- function(x,params,gibbsPars,quiet=FALSE,sub=TRUE,prob=NULL,...) { # Compatibility checks isCompat <- compatObjects(x,params) isValid <- validObject(gibbsPars) # Variable inits if(gibbsPars@chains==1) margs.old <- matrix(nrow=(gibbsPars@chains+1),ncol=x@N) else margs.old <- matrix(nrow=gibbsPars@chains,ncol=x@N) states.old <- matrix(nrow=gibbsPars@chains,ncol=x@N) counts.old <- matrix(nrow=2*gibbsPars@chains,ncol=x@N) converged <- FALSE n <- 1 # Adjust 'dots' arguments for downstream functions; # also, change verbosity depending on 'quiet' value RI.extras <- CS.extras <- list(...) RI.extras$verbose <- RI.extras$value <- NULL CS.extras$exclude <- CS.extras$prop <- NULL if(quiet) CS.extras$verbose <- FALSE ### BEGIN Convergence check while(!converged) { # Burn-in if((n==1) || (gibbsPars@KLrepeat=="b")) { init <- TRUE if(!quiet) cat(paste("Starting burn-in, iteration ",n,":\n",sep="")) for(b in 1:length(gibbsPars@burn)) { nIter <- gibbsPars@burn[[b]] temp <- as.numeric(names(gibbsPars@burn)[b]) for(c in 1:gibbsPars@chains) { if((n==1) && (b==1)) x <- do.call("randInit",c(list(x=x,sub=sub,prob=prob),RI.extras)) else { x@States <- as.integer(states.old[c,]) x@Counts <- counts.old[c(2*c-1,2*c),] } if(!quiet) cat(paste("\t",nIter," iterations at temp ",temp," for chain ",c,"...",sep="")) x <- do.call("CsampleNIter",c(list(x=x,params=params,n=nIter,method=gibbsPars@method,temp=temp,init=init,gsub=sub,prob=prob),CS.extras)) if(!quiet) cat("Done\n") states.old[c,] <- x@States counts.old[c(2*c-1,2*c),] <- x@Counts } if(init) init <- FALSE } # END Burn-in if(!quiet) cat(paste("Finished burn-in, iteration ",n,"\n",sep="")) if(gibbsPars@chains==1) margs.old[2,] <- x@Margs[2,] } # Slicing init <- TRUE if(!quiet) cat(paste("Starting slicing, iteration ",n,":\n",sep="")) for(s in 1:length(gibbsPars@slice)) { nIter <- gibbsPars@slice[[s]] temp <- as.numeric(names(gibbsPars@slice)[s]) for(c in 1:gibbsPars@chains) { x@States <- as.integer(states.old[c,]) x@Counts <- counts.old[c(2*c-1,2*c),] if(!quiet) cat(paste("\t",nIter," iterations at temp ",temp," for chain ",c,"...",sep="")) x <- do.call("CsampleNIter",c(list(x=x,params=params,n=nIter,method=gibbsPars@method,temp=temp,init=init,gsub=sub,prob=prob),CS.extras)) if(!quiet) cat("Done\n") margs.old[c,] <- x@Margs[2,] states.old[c,] <- x@States counts.old[c(2*c-1,2*c),] <- x@Counts } if(init) init <- FALSE } # END Slicing if(!quiet) cat(paste("Finished slicing, iteration ",n,"\n",sep="")) # KL-divergence check kld <- kl.divergence(margs.old) if(!quiet) cat(paste("KL-divergence for ",gibbsPars@chains," chain(s) after iteration ",n," is ",kld,"\n",sep="")) n <- n+1 if((gibbsPars@KLrepeat=="n") || (kld <= gibbsPars@thresh)) converged <- TRUE } ### END Convergence check # Sampling init <- TRUE if(!quiet) cat(paste("Starting sampling:\n",sep="")) for(s in 1:length(gibbsPars@samp)) { nIter <- gibbsPars@samp[[s]] temp <- as.numeric(names(gibbsPars@samp)[s]) if(!quiet) cat(paste("\t",nIter," iterations at temp ",temp,"...",sep="")) x <- do.call("CsampleNIter",c(list(x=x,params=params,n=nIter,method=gibbsPars@method,temp=temp,init=init,gsub=sub,prob=prob),CS.extras)) if(!quiet) cat("Done\n") if(init) init <- FALSE } # END Sampling if(!quiet) cat(paste("Finished sampling\n",sep="")) return(x) }