"CgreedySearch.MBparams.MBnetwork.MBdataDE.MBgibbsPars" <- function(params,graph,data,gibbsPars,pars,grid0,grid1=NULL,style=c("geneCV","metaCV","geneMAX","knowMAX","metaMAX","geneROC","corrPROF","likeliCV","priorENRICH"),bind=TRUE,quick=TRUE,dist=FALSE,quiet=FALSE,...) { # Compatibility checks isCompat <- compatObjects(params,graph,chkvals=FALSE) if(!length(pars) || !all(pars %in% 1:params@m)) stop("Invalid pars specification") if(is.null(grid0)) stop("grid0 must be non-null") if(is.null(grid1) || bind) grid1 <- grid0 grid0 <- as.matrix(grid0) grid1 <- as.matrix(grid1) if((ncol(grid0) == 1) && (length(pars) > 1)) grid0 <- matrix(rep(grid0,length(pars)),nrow=3) if((ncol(grid1) == 1) && (length(pars) > 1)) grid1 <- matrix(rep(grid1,length(pars)),nrow=3) if(!all(c(nrow(grid0),nrow(grid1)) %in% 3) || !all(c(ncol(grid0),ncol(grid1)) %in% length(pars))) stop("grid0 and/or grid1 have improper dimensions") if(!is.numeric(grid0) || !is.numeric(grid1) || any(is.na(grid0)) || any(is.na(grid1))) stop("All elements in grid0 and grid1 must be defined") if(!all(grid0[3,] > 0) || !all(grid1[3,] > 0)) stop("All step sizes must be > 0") NIter0 <- round((grid0[2,]-grid0[1,])/grid0[3,]+1) NIter1 <- round((grid1[2,]-grid1[1,])/grid1[3,]+1) if(any(NIter0 <= 0) || any(NIter1 <= 0)) stop("Ranges (max-min) must all be >= 0 and if > 0, >= step size") style <- match.arg(style) # Iterate over all pars (possibly more than once if !quick greedy search) orig.pars <- pars for(tmp in orig.pars) params <- setZero(x=params,pNum=tmp) if(!quick) meta.score.best <- rep(-1,length(orig.pars)) for(iter in 1:length(orig.pars)) { if(!quick && !quiet) cat(paste("\nStarting iteration ",iter," of ",length(orig.pars)," in greedy search...\n",sep="")) ##### 1 round of 'quick' greedy search pars.best <- matrix(nrow=2,ncol=length(pars)) score.best <- rep(-1,length(pars)) for(ind in 1:length(pars)) { if(!quiet) cat(paste("\nLearning parameter ",pars[ind]," (",ind," of ",length(pars),")...\n",sep="")) pars.best[,ind] <- c(grid0[1,ind],grid1[1,ind]) count <- 1 par0 <- grid0[1,ind] for(i in 1:NIter0[ind]) { # If parameters are not bound if(!bind) par1 <- grid1[1,ind] for(j in 1:NIter1[ind]) { if(bind) break params <- setValue(x=params,pNum=pars[ind],c(par0,par1)) score.temp <- switch(style, geneCV = CcrossValid(params=params,graph=graph,data=data,gibbsPars=gibbsPars,quiet=quiet,...), metaCV = CcrossValidMeta(params=params,graph=graph,data=data,gibbsPars=gibbsPars,quiet=quiet,what=params@Names[pars[ind]],...), # Function not yet written geneMAX = CpermSigGene(params=params,graph=graph,data=data,gibbsPars=gibbsPars,quiet=quiet,...), knowMAX = CpermSigKnow(params=params,graph=graph,data=data,gibbsPars=gibbsPars,quiet=quiet,...), metaMAX = CpermSigMeta(params=params,graph=graph,data=data,gibbsPars=gibbsPars,quiet=quiet,what=params@Names[pars[ind]],...), geneROC = CrocAuc(params=params,graph=graph,data=data,gibbsPars=gibbsPars,quiet=quiet,...), corrPROF = CcorrProf(params=params,graph=graph,data=data,gibbsPars=gibbsPars,quiet=quiet,...), likeliCV = CcrossValidLik(params=params,graph=graph,data=data,gibbsPars=gibbsPars,quiet=quiet,...), priorENRICH = CpriorEnrich(params=params,graph=graph,data=data,gibbsPars=gibbsPars,quiet=quiet,...)) if(dist) cat(paste(score.temp,"\t",sep="")) if(!is.na(score.temp) && (score.temp > score.best[ind])) { score.best[ind] <- score.temp pars.best[,ind] <- c(par0,par1) } if(!quiet) cat(paste("\nDone with ",count," of ",NIter0[ind]*NIter1[ind],"\n",sep="")) count <- count+1 par1 <- par1+grid1[3,ind] } # If parameters are bound if(bind) { params <- setValue(x=params,pNum=pars[ind],par0) score.temp <- switch(style, geneCV = CcrossValid(params=params,graph=graph,data=data,gibbsPars=gibbsPars,quiet=quiet,...), metaCV = CcrossValidMeta(params=params,graph=graph,data=data,gibbsPars=gibbsPars,quiet=quiet,what=params@Names[pars[ind]],...), # Function not yet written geneMAX = CpermSigGene(params=params,graph=graph,data=data,gibbsPars=gibbsPars,quiet=quiet,...), knowMAX = CpermSigKnow(params=params,graph=graph,data=data,gibbsPars=gibbsPars,quiet=quiet,...), metaMAX = CpermSigMeta(params=params,graph=graph,data=data,gibbsPars=gibbsPars,quiet=quiet,what=params@Names[pars[ind]],...), geneROC = CrocAuc(params=params,graph=graph,data=data,gibbsPars=gibbsPars,quiet=quiet,...), corrPROF = CcorrProf(params=params,graph=graph,data=data,gibbsPars=gibbsPars,quiet=quiet,...), likeliCV = CcrossValidLik(params=params,graph=graph,data=data,gibbsPars=gibbsPars,quiet=quiet,...), priorENRICH = CpriorEnrich(params=params,graph=graph,data=data,gibbsPars=gibbsPars,quiet=quiet,...)) if(dist) cat(paste(score.temp,"\t",sep="")) if(!is.na(score.temp) && (score.temp > score.best[ind])) { score.best[ind] <- score.temp pars.best[,ind] <- par0 } if(!quiet) cat(paste("\nDone with ",count," of ",NIter0[ind],"\n",sep="")) count <- count+1 } par0 <- par0+grid0[3,ind] if(dist) cat("\n") } if(quick) params <- setValue(x=params,pNum=pars[ind],pars.best[,ind]) else params <- setZero(x=params,pNum=pars[ind]) if(!quiet) cat(paste("\nDone with parameter ",pars[ind],"\n",sep="")) } ##### end 1 round if(quick) break max <- which.max(score.best) params <- setValue(x=params,pNum=pars[max],pars.best[,max]) meta.score.best[which(orig.pars == pars[max])] <- score.best[max] pars <- pars[-max] NIter0 <- NIter0[-max] NIter1 <- NIter1[-max] grid0 <- grid0[,-max] grid1 <- grid1[,-max] if(!quiet) cat(paste("\nDone with iteration ",iter,"\n",sep="")) } if(!quick) score.best <- meta.score.best if(dist) cat(paste("\nBEST scores:\n",score.best,"\n",sep="")) return(params) }