"CcrossValidLik.MBparams.MBnetwork.MBdataDE.MBgibbsPars" <- function(params,graph,data,gibbsPars,quiet=FALSE,fold=10,contrasts=NULL,...) { # Compatibility checks isCompat1 <- compatObjects(params,graph) isCompat2 <- compatObjects(graph,data) isValid <- validObject(gibbsPars) if(!is.numeric(fold) || (as.integer(fold) != fold) || (fold < 2) || (fold > data@N)) stop("Invalid cross-validation fold number") # Calculate training/test groups temp.sample <- sample(data@N) size <- round(data@N/fold) # Analyze groups index <- 1 liksum <- 0 for(i in 1:fold) { sub <- rep(TRUE,data@N) if(i == fold) sub[temp.sample[index:data@N]] <- FALSE else { sub[temp.sample[index:(index+size-1)]] <- FALSE index <- index+size } if(!quiet) cat(paste("\nRunning gibbs sampler for separation ",i,"...\n\n",sep="")) graph <- calcCPDs(x=graph,data=data,contrasts) cpds.out <- graph@Cpds[,!sub] graph <- CgibbsSampler(x=graph,params=params,gibbsPars=gibbsPars,quiet=quiet,sub=sub,...) graph@Cpds[,!sub] <- NA graph <- CgibbsSampler(x=graph,params=params,gibbsPars=gibbsPars,quiet=quiet,prob=graph@Margs[2,],...) graph@Cpds[,!sub] <- cpds.out liksum <- liksum + sum(log(colSums(graph@Margs[,!sub]*graph@Cpds[,!sub])),na.rm=TRUE) } return(liksum) }