Nothing
context("Sampling directly from the truncated distibution")
test_that("Original attributes are retrieved", {
set.seed(2723347)
# Normal
norm <- list(
rtrunc(1e4, mean = 1, sd = 2, faster = TRUE),
rtruncnorm(1e4, mean = 1, sd = 2, faster = TRUE)
)
for (norm_1 in norm) {
expect_equal(
mlEstimationTruncDist(norm_1),
c("mean" = 1, "sd" = 2),
tolerance = 1e-2
)
expect_equal(
attributes(norm_1),
list(
"class" = "trunc_normal",
"parameters" = list("mean" = 1, "sd" = 2),
"truncation_limits" = list("a" = -Inf, "b" = Inf),
"continuous" = TRUE
)
)
}
# Beta
beta <- list(
rtrunc(1e4, shape1 = 3, shape2 = 9, faster = TRUE, family = "beta"),
rtruncbeta(1e4, shape1 = 3, shape2 = 9, faster = TRUE)
)
for (beta_1 in beta) {
expect_equal(
mlEstimationTruncDist(beta_1),
c("shape1" = 3, "shape2" = 9),
tolerance = 1e-1
)
expect_equal(
attributes(beta_1),
list(
"class" = "trunc_beta",
"parameters" = list("shape1" = 3, "shape2" = 9),
"truncation_limits" = list("a" = 0, "b" = 1),
"continuous" = TRUE
)
)
}
# Chisq
chisq <- list(
rtrunc(1e4, df = 30, faster = TRUE, family = "chisq"),
rtruncchisq(1e4, df = 30, faster = TRUE)
)
for (chisq_1 in chisq) {
expect_equal(
attributes(chisq_1),
list(
"class" = "trunc_chisq",
"parameters" = list("df" = 30),
"truncation_limits" = list("a" = 0, "b" = Inf),
"continuous" = TRUE
)
)
expect_equal(
mlEstimationTruncDist(chisq_1),
c("df" = 30),
tolerance = 1e-2
)
}
# Contbern
contbern <- list(
rtrunc(1e4, lambda = .6, faster = TRUE, family = "contbern"),
rtrunccontbern(1e4, lambda = .6, faster = TRUE)
)
for (contbern_1 in contbern) {
expect_equal(
attributes(contbern_1),
list(
"class" = "trunc_contbern",
"parameters" = list("lambda" = .6),
"truncation_limits" = list("a" = 0, "b" = 1),
"continuous" = TRUE
)
)
expect_equal(
mlEstimationTruncDist(contbern_1),
c("lambda" = .6),
tolerance = 1e-1
)
}
# Exp
exp <- list(
rtrunc(1e4, rate = 64, faster = TRUE, family = "exp"),
rtruncexp(1e4, rate = 64, faster = TRUE)
)
for (exp_1 in exp) {
expect_equal(
attributes(exp_1),
list(
"class" = "trunc_exp",
"parameters" = list("rate" = 64),
"truncation_limits" = list("a" = 0, "b" = Inf),
"continuous" = TRUE
)
)
expect_equal(
mlEstimationTruncDist(exp_1),
c("rate" = 1 / 64),
tolerance = 1e-2
)
}
# Gamma
gamma <- list(
rtrunc(1e4, shape = 4, rate = 3, faster = TRUE, family = "gamma"),
rtruncgamma(1e4, shape = 4, rate = 3, faster = TRUE)
)
for (gamma_1 in gamma) {
expect_equal(
attributes(gamma_1),
list(
"class" = "trunc_gamma",
"parameters" = list("shape" = 4, "rate" = 3),
"truncation_limits" = list("a" = 0, "b" = Inf),
"continuous" = TRUE
)
)
expect_equal(
mlEstimationTruncDist(gamma_1),
c("shape" = 4, "rate" = 3),
tolerance = 1e-1
)
}
gamma <- list(
rtrunc(1e4, scale = 3, shape = 4, faster = TRUE, family = "gamma"),
rtruncgamma(1e4, scale = 3, shape = 4, faster = TRUE)
)
for (gamma_2 in gamma) {
expect_equal(
attributes(gamma_2),
list(
"class" = "trunc_gamma",
"parameters" = list("shape" = 4, "rate" = 1 / 3),
"truncation_limits" = list("a" = 0, "b" = Inf),
"continuous" = TRUE
)
)
expect_equal(
mlEstimationTruncDist(gamma_2),
c("shape" = 4, "rate" = 1 / 3),
tolerance = 1e-1
)
}
# Inv Gamma
invgamma <- list(
rtrunc(1e4, rate = 3, shape = 4, faster = TRUE, family = "invgamma"),
rtruncinvgamma(1e4, rate = 3, shape = 4, faster = TRUE)
)
for (invgamma_1 in invgamma) {
expect_equal(
attributes(invgamma_1),
list(
"class" = "trunc_invgamma",
"parameters" = list("shape" = 4, "rate" = 3),
"truncation_limits" = list("a" = 0, "b" = Inf),
"continuous" = TRUE
)
)
expect_equal(
mlEstimationTruncDist(invgamma_1),
c("shape" = 4, "rate" = 3),
tolerance = 1e-1
)
}
invgamma <- list(
rtrunc(1e4, scale = 3, shape = 4, faster = TRUE, family = "invgamma"),
rtruncinvgamma(1e4, scale = 3, shape = 4, faster = TRUE)
)
for (invgamma_2 in invgamma) {
expect_equal(
attributes(invgamma_2),
list(
"class" = "trunc_invgamma",
"parameters" = list("shape" = 4, "rate" = 1 / 3),
"truncation_limits" = list("a" = 0, "b" = Inf),
"continuous" = TRUE
)
)
expect_equal(
mlEstimationTruncDist(invgamma_2),
c("shape" = 4, "rate" = 1 / 3),
tolerance = 1e-1
)
}
# Inv Gauss
invgausses <- list(
rtrunc(1e3, m = 61, s = 7, faster = TRUE, family = "invgauss"),
rtruncinvgauss(1e3, m = 61, s = 7, faster = TRUE)
)
for (invgauss in invgausses) {
expect_equal(
attributes(invgauss),
list(
"class" = "trunc_invgauss",
"parameters" = list("m" = 61, "s" = 7),
"truncation_limits" = list("a" = 0, "b" = Inf),
"continuous" = TRUE
)
)
expect_equal(
mlEstimationTruncDist(invgauss, delta = .01),
c("m" = 61, "s" = 7),
tolerance = 1e1
)
}
# Log-normal
invlnorm <- list(
rtrunc(1e4, meanlog = 4, sdlog = 1, faster = TRUE, family = "lognormal"),
rtrunclnorm(1e4, meanlog = 4, sdlog = 1, faster = TRUE)
)
for (iv in invlnorm) {
expect_equal(
attributes(iv),
list(
"class" = "trunc_lognormal",
"parameters" = list("meanlog" = 4, "sdlog" = 1),
"truncation_limits" = list("a" = 0, "b" = Inf),
"continuous" = TRUE
)
)
expect_equal(
mlEstimationTruncDist(iv),
c("meanlog" = 4, "sdlog" = 1),
tolerance = 1e-1
)
}
# Poisson
lb <- 29L
poissons <- list(
rtrunc(1e4, lambda = lb, faster = TRUE, family = "poisson"),
rtruncpois(1e4, lambda = lb, faster = TRUE)
)
for (smp in poissons) {
expect_equal(
attributes(smp),
list(
"class" = "trunc_poisson",
"parameters" = list("lambda" = lb),
"truncation_limits" = list("a" = 0, "b" = Inf),
"continuous" = FALSE
)
)
expect_equal(
mlEstimationTruncDist(smp),
c("lambda" = lb),
tolerance = 1e-1
)
}
# Binomial
sz <- rpois(1, 20)
pb <- runif(1)
binomials <- list(
rtrunc(1e4, size = sz, prob = pb, faster = TRUE, family = "binomial"),
rtruncbinom(1e4, size = sz, prob = pb, faster = TRUE)
)
for (smp in binomials) {
expect_equal(
attributes(smp),
list(
"class" = "trunc_binomial",
"parameters" = list("size" = sz, "prob" = pb),
"truncation_limits" = list("a" = 0, "b" = sz),
"continuous" = FALSE
)
)
expect_equal(
mlEstimationTruncDist(smp),
c("prob" = pb),
tolerance = 1e-1
)
}
# Negative Binomial
sz <- rpois(1, 20)
pb <- runif(1)
nbinomials <- list(
rtrunc(1e4, size = sz, prob = pb, faster = TRUE, family = "nbinom"),
rtruncnbinom(1e4, size = sz, prob = pb, faster = TRUE)
)
for (smp in nbinomials) {
expect_equal(
attributes(smp),
list(
"class" = "trunc_nbinom",
"parameters" = list("size" = sz, "prob" = pb),
"truncation_limits" = list("a" = 0, "b" = Inf),
"continuous" = FALSE
)
)
expect_equal(
mlEstimationTruncDist(smp),
c("mean" = sz * (1 - pb) / pb),
tolerance = 1e-1
)
}
})
test_that("Tight truncation limits is not a speed limiter", {
time_limit <- 2
n <- 1e4L
# Normal
expect_error({
setTimeLimit(time_limit)
rtrunc(n, mean = 5, sd = .2, a = 5.5)
},
"reached CPU time limit"
)
expect_length(rtrunc(n, mean = 5, sd = .2, a = 5.5, faster = TRUE), n)
# Beta
expect_error({
setTimeLimit(time_limit)
rtrunc(n, family = "beta", shape1 = 4, shape2 = 5, b = .02)
},
"reached CPU time limit"
)
expect_length(
rtrunc(n, family = "beta", shape1 = 4, shape2 = 5, b = .02, faster = TRUE),
n
)
# Chisq
expect_error({
setTimeLimit(time_limit)
rtrunc(n, family = "chisq", df = 10, b = 1)
},
"reached CPU time limit"
)
expect_length(
rtrunc(n, family = "chisq", df = 10, b = 1, faster = TRUE),
n
)
# Contbern
expect_error({
setTimeLimit(time_limit)
rtrunc(n, family = "contbern", lambda = .8, a = .1, b = .2)
},
"reached CPU time limit"
)
expect_length(
rtrunc(n, family = "contbern", lambda = .8, a = .1, b = .2, faster = TRUE),
n
)
# Exp
expect_error({
setTimeLimit(time_limit)
rtrunc(n, rate = .2, family = "exp", b = .1)
},
"reached CPU time limit"
)
expect_length(
rtrunc(n, rate = .2, family = "exp", b = .1, faster = TRUE),
n
)
# Gamma
expect_error({
setTimeLimit(time_limit)
rtrunc(n, family = "gamma", shape = 5, rate = 4, a = 4)
},
"reached CPU time limit"
)
expect_length(
rtrunc(n, family = "gamma", shape = 5, rate = 4, a = 4, faster = TRUE),
n
)
# Inv Gamma
expect_error({
setTimeLimit(time_limit)
rtrunc(n, family = "invgamma", shape = 5, rate = 4, a = 4)
},
"reached CPU time limit"
)
expect_length(
rtrunc(n, family = "invgamma", shape = 5, rate = 4, a = 4, faster = TRUE),
n
)
# Inv Gauss
expect_error({
setTimeLimit(time_limit)
rtrunc(n, family = "invgauss", m = 5, s = 4, a = 4, b = 100)
},
"reached CPU time limit"
)
expect_length(
rtrunc(n, family = "invgauss", m = 5, s = 4, a = 4, b = 100, faster = TRUE),
n
)
# Lognormal
expect_error({
setTimeLimit(time_limit)
rtrunc(n, family = "lognormal", meanlog = 5, sdlog = 2, a = 150, b = 160)
},
"reached CPU time limit"
)
expect_length(
rtrunc(
n, family = "lognormal", meanlog = 5, sdlog = 2, a = 150, b = 160,
faster = TRUE
),
n
)
# Poisson
n <- 1e5L
expect_error({
setTimeLimit(time_limit)
rtrunc(n, family = "poisson", lambda = 10, a = 8, b = 15)
},
"reached CPU time limit"
)
expect_length(
rtrunc(
n, family = "poisson", lambda = 10, a = 8, b = 15, faster = TRUE),
n
)
# Binomial
n <- 1e5L
expect_error({
setTimeLimit(time_limit)
rtrunc(n, family = "binomial", size = 10, prob = .1, a = 5)
},
"reached CPU time limit"
)
expect_length(
rtrunc(n, family = "binomial", size = 10, prob = .1, a = 5, faster = TRUE),
n
)
# Negative Binomial
n <- 1e5L
expect_error({
setTimeLimit(time_limit)
rtrunc(n, family = "nbinom", size = 100, prob = .8, b = 10)
},
"reached CPU time limit"
)
expect_length(
rtrunc(n, family = "nbinom", size = 100, prob = .8, b = 10, faster = TRUE),
n
)
})
setTimeLimit(Inf)
test_that("Truncation limits are respected for faster = TRUE", {
sz <- 1e3L
smp <- rtrunc(
sz, "beta", shape1 = 4, shape2 = 5, faster = TRUE, a = .5, b = .7
)
expect_gte(min(smp), .5)
expect_lte(max(smp), .7)
smp <- rtrunc(
sz, "binomial", size = 93, prob = .39, faster = TRUE, a = 33, b = 40
)
expect_gte(min(smp), 33)
expect_lte(max(smp), 40)
smp <- rtrunc(sz, "chisq", df = 61, a = 50, b = 70, faster = TRUE)
expect_gte(min(smp), 50)
expect_lte(max(smp), 70)
smp <- rtrunc(sz, "contbern", lambda = .44, faster = TRUE, a = .5, b = .8)
expect_gte(min(smp), .5)
expect_lte(max(smp), .8)
smp <- rtrunc(sz, "exp", rate = 4, faster = TRUE, a = .1, b = .2)
expect_gte(min(smp), .1)
expect_lte(max(smp), .2)
smp <- rtrunc(
sz, "gamma", shape = 18, rate = 70, faster = TRUE, a = .2, b = .5
)
expect_gte(min(smp), .2)
expect_lte(max(smp), .5)
smp <- rtrunc(
sz, "invgamma", shape = 1, rate = 7, faster = TRUE, a = 10, b = 20
)
expect_gte(min(smp), 10)
expect_lte(max(smp), 20)
smp <- rtrunc(sz, "invgauss", m = 56, s = 3, faster = TRUE, a = 30, b = 40)
expect_gte(min(smp), 30)
expect_lte(max(smp), 40)
smp <- rtrunc(
sz, "lognormal", meanlog = 23, sdlog = 6, faster = TRUE, a = 10, b = 100
)
expect_gte(min(smp), 10)
expect_lte(max(smp), 100)
smp <- rtrunc(
sz, "nbinom", size = 54, mu = 33, faster = TRUE, a = 60, b = 80
)
expect_gte(min(smp), 60)
expect_lte(max(smp), 80)
smp <- rtrunc(sz, "normal", mean = 23, sd = 6, faster = TRUE, a = 30, b = 40)
expect_gte(min(smp), 30)
expect_lte(max(smp), 40)
smp <- rtrunc(sz, "poisson", lambda = 886, faster = TRUE, a = 900, b = 910)
expect_gte(min(smp), 900)
expect_lte(max(smp), 910)
})
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.