Nothing
# Tests for distribution functions
#
# Author: mjskay
###############################################################################
suppressWarnings(suppressPackageStartupMessages({
library(distributional)
}))
# wrapped distributions ----------------------------------------------------
test_that("distribution functions work on wrapped distributions", {
expect_equal(distr_pdf(dist_wrap("norm", 1, 2))(-2:2), dnorm(-2:2, 1, 2))
expect_equal(distr_cdf(dist_wrap("norm", 1, 2))(-2:2), pnorm(-2:2, 1, 2))
expect_equal(distr_quantile(dist_wrap("norm", 1, 2))(ppoints(5)), qnorm(ppoints(5), 1, 2))
expect_equal(
distr_point_interval(dist_wrap("norm", 1, 2), median_qi, trans = scales::identity_trans()),
tibble(
.value = 1,
.lower = qnorm(0.025, 1, 2),
.upper = qnorm(0.975, 1, 2),
.width = 0.95,
.point = "median",
.interval = "qi"
)
)
})
# weighted sample distributions -------------------------------------------
test_that("distribution functions work on weighted sample distributions", {
x = .dist_weighted_sample(list(qnorm(ppoints(20000), mean = c(1,5), c(1,2))), list(rep(c(1,3), 10000)))
ref = dist_mixture(dist_normal(1,1), dist_normal(5,2), weights = c(1,3)/4)
eps = 0.005
expect_equal(mean(x), mean(ref), tolerance = eps)
expect_equal(median(x), median(ref), tolerance = eps)
expect_equal(Mode(x), 5, tolerance = 0.01)
expect_equal(variance(x), variance(ref), tolerance = eps)
expect_equal(distr_pdf(x)(2), distr_pdf(ref)(2), tolerance = eps)
expect_equal(distr_cdf(x)(1), distr_cdf(ref)(1), tolerance = eps)
expect_equal(distr_quantile(x)(0.5), distr_quantile(ref)(0.5), tolerance = eps)
expect_equal(format(x), "weighted_sample[20000]")
})
# distributional objects --------------------------------------------------
test_that("distribution functions work on distributional objects", {
x = dist_normal(1,2)
expect_equal(distr_pdf(x)(-2:2), dnorm(-2:2, 1, 2))
expect_equal(distr_cdf(x)(-2:2), pnorm(-2:2, 1, 2))
expect_equal(distr_quantile(x)(ppoints(5)), qnorm(ppoints(5), 1, 2))
# with subsetting
expect_equal(distr_pdf(x[[1]])(-2:2), dnorm(-2:2, 1, 2))
expect_equal(distr_cdf(x[[1]])(-2:2), pnorm(-2:2, 1, 2))
expect_equal(distr_quantile(x[[1]])(ppoints(5)), qnorm(ppoints(5), 1, 2))
})
# sample distributions ----------------------------------------------------
test_that("sample distributions can be detected and samples extracted", {
x = dist_sample(list(1:10))
expect_equal(distr_is_sample(x), TRUE)
expect_equal(distr_get_sample(x), 1:10)
x = vctrs::field(dist_sample(list(1:10)), 1)
expect_equal(distr_is_sample(x), TRUE)
expect_equal(distr_get_sample(x), 1:10)
# RVAR
skip_if_not_installed("posterior")
x = posterior::rvar(1:10L)
expect_equal(distr_is_sample(x), TRUE)
expect_equal(as.vector(distr_get_sample(x)), 1:10)
expect_equal(distr_is_discrete(x), TRUE)
x = posterior::rvar(1:10/2)
expect_equal(distr_is_discrete(x), FALSE)
})
# constant distributions --------------------------------------------------
test_that("constant distributions are detected correctly", {
expect_equal(distr_is_constant(dist_normal(0,1)), FALSE)
expect_equal(distr_is_constant(dist_normal(0,.Machine$double.eps)), FALSE)
expect_equal(distr_is_constant(dist_normal(0,0)), TRUE)
expect_equal(distr_is_constant(dist_wrap("lnorm",1,0)), TRUE)
expect_equal(distr_is_constant(dist_sample(list(1))), TRUE)
expect_equal(distr_is_constant(dist_sample(list(c(2,2,2)))), TRUE)
expect_equal(distr_is_constant(dist_sample(list(c(1,2,3)))), FALSE)
expect_false(distr_is_constant(dist_mixture(dist_degenerate(1L), dist_degenerate(2L), weights = c(0.3, 0.7))))
expect_true(distr_is_constant(dist_mixture(dist_degenerate(1L), dist_degenerate(1L), weights = c(0.3, 0.7))))
skip_if_not_installed("posterior")
expect_equal(distr_is_constant(posterior::rvar(1)), TRUE)
expect_equal(distr_is_constant(posterior::rvar(c(3,3,3))), TRUE)
expect_equal(distr_is_constant(posterior::rvar(c(1,2,3))), FALSE)
})
# factor rvars ----------------------------------------------------
test_that("distribution functions work on factor rvars", {
skip_if_not_installed("posterior")
x_values = c("a","a","b","b","b","c","c","c","c")
x_ordered = posterior::rvar_ordered(x_values)
expect_equal(distr_cdf(x_ordered)(1:3), c(2,5,9)/9)
expect_equal(distr_pdf(x_ordered)(1:3), c(2,3,4)/9)
expect_equal(distr_quantile(x_ordered)(c(2,5,9)/9), c("a","b","c"))
x_factor = posterior::rvar_factor(x_values)
expect_equal(distr_cdf(x_factor)(1:3), c(NA_real_,NA_real_,NA_real_))
expect_equal(distr_pdf(x_factor)(1:3), c(2,3,4)/9)
expect_equal(distr_quantile(x_factor)(c(2,5,9)/9), c(NA_real_,NA_real_,NA_real_))
expect_equal(
distr_point_interval(x_ordered, median_qi, trans = scales::identity_trans()),
tibble(
.value = 2,
.lower = 1,
.upper = 3,
.width = 0.95,
.point = "median",
.interval = "qi"
)
)
})
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.