run.sim <- function(config) {
snr <- config[[1]]
rho <- config[[2]]
BHlevel <- config[[3]]
replications <- config[[4]]
I <- 11
J <- 11
K <- 9
dims <- c(I, J, K)
coordinates <- expand.grid(i = 1:I, j = 1:J, k = 1:K)
covariance <- rho^as.matrix(dist(coordinates[, 1:3], method = "euclidean",
diag = TRUE, upper = TRUE))
covEigen <- eigen(covariance)
sqrtCov <- covEigen$vectors %*% diag(sqrt(covEigen$values)) %*% t(covEigen$vectors)
simresults <- list()
simcover <- matrix(nrow = replications, ncol = 3)
colnames(simcover) <- c("naive", "mle", "profile")
for(rep in 1:replications) {
selected <- FALSE
while(sum(selected) < 5) {
coordinates <- generateArrayData3D(dims, sqrtCov, snr)
coordinates$zval <- coordinates$observed / sqrt(diag(covariance))
coordinates$pval <- 2 * pnorm(-abs(coordinates$zval))
coordinates$qval <- p.adjust(coordinates$pval, method = "BH")
coordinates$selected <- coordinates$qval < BHlevel
selected <- coordinates$selected
}
print(c(rep = rep, rho = rho, BHlevel = BHlevel, snr = snr))
print(c(nselected = sum(selected)))
clusters <- findClusters(coordinates)
sizes <- sapply(clusters, nrow)
threshold <- qnorm(BHlevel * sum(coordinates$selected) / nrow(coordinates) / 2,
lower.tail = FALSE)
results <- list()
iterCover <- 0
naiveCover <- 0
profCover <- 0
weights <- 0
for(m in 1:length(clusters)) {
results[[m]] <- list()
cluster <- clusters[[m]]
cluster <- subset(cluster, !is.na(cluster$selected))
if(nrow(cluster) == 1) next
print(c(round(m / length(clusters), 2), nrow(cluster)))
subCov <- covariance[cluster$row, cluster$row, drop = FALSE]
observed <- coordinates$observed[cluster$row]
selected <- coordinates$selected[cluster$row]
signal <- coordinates$signal[cluster$row]
result <- NULL
try(result <- optimizeSelected(observed, subCov, threshold,
projected = mean(signal[selected]),
stepRate = 0.6,
stepSizeCoef = 4,
delay = 10,
assumeConvergence = 500,
trimSample = 80,
maxiter = 2000,
init = observed))
if(is.null(result)) next
conditional <- result$conditional
selected <- coordinates$selected[cluster$row]
signal <- coordinates$signal[cluster$row]
coordinatedat <- data.frame(conditional = conditional,
observed = observed,
signal = signal,
selected = selected)
coordinatedat$lCI[selected] <- result$coordinateCI[, 2]
coordinatedat$uCI[selected] <- result$coordinateCI[, 1]
try(profile <- optimizeSelected(observed, subCov, threshold,
projected = mean(signal[selected]),
stepRate = 0.6,
stepSizeCoef = 4,
delay = 10,
assumeConvergence = 500,
trimSample = 40,
maxiter = 2000,
init = observed))
naive <- mean(observed[selected])
samp <- profile$sample
profMeans <- rowMeans(samp[, selected, drop = FALSE])
profPval <- 2 * min(mean(profMeans <= naive), mean(profMeans >= naive))
e <- selected / sum(selected)
naiveVar <- t(e) %*% subCov %*% e
naiveSD <- sqrt(naiveVar)
naiveCI <- naive + c(-1, 1) * 1.96 * naiveSD
true <- mean(signal[selected])
conditional <- mean(conditional[selected])
lCI <- c(profPval, naiveCI[1], sort(result$meanCI)[1])
uCI <- c(profPval, naiveCI[2], sort(result$meanCI)[2])
meanResult <- data.frame(type = c("true", "naive", "conditional"),
estimate = c(true, naive, conditional),
lCI = lCI, uCI = uCI)
results[[m]][[1]] <- c(snr = snr, rho = rho, BHlevel = BHlevel, size = sum(selected))
results[[m]][[2]] <- meanResult
print(meanResult)
weight <- 1
iterCover <- iterCover + weight * (meanResult$lCI[3] < true & meanResult$uCI[3] > true)
naiveCover <- naiveCover + weight * (meanResult$lCI[2] < true & meanResult$uCI[2] > true)
profCover <- profCover + weight * (profPval > 0.05)
weights <- weights + weight
}
simcover[rep, 1] <- sum(naiveCover) / sum(weights)
simcover[rep, 2] <- sum(iterCover) / sum(weights)
simcover[rep, 3] <- sum(profCover) / sum(weights)
print(c(itermle = iterCover, iternaive = naiveCover, iterprof = profCover) / weights)
print(colMeans(simcover[1:rep, , drop = FALSE]))
simresults[[rep]] <- results
}
return(simresults)
}
configurations <- expand.grid(snr = c(0.8, 0.05, 0.2),
rho = c(0.5, 0.75),
BHlevel = 0.1,
replications = 50)
set.seed(500)
system.time(simResults <- apply(configurations, 1, run.sim))
save(simResults, file = "simulations/results/Mar 23.Robj")
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.