Nothing
set.seed(123454)
test_that("corner cases work as expected", {
expect_identical(
unclass(sps(numeric(0), 0)),
structure(integer(0), weights = numeric(0))
)
expect_identical(
unclass(sps(0, 0)),
structure(integer(0), weights = numeric(0))
)
expect_identical(
unclass(sps(1:10, 0)),
structure(integer(0), weights = numeric(0))
)
expect_identical(
unclass(sps(1:10, 10)),
structure(1:10, weights = rep(1, 10))
)
expect_identical(
unclass(sps(1:10, c(5, 0), gl(2, 5))),
structure(1:5, weights = rep(1, 5))
)
expect_identical(
unclass(ps(numeric(0), 0)),
structure(integer(0), weights = numeric(0))
)
expect_identical(
unclass(ps(0, 0)),
structure(integer(0), weights = numeric(0))
)
expect_identical(
unclass(ps(1:10, 0)),
structure(integer(0), weights = numeric(0))
)
expect_identical(
unclass(ps(1:10, 10)),
structure(1:10, weights = rep(1, 10))
)
expect_identical(
unclass(ps(1:10, c(5, 0), gl(2, 5))),
structure(1:5, weights = rep(1, 5))
)
})
test_that("argument checking works", {
expect_error(sps(-1:4, c(2, 2), gl(2, 3)))
expect_error(sps(c(NA, 1:5), c(2, 2), gl(2, 3)))
expect_error(sps(numeric(0), c(2, 2), gl(2, 3)))
expect_error(sps(numeric(0), 0, factor(integer(0))))
expect_error(sps(c(0, 0, 1:4), c(2, 2), gl(2, 3)))
expect_error(sps(c(0, 0, 1:4), 5))
expect_error(sps(1:6, c(-2, 2), gl(2, 3)))
expect_error(sps(1:6, c(NA, 2), gl(2, 3)))
expect_error(sps(1:6, integer(0), gl(2, 3)))
expect_error(sps(1:6, c(2, 2)))
expect_error(sps(1:6, c(2, 2), gl(2, 2)))
expect_error(sps(1:6, c(2, 2), gl(2, 3)[c(1:5, 7)]))
expect_error(sps(1:6, c(2, 2), gl(2, 3), alpha = c(0, 1.5)))
expect_error(sps(1:6, c(2, 2), gl(2, 3), alpha = c(0, NA)))
expect_error(sps(1:6, c(2, 2), gl(2, 3), alpha = c(0, 0, 0)))
expect_error(sps(1:6, c(2, 2), gl(2, 3), alpha = integer(0)))
expect_error(sps(1:6, 2, alpha = c(0, 0)))
expect_error(sps(1:6, c(2, 2), gl(2, 3), prn = c(0, runif(4), 1)))
expect_error(sps(1:6, c(2, 2), gl(2, 3), prn = 1:7 / 10))
expect_error(sps(1:6, c(2, 2), gl(2, 3), prn = -1:4 / 10))
expect_error(sps(1:6, c(2, 2), gl(2, 3), prn = c(NA, 1:5) / 10))
expect_error(sps(1:6, c(2, 2), gl(2, 3), prn = numeric(0)))
expect_error(sps(1:6, c(2, 2), gl(2, 3), cutoff = 2))
})
test_that("results are sorted", {
x <- c(20, 1:10, 100, 0, 0)
samp <- sps(x, c(3, 2, 2), c(1, 1, 2, 1, 3, 1, 2, 3, 2, 1, 3, 3, 3, 1))
expect_identical(
as.integer(samp),
sort(samp)
)
# weights should be monotonic
expect_identical(
order(weights(sps(0:10, 4))), 4:1
)
})
test_that("two rounds of TA removal works", {
x <- c(20, 1:10, 100, 0, 0)
samp <- sps(x, 5)
expect_equal(samp[c(1, 5)], c(1, 12))
expect_equal(levels(samp), c("TA", rep("TS", 3), "TA"))
expect_true(all(weights(samp)[c(1, 5)] == 1))
expect_true(all(weights(samp)[-c(1, 5)] > 1))
samp <- ps(x, 5)
last <- length(samp)
expect_equal(samp[c(1, last)], c(1, 12))
expect_equal(levels(samp), c("TA", rep("TS", last - 2), "TA"))
expect_true(all(weights(samp)[c(1, last)] == 1))
expect_true(all(weights(samp)[-c(1, last)] > 1))
# use alpha to make all units TAs
expect_identical(
levels(sps(c(0:5, 0:5), c(3, 3), rep(1:2, each = 6), alpha = c(0.51, 0))),
c(rep("TA", 3), "TS", "TS", "TA")
)
# does nothing when units are already TAs
expect_identical(
sps(0:5, 5),
sps(0:5, 5, alpha = 0.9)
)
})
test_that("strata sizes add up", {
s <- c(1, 2, 3, 2, 3, 1, 3, 2, 1, 3, 3, 1, 2, 1, 1, 2, 3, 1, 3, 2, 2)
s <- factor(s, 1:4)
x <- c(1:10, 10:0)
alloc <- prop_allocation(x, 11, s)
samp <- sps(x, alloc, s)
expect_identical(
tabulate(s[samp], nbins = 4),
as.vector(alloc)
)
})
test_that("permanent random numbers work", {
set.seed(4321)
prn <- runif(11)
expect_identical(
sps(c(100, 1:9, 100), 5, prn = prn),
sps(c(100, 1:9, 100), 5, prn = prn)
)
set.seed(4321)
expect_identical(
sps(c(100, 1:9, 100), 5, prn = prn),
sps(c(100, 1:9, 100), 5)
)
set.seed(4321)
expect_identical(
ps(c(100, 1:9, 100), 5, prn = prn),
ps(c(100, 1:9, 100), 5)
)
})
test_that("extending a stratified sample works", {
set.seed(1432)
u <- runif(100)
x <- c(runif(98), 100, 200)
samp <- sps(x, c(5, 6), rep(1:2, each = 50), u)
drop <- c(10, 100, 54)
samp2 <- sps(x[-drop], c(4, 4), rep(1:2, each = 50)[-drop], u[-drop])
expect_identical(
x[samp[-match(drop, samp)]],
x[-drop][samp2]
)
})
test_that("top-up sampling works", {
set.seed(15243)
u <- runif(10)
x <- 1:10
expect_true(all(sps(x, 4, prn = u)[1:4] %in% sps(x, 5, prn = u)))
})
test_that("pareto order sampling works", {
pareto <- order_sampling(function(x) x / (1 - x))
u <- runif(20)
expect_identical(
as.vector(pareto(rep(1, 20), c(5, 6), rep(1:2, 10), u)),
sort(
c(
seq(1L, 20L, 2L)[order(u[seq(1L, 20L, 2L)])[1:5]],
seq(2L, 20L, 2L)[order(u[seq(2L, 20L, 2L)])[1:6]]
)
)
)
# shift prns
u <- 1:9 / 10
v <- (u - 0.49) %% 1
expect_identical(
as.integer(pareto(rep(1, 9), 5, prn = u)),
1:5
)
expect_identical(
as.integer(pareto(rep(1, 9), 5, prn = v)),
5:9
)
})
test_that("ties are broken by position", {
x <- c(4, 1, 3, 2, 4)
expect_identical(
as.vector(sps(x, 3, prn = inclusion_prob(x, 3))),
1:3
)
})
test_that("cutoff units are included", {
x <- c(4, 1, 3, 2, 4)
expect_true(all(c(1, 5) %in% sps(x, 3, cutoff = 4)))
})
test_that("attributes get removed", {
samp <- sps(1:5, 3)
# mathematical functions should treat 'sps' objects as numeric vectors
expect_true(inherits(log(samp), "numeric"))
expect_true(inherits(1L + samp, "integer"))
expect_true(inherits(samp / 2, "numeric"))
expect_true(inherits(samp > samp, "logical"))
expect_true(inherits(-samp, "integer"))
# and replacement methods
expect_true(inherits(replace(samp, 1, 1), "numeric"))
expect_true(inherits(replace(samp, 1, 1L), "integer"))
length(samp) <- 2
expect_true(inherits(samp, "integer"))
})
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.