Nothing
p.log <- function(x) {
B <- 0.03
return(-x[1]^2 / 200 - 1 / 2 * (x[2] + B * x[1]^2 - 100 * B)^2)
}
unif_inits <- data.frame(
a = runif(10),
b = runif(10)
)
test_that("output sizes and names", {
res1 <- MCMCEnsemble(
p.log,
inits = unif_inits,
max.iter = 300,
n.walkers = 10,
method = "s"
)
expect_type(res1, "list")
expect_length(res1, 2)
expect_named(res1, c("samples", "log.p"))
expect_identical(dim(res1$samples), c(10L, 30L, 2L))
expect_identical(dim(res1$samples)[1:2], dim(res1$log.p))
expect_identical(dimnames(res1$samples)[[3]], c("a", "b"))
expect_identical(attr(res1, "ensemble.sampler"), "stretch")
# Also tests if a matrix is accepted instead of a df.
unnamed_inits <- matrix(runif(20), ncol = 2)
res2 <- MCMCEnsemble(
p.log,
inits = unnamed_inits,
max.iter = 300,
n.walkers = 10,
method = "s"
)
expect_identical(dimnames(res2$samples)[[3]], c("para_1", "para_2"))
})
test_that("coda", {
skip_if_not_installed("coda")
res3 <- MCMCEnsemble(
p.log,
inits = unif_inits,
max.iter = 300,
n.walkers = 10,
method = "d",
coda = TRUE
)
expect_s3_class(res3$samples, "mcmc.list")
expect_identical(attr(res3, "ensemble.sampler"), "differential.evolution")
})
test_that("errors", {
expect_error(
MCMCEnsemble(
p.log,
inits = unif_inits[5, ],
max.iter = 300,
n.walkers = 10,
method = "d"
),
"number of rows"
)
mockery::stub(MCMCEnsemble, "requireNamespace", FALSE)
expect_error(
MCMCEnsemble(
p.log,
inits = unif_inits,
max.iter = 300,
n.walkers = 10,
method = "d",
coda = TRUE
),
"coda"
)
fw <- function(x) {
10 * sin(0.3 * x) * sin(1.3 * x^2) + 0.00001 * x^4 + 0.2 * x + 80
}
expect_error(
MCMCEnsemble(
fw,
inits = unif_inits,
max.iter = 300,
n.walkers = 10,
method = "s"
),
"numeric of length 1"
)
expect_error(
MCMCEnsemble(
fw,
inits = unif_inits,
max.iter = 300,
n.walkers = 10,
method = "d"
),
"numeric of length 1"
)
})
test_that("named arguments", {
set.seed(20200111)
res1 <- MCMCEnsemble(
p.log,
inits = unif_inits,
max.iter = 300,
n.walkers = 10,
method = "s"
)
p.log.named <- function(x) {
B <- 0.03
return(-x["a"]^2 / 200 - 1 / 2 * (x["b"] + B * x["a"]^2 - 100 * B)^2)
}
set.seed(20200111)
res2 <- MCMCEnsemble(
p.log.named,
inits = unif_inits,
max.iter = 300,
n.walkers = 10,
method = "s"
)
expect_identical(res1, res2)
})
test_that("minimal number of walkers: stretch", {
for (dims in 1:3) {
for (n.walkers in 1:5) {
inits <- as.data.frame(matrix(
runif(n.walkers * dims, -1, 1),
ncol = dims
))
if (n.walkers < max(3, dims + 1)) {
expect_error(
MCMCEnsemble(
p.log,
inits = inits,
n.walkers = n.walkers,
max.iter = 20,
method = "stretch"
),
"max(3, d+1)",
fixed = TRUE
)
} else {
expect_no_error(
MCMCEnsemble(
p.log,
inits = inits,
n.walkers = n.walkers,
max.iter = 20,
method = "stretch"
)
)
}
}
}
})
test_that("minimal number of walkers: differential evolution", {
for (dims in 1:3) {
for (n.walkers in 1:5) {
inits <- as.data.frame(matrix(
runif(n.walkers * dims, -1, 1),
ncol = dims
))
if (n.walkers < max(4, dims + 2)) {
expect_error(
MCMCEnsemble(
p.log,
inits = inits,
n.walkers = n.walkers,
max.iter = 20,
method = "differential.evolution"
),
"max(4, d+2)",
fixed = TRUE
)
} else {
expect_no_error(
MCMCEnsemble(
p.log,
inits = inits,
n.walkers = n.walkers,
max.iter = 20,
method = "differential.evolution"
)
)
}
}
}
})
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.