#
# This tests the computation of clustering
#
test_that("Neighbor-counting is OK", {
# Check that total number of pairs matches counting done by hand
expect_true( total_pair_count(diag(2), TRUE, TRUE) == 16 )
expect_true( total_pair_count(diag(2), FALSE, TRUE) == 6 )
expect_true( total_pair_count(diag(2), FALSE, FALSE) == 4 )
expect_true( total_pair_count(diag(2), TRUE, FALSE) == 8 )
# Check that total number of pairs matches a manual sum after the fact
for ( wrap in c(TRUE, FALSE) ) {
for ( use_8_nb in c(TRUE, FALSE) ) {
a <- pair_counts(diag(10), wrap = wrap, use_8_nb = use_8_nb)
b <- pair_counts(diag(10), prop = FALSE, wrap = wrap, use_8_nb = use_8_nb)
b <- b / sum(b, na.rm = TRUE)
expect_true({
all( abs(a[!is.na(a)] - b[!is.na(b)]) < 1e-8 )
})
}
}
})
test_that("Computation of clustering are OK", {
mat <- matrix(c(1, 0, 0,
0, 0, 0,
0, 0, 0),
ncol = 3, byrow = TRUE)
# With 4 nbs and wrapping, we have 14 pairs of 0-0, 0 of 1-1
clusts <- clustering_core(mat, ns = 2, wrap = TRUE, use_8_nb = FALSE)
expect_true({
all(c(clusts[ ,1] == c(14, 0),
clusts[ ,2] == c(8, 1) )) # counts of single cells
})
# With 8 nbs and wrapping, we have 21 pairs of 0-0, 0 of 1-1
clusts <- clustering_core(mat, ns = 2, wrap = TRUE, use_8_nb = TRUE)
expect_true({
all(c(clusts[ ,1] == c(28, 0),
clusts[ ,2] == c(8, 1) )) # counts of single cells
})
# With 4 nbs and no wrapping, we have ten pairs of 0-0, 0 of 1-1
clusts <- clustering_core(mat, ns = 2, wrap = FALSE, use_8_nb = FALSE)
expect_true({
all(c(clusts[ ,1] == c(10, 0),
clusts[ ,2] == c(8, 1) )) # counts of single cells
})
# With 8 nbs and no wrapping, we have 13 pairs of 0-0, 0 of 1-1
clusts <- clustering_core(mat, ns = 2, wrap = FALSE, use_8_nb = TRUE)
expect_true({
all(c(clusts[ ,1] == c(17, 0),
clusts[ ,2] == c(8, 1) )) # counts of single cells
})
# Make sure clustering of random matrices is close to one
clusts <- replicate(199, {
m <- matrix(sample(letters[1:4], size = 100^2, replace = TRUE),
nrow = 100, ncol = 100)
raw_clustering(m)
})
expect_true({
all( abs(apply(clusts, 1, mean) - 1) < 0.10 )
})
})
test_that("Counting of pairs makes sense", {
n <- 99
counts <- lapply(seq.int(n), function(n) {
m <- matrix(sample(letters[1:4], size = 100^2, replace = TRUE),
nrow = 100, ncol = 100)
pair_counts(m, prop = TRUE)
})
means <- Reduce(`+`, counts) / n
# Sum should be 1
expect_true({
abs( sum(means, na.rm = TRUE) - 1 ) < 0.00001
})
# Diags should be equal
expect_true({
all(abs(diff(diag(means))) < 0.1)
})
# Lower tri values should be equal
expect_true({
all( abs(diff(means[lower.tri(means)])) < 0.01)
})
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.