"sim.data.GS" <- function (data, prop = data@prop, auc0 = c(.6), t0 = c(1), tol.samp = c(0.01, 0.05, 0.1, 0.15, 0.2, 0.25), iter = 10, temp = 1, sub = TRUE, rev = FALSE, contrasts = NULL, verbose = FALSE) { if(is.null(contrasts)) lods <- eBayes(lmFit(data@M,weights=data@W,design=data@design),proportion=prop)$lods else lods <- eBayes(contrasts.fit(lmFit(data@M,weights=data@W,design=data@design),contrasts),proportion=prop)$lods lods[is.na(lods)] <- min(lods,na.rm=TRUE)-1 lods <- lods[sub] MBd.M <- data@M[sub,] MBd.W <- data@W[sub,] MBd.IDs <- data@IDs[sub] N <- nrow(MBd.M) n <- data@n nA <- as.integer(prop*N) nB <- N-nA truth <- c(rep(1,nA),rep(0,nB)) auc1 <- numeric(length(auc0)) if(rev) ord <- 1:N else ord <- sample(N) rank.pos <- order(lods[ord],decreasing=TRUE) invtemp <- 1/temp done <- FALSE auc1 <- sapply(t0,function(t) performance(prediction(predictions=lods[rank.pos],labels=truth),measure="auc",fpr.stop=t)@y.values[[1]]) for(tol in tol.samp) { for(i in 1:iter) { if(all(abs(auc1 - auc0) <= auc0*tol)) { done <- TRUE break } if(verbose && (i == 1 || !(i%%100))) cat(paste("Sampling data at tolerance ", tol, ", iter ", i, "...\n", sep = "")) DE <- sample(nA,1) NDE <- sample(nB,1)+nA temp.pos <- rank.pos[DE] rank.pos[DE] <- rank.pos[NDE] rank.pos[NDE] <- temp.pos auc2 <- sapply(t0,function(t) performance(prediction(predictions=lods[rank.pos],labels=truth),measure="auc",fpr.stop=t)@y.values[[1]]) dE <- -1*(dist(rbind(auc0,auc1)) - dist(rbind(auc0,auc2))) prob <- 1/(1+exp(dE*invtemp)) temp.binom <- rbinom(1,1,prob) if(verbose && !(i%%10)) cat(paste("sim: ",exp(-1*dist(rbind(auc0,auc1))),"\tauc(s): ",paste(auc1,collapse=" "),"\n", sep = "")) if(!temp.binom) { rank.pos[NDE] <- rank.pos[DE] rank.pos[DE] <- temp.pos } else auc1 <- auc2 } if(done) break } if(!done) stop("Adequate simulated connectivity not obtained!") if(verbose) cat("Success!\n") MBd <- new("MBdataDE") MBd <- addData(MBd,N=N,n=n,IDs=MBd.IDs[rank.pos],M=MBd.M[rank.pos,],W=MBd.W[rank.pos,],design=data@design) MBd <- setLMmethod(MBd,data@lmMethod) MBd <- setProp(MBd,prop) return(MBd) }