"CcrossValid.MBparams.MBnetwork.MBdataDE.MBgibbsPars" <- function(params,graph,data,gibbsPars,quiet=FALSE,combinats,seed=777,metric="cor",use="pairwise.complete.obs",method="spearman",num="data",contrasts=NULL,...) { # Compatibility checks isCompat1 <- compatObjects(params,graph) isCompat2 <- compatObjects(graph,data) isValid <- validObject(gibbsPars) if(!is.list(combinats)) stop("Combinations must be a list") if(!length(combinats) || !is.numeric(unlist(combinats)) || any(is.null(unlist(combinats))) || any(is.na(unlist(combinats))) || any(unlist(combinats)<=0) || any(as.integer(unlist(combinats))!=unlist(combinats)) || any(unlist(combinats) > choose(data@n,as.numeric(names(combinats))))) stop("Number of individual combinations must all exist, all be integers > 0, and all be <= choose(n,size)") if(any(is.null(as.numeric(names(combinats)))) || any(is.na(as.numeric(names(combinats)))) || any(as.numeric(names(combinats))<=1) || any(as.numeric(names(combinats))>data@n)) stop("Size of combinations must all exist, all be integers > 1, and all be <= n") if((metric == "top") && (num != "data") && (!is.numeric(num) || (as.integer(num) != num) || (num <= 0) || (num > data@N))) stop("Invalid num specification for similarity metric 'top'") # Preserve current RNG seed; set seed for consistent sample generation runif(1); save.seed <- .Random.seed set.seed(seed) # Initialize combinations list combos.list <- list() ncombo <- 0 for(i in 1:length(combinats)) { temp.combos <- combinations(data@n,as.numeric(names(combinats)[i])) temp.sample <- sample(nrow(temp.combos),combinats[[i]]) for(j in temp.sample) { ncombo <- ncombo + 1 combos.list[[ncombo]] <- temp.combos[j,] } } # Restore original RNG seed .Random.seed <- save.seed # Analyze full graph lods.orig <- log(graph@Cpds[2,]*data@prop/(graph@Cpds[1,]*(1-data@prop))) # Save old data data.old <- data # Analyze combinations Sum <- 0 for(i in 1:length(combos.list)) { if(!quiet) cat(paste("\nCalculating lods for combination ",i,"...\n\n",sep="")) data@n <- length(combos.list[[i]]) data@M <- data@M[,combos.list[[i]]] data@W <- data@W[,combos.list[[i]]] data@design <- data@design[combos.list[[i]],] graph <- calcCPDs(x=graph,data=data,contrasts) graph <- CgibbsSampler(x=graph,params=params,gibbsPars=gibbsPars,quiet=quiet,...) if(metric == "cor") { Sum <- Sum + cor(x=lods.orig,y=calcLods(graph),use=use,method=method) } else if(metric == "top") { if(num == "data") num <- floor(data@prop*data@N) Sum <- Sum + sum(order(calcLods(graph),decreasing=TRUE)[1:num] %in% order(lods.orig,decreasing=TRUE)[1:num]) } else stop("Unsupported similarity metric") data <- data.old } return(Sum/length(combos.list)) }