# coClustering and a permutation test for it
coClustering <- function(clusters.ref, clusters.test, tupletSize = 2, unassignedLabel = 0) {
overlap <- overlapTable(clusters.test, clusters.ref)
greyRow <- rownames(overlap$countTable) == unassignedLabel
greyCol <- colnames(overlap$countTable) == unassignedLabel
refModSizes <- table(clusters.ref)
ccNumer <- apply(overlap$countTable[!greyRow, !greyCol, drop = FALSE], 2, choose, tupletSize)
ccDenom <- choose(refModSizes[!greyCol], tupletSize)
apply(ccNumer, 2, sum) / ccDenom
}
coClustering.permutationTest <- function(clusters.ref, clusters.test,
tupletSize = 2, nPermutations = 100, unassignedLabel = 0,
randomSeed = 12345, verbose = 0, indent = 0) {
spaces <- indentSpaces(indent)
if (!is.null(randomSeed)) set.seed(randomSeed)
observed <- coClustering(clusters.ref, clusters.test, tupletSize, unassignedLabel)
nModules <- length(observed)
permValues <- matrix(NA, nPermutations, nModules)
if (verbose > 0) {
pind <- initProgInd(spaste(spaces, "Running permutations: "), " done")
}
for (p in 1:nPermutations)
{
ctPerm <- sample(clusters.test)
permValues[p, ] <- as.numeric(coClustering(
clusters.ref, ctPerm,
tupletSize, unassignedLabel
))
if (verbose > 0) pind <- updateProgInd(p / nPermutations, pind)
}
if (verbose > 0) printFlush("")
means <- colMeans(permValues)
sds <- apply(permValues, 2, sd, na.rm = TRUE)
list(
observed = observed, Z = (observed - means) / sds, permuted.mean = means, permuted.sd = sds,
permuted.cc = permValues
)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.