Nothing
context("ptrunc(), doubly truncated")
test_that("doubly-truncated ptrunc works as expected (normal)", {
lt <- TRUE
lg <- FALSE
for (lt in c(TRUE, FALSE)) {
for (lg in c(FALSE, TRUE)) {
for (i in seq_len(3L)) {
mn <- rnorm(1L, sd = 10)
sg <- rchisq(1L, 5L)
qt <- rnorm(i, mn, sg)
a <- min(qt) - rchisq(1L, 5L)
b <- max(qt) + rchisq(1L, 5L)
p_trunc <- ptrunc(
qt, "gaussian", mn, sg, a, b, lower.tail = lt, log.p = lg
)
p_norm <- pnorm(qt, lower.tail = lt, log.p = lg, mean = mn, sd = sg)
expect_length(qt, i)
expect_length(p_trunc, i)
for (q in seq_along(qt)) {
if (!lg) {
expect_gte(p_trunc[q], 0)
expect_lte(p_trunc[q], 1)
} else {
expect_lte(p_trunc[q], 0)
}
}
}
}
}
})
test_that("doubly-truncated ptrunc() works as expected (beta)", {
for (lt in c(TRUE, FALSE)) {
for (lg in c(FALSE, TRUE)) {
for (i in seq_len(3L)) {
shp1 <- sample(1:10, 1L)
shp2 <- sample(1:10, 1L)
b <- runif(1)
a <- b * runif(1)
qt <- runif(i, a, b)
p_trunc <- ptrunc(
qt, "beta", shp1, shp2, a, b, lower.tail = lt, log.p = lg
)
p_beta <- pbeta(qt, shp1, shp2, ncp = 0, lt, lg)
expect_length(qt, i)
expect_length(p_trunc, i)
for (q in seq_along(qt)) {
if (!lg) {
expect_gte(p_trunc[q], 0)
expect_lte(p_trunc[q], 1)
} else {
expect_lte(p_trunc[q], 0)
}
}
}
}
}
})
test_that("doubly-truncated ptrunc() works as expected (binomial)", {
for (lt in c(TRUE, FALSE)) {
for (lg in c(FALSE, TRUE)) {
for (i in seq_len(3L)) {
size <- sample(10:50, 1L)
prob <- runif(1L)
qt <- rbinom(i, size, prob)
a <- rbinom(1L, size, prob)
b <- rbinom(1L, size, prob)
while (any(a > qt)) {
a <- rbinom(1L, size, prob)
}
while (any(b < qt)) {
b <- rbinom(1L, size, prob)
}
p_trunc <- ptrunc(
qt, "binomial", size, prob, a, b, lower.tail = lt, log.p = lg
)
p_binom <- pbinom(qt, size, prob, lower.tail = lt, log.p = lg)
expect_length(qt, i)
expect_length(p_trunc, i)
for (q in seq_along(qt)) {
if (!lg) {
expect_gte(p_trunc[q], 0)
expect_lte(p_trunc[q], 1)
} else {
expect_lte(p_trunc[q], 0)
}
}
}
}
}
})
test_that("doubly-truncated ptrunc() works as expected (poisson)", {
for (lt in c(TRUE, FALSE)) {
for (lg in c(FALSE, TRUE)) {
for (i in seq_len(3L)) {
lambda <- sample(1:50, 1L)
a <- sample(1:(lambda - 4L), 1L)
b <- sample((a + 3L):lambda, 1L)
qt <- sample(seq(a + 1L, b - 1L), i, replace = TRUE)
p_trunc <- ptrunc(
qt, "poisson", lambda, a, b, lower.tail = lt, log.p = lg
)
p_pois <- ppois(qt, lambda, lower.tail = lt, log.p = lg)
expect_length(qt, i)
expect_length(p_trunc, i)
for (q in seq_along(qt)) {
if (!lg) {
expect_gte(p_trunc[q], 0)
expect_lte(p_trunc[q], 1)
} else {
expect_lte(p_trunc[q], 0)
}
}
}
}
}
})
test_that("doubly-truncated ptrunc() works as expected (chisq)", {
for (lt in c(TRUE, FALSE)) {
for (lg in c(FALSE, TRUE)) {
for (i in seq_len(3L)) {
df <- sample(1:100, 1L)
a <- min(rchisq(10L, df))
b <- max(rchisq(10L, df))
qt <- runif(i, a, b)
p_trunc <- ptrunc(
qt, "chisq", df, a, b, lower.tail = lt, log.p = lg
)
p_chisq <- pchisq(qt, df, ncp = 0, lower.tail = lt, log.p = lg)
expect_length(qt, i)
expect_length(p_trunc, i)
for (q in seq_along(qt)) {
if (!lg) {
expect_gte(p_trunc[q], 0)
expect_lte(p_trunc[q], 1)
} else {
expect_lte(p_trunc[q], 0)
}
}
}
}
}
})
test_that("doubly-truncated ptrunc() works as expected (contbern)", {
for (i in seq_len(3L)) {
lambda <- runif(1L)
a <- runif(1L)
b <- runif(1L, a, 1L)
qt <- runif(i, a, b)
p_trunc <- ptrunc(qt, "contbern", lambda, b = b)
p_contbern <- pcontbern(qt, lambda)
expect_length(qt, i)
expect_length(p_trunc, i)
for (q in seq_along(qt)) {
expect_gte(p_trunc[q], p_contbern[q])
}
}
})
test_that("doubly-truncated ptrunc() works as expected (exp)", {
for (lt in c(TRUE, FALSE)) {
for (lg in c(FALSE, TRUE)) {
for (i in seq_len(3L)) {
rate <- rchisq(1L, df = 10L)
a <- rexp(1L, rate)
b <- rexp(1L, rate)
while (b <= a) {
b <- rexp(1L, rate)
}
qt <- runif(i, a, b)
p_trunc <- ptrunc(
qt, "exp", rate, a, b, lower.tail = lt, log.p = lg
)
p_exp <- pexp(qt, rate, lower.tail = lt, log.p = lg)
expect_length(qt, i)
expect_length(p_trunc, i)
for (q in seq_along(qt)) {
if (!lg) {
expect_gte(p_trunc[q], 0)
expect_lte(p_trunc[q], 1)
} else {
expect_lte(p_trunc[q], 0)
}
}
}
}
}
})
test_that("doubly-truncated ptrunc() works as expected (gamma)", {
for (lt in c(TRUE, FALSE)) {
for (lg in c(FALSE, TRUE)) {
for (i in seq_len(3L)) {
shp <- rchisq(1L, df = 10L)
rte <- rchisq(1L, df = 10L)
ab <- rgamma(2L, shp, rte)
a <- min(ab)
b <- max(ab)
qt <- runif(i, a, b)
p_trunc <- ptrunc(
qt, "gamma", shape = shp, rate = rte, a = a, b = b, lower.tail = lt,
log.p = lg
)
p_trunc_2 <- ptrunc(
qt, "gamma", shape = shp, scale = 1 / rte, a = a, b = b,
lower.tail = lt, log.p = lg
)
p_gamma <- pgamma(qt, shp, rte, lower.tail = lt, log.p = lg)
expect_length(qt, i)
expect_length(p_trunc, i)
for (q in seq_along(qt)) {
if (!lg) {
expect_gte(p_trunc[q], 0)
expect_lte(p_trunc[q], 1)
expect_gte(p_trunc_2[q], 0)
expect_lte(p_trunc_2[q], 1)
} else {
expect_lte(p_trunc[q], 0)
expect_lte(p_trunc_2[q], 0)
}
}
expect_equal(p_trunc, p_trunc_2)
}
}
}
})
test_that("doubly-truncated ptrunc() works as expected (invgamma)", {
for (lt in c(TRUE, FALSE)) {
for (lg in c(FALSE, TRUE)) {
for (i in seq_len(3L)) {
shp <- rchisq(1L, df = 10L)
rte <- rchisq(1L, df = 10L)
ab <- rinvgamma(2L, shp, rte)
a <- min(ab)
b <- max(ab)
qt <- runif(i, a, b)
p_trunc <- ptrunc(
qt, "invgamma", shape = shp, rate = rte, a = a, b = b,
lower.tail = lt, log.p = lg
)
p_trunc_2 <- ptrunc(
qt, "invgamma", shape = shp, scale = 1 / rte, a = a, b = b,
lower.tail = lt, log.p = lg
)
p_invgamma <- pinvgamma(qt, shp, rte, lower.tail = lt, log.p = lg)
expect_length(qt, i)
expect_length(p_trunc, i)
for (q in seq_along(qt)) {
if (!lg) {
expect_gte(p_trunc[q], 0)
expect_lte(p_trunc[q], 1)
expect_gte(p_trunc_2[q], 0)
expect_lte(p_trunc_2[q], 1)
} else {
expect_lte(p_trunc[q], 0)
expect_lte(p_trunc_2[q], 0)
}
}
expect_equal(p_trunc, p_trunc_2)
}
}
}
})
test_that("doubly-truncated ptrunc() works as expected (invgauss)", {
for (i in seq_len(3L)) {
m <- rchisq(1L, df = 10L)
s <- rchisq(1L, df = 10L)
a <- min(rinvgauss(10L, m, s))
b <- max(rinvgauss(10L, m, s), a)
qt <- runif(i, a, b)
p_trunc <- ptrunc(qt, "invgauss", m, s, a = a, b = b)
p_invgauss <- pinvgauss(qt, m, s)
expect_length(qt, i)
expect_length(p_trunc, i)
for (q in seq_along(qt)) {
expect_gte(p_trunc[q], 0)
expect_lte(p_trunc[q], 1)
}
}
})
test_that("doubly-truncated ptrunc() works as expected (lognormal)", {
for (lt in c(TRUE, FALSE)) {
for (lg in c(FALSE, TRUE)) {
for (i in seq_len(3L)) {
meanlog <- rnorm(1L, sd = 10)
sdlog <- rchisq(1L, 5L)
qt <- rlnorm(i, meanlog, sdlog)
a <- rlnorm(1L, meanlog, sdlog)
b <- rlnorm(1L, meanlog, sdlog)
while (any(a > qt)) {
a <- rlnorm(1L, meanlog, sdlog)
}
while (any(b < qt)) {
b <- rlnorm(1L, meanlog, sdlog)
}
p_trunc <- ptrunc(
qt, "lognormal", meanlog, sdlog, a = a, b = b, lower.tail = lt,
log.p = lg
)
p_ln <- plnorm(qt, meanlog, sdlog, lower.tail = lt, log.p = lg)
expect_length(qt, i)
expect_length(p_trunc, i)
for (q in seq_along(qt)) {
if (!lg) {
expect_gte(p_trunc[q], 0)
expect_lte(p_trunc[q], 1)
} else {
expect_lte(p_trunc[q], 0)
}
}
}
}
}
})
test_that("doubly-truncated ptrunc() works as expected (negative binomial)", {
for (lt in c(TRUE, FALSE)) {
for (lg in c(FALSE, TRUE)) {
for (i in seq_len(3L)) {
size <- sample(1:10, 1L)
prob <- runif(1)
mu <- size * (1 - prob) / prob
qt <- rnbinom(i, size, prob)
b <- rnbinom(1L, size, prob)
a <- rnbinom(1L, size, prob)
while (any(a > qt)) {
a <- rnbinom(1L, size, prob)
}
while (any(b < qt)) {
b <- rnbinom(1L, size, prob)
}
p_trunc <- ptrunc(
qt, "nbinom", size, prob, lower.tail = lt, log.p = lg, a = a, b = b
)
p_trunc_2 <- ptrunc(
qt, "nbinom", size, mu = mu, lower.tail = lt, log.p = lg, a = a, b = b
)
p_binom <- pnbinom(qt, size, prob, lower.tail = lt, log.p = lg)
expect_length(qt, i)
expect_length(p_trunc, i)
expect_equal(p_trunc, p_trunc_2, tolerance = 1e-6)
for (q in seq_along(qt)) {
if (!lg) {
expect_gte(p_trunc[q], 0)
expect_lte(p_trunc[q], 1)
} else {
expect_lte(p_trunc[q], 0)
}
}
}
}
}
})
test_that("Basic errors are caught", {
for (distro in valid_distros) {
expect_error(ptrunc(2, distro, 1, 1, a = 3, b = 4), "must be in \\[a, b\\]")
expect_error(ptrunc(2, distro, 1, 1, a = 0, b = 1), "must be in \\[a, b\\]")
expect_error(ptrunc(2, distro, 1, 1, a = 3, b = 1), "a must be <= b")
}
expect_error(
ptrunc(9, "gamma", scale = 2, rate = 3),
"specify 'rate' or 'scale' but not both"
)
expect_error(
ptrunc(9, "invgamma", scale = 2, rate = 3),
"specify 'rate' or 'scale' but not both"
)
})
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.