Nothing
################################################################################
# Tests for makedist function
################################################################################
context("compute_mahalanobis tests")
mahal.cov <- function(x, z) {
mt <- cov(x[z, ,drop=FALSE]) * (sum(z) - 1) / (length(z) - 2)
mc <- cov(x[!z, ,drop=FALSE]) * (sum(!z) - 1) / (length(!z) - 2)
return(mt + mc)
}
trad.mahal <- function(index, x, z) {
x.cov <- mahal.cov(x, z)
ans <- apply(index, 1, function(pair)
return(mahalanobis(x[pair[1], ], x[pair[2], ], x.cov)))
return(sqrt(ans))
}
make.data <- function(k) {
# generate some interesting but random vectors
set.seed(20130811)
mvrnorm_simple <- function(n, mu, Sigma) # based on MASS's `mvrnorm`
{
tol <- 1e-06
p <- length(mu)
if (!all(dim(Sigma) == c(p, p)))
stop("incompatible arguments")
eS <- eigen(Sigma, symmetric = TRUE)
ev <- eS$values
if (!all(ev >= -tol * abs(ev[1L])))
stop("'Sigma' is not positive definite")
X <- matrix(rnorm(p * n), n)
X <- drop(mu) + eS$vectors %*% diag(sqrt(pmax(ev, 0)), p) %*%
t(X)
nm <- names(mu)
if (is.null(nm) && !is.null(dn <- dimnames(Sigma)))
nm <- dn[[1L]]
dimnames(X) <- list(nm, NULL)
if (n == 1)
drop(X)
else t(X)
}
x <- mvrnorm_simple(k, mu = c(-1, 0, 1),
Sigma = matrix(c(1, 0.25, 0.25,
0.25, 1, 0.25,
0.25, 1, 0.25), nrow = 3))
rownames(x) <- paste('v', seq_len(nrow(x)), sep='')
# top 10% assigned to treatment
tmp <- rowSums(x)
z <- vector("integer", k)
z[order(tmp, decreasing = TRUE)[1:(0.1 * k)]] <- 1L
z <- as.logical(z)
# get treatment X control pairs into an index
tns <- rownames(x)[z]
nt <- length(tns)
cns <- rownames(x)[!z]
nc <- length(cns)
t.coord <- rep(tns, nc)
c.coord <- rep(cns, each = nt)
index <- cbind(t.coord, c.coord)
# return index, data, and z
return(list(index = index, data = x, z = z))
}
test_that("Checking mahalanobis distance", {
# random data set of size btw 100 and 500
args <- make.data(sample(100:500, 1))
expect_equal(
compute_mahalanobis(args$index, args$data, args$z),
trad.mahal(args$index, args$data, args$z))
})
test_that("#168, singleton treatment/control units", {
index <- matrix(c("1", "1", "1", "2", "3", "4"), ncol = 2, byrow = FALSE)
data <- matrix(as.numeric(1:4), ncol = 1, dimnames = list(as.character(1:4), "scores"))
z <- c(TRUE, FALSE, FALSE, FALSE)
names(z) <- as.character(1:4)
t <- compute_mahalanobis(index, data, z)
expect_length(t, 3)
expect_false(any(is.na(t)))
index <- matrix(c("2", "3", "4", "1", "1", "1"), ncol = 2, byrow = FALSE)
data <- matrix(as.numeric(1:4), ncol = 1, dimnames = list(as.character(1:4), "scores"))
z <- c(FALSE, TRUE, TRUE, TRUE)
names(z) <- as.character(1:4)
c <- compute_mahalanobis(index, data, z)
expect_length(c, 3)
expect_false(any(is.na(c)))
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.