Nothing
# Tests for point_interval
#
# Author: mjskay
###############################################################################
library(dplyr)
library(tidyr)
library(distributional)
ff_labels = c("a", "b", "c")
get_draws = function() {
#observations of tau grouped by the factor ff (with levels ff_labels)
data(RankCorr, package = "ggdist")
rank_corr = RankCorr[[1]]
bind_rows(lapply(1:3, function(i) {
data.frame(
.chain = 1L,
.iteration = seq_len(nrow(rank_corr)),
.draw = seq_len(nrow(rank_corr)),
ff = ff_labels[i],
tau = as.vector(rank_corr[, paste0("tau[", i, "]")])
)
}))
}
test_that("median_qi works on a grouped variable", {
draws = get_draws()
ref = draws %>%
group_by(ff) %>%
summarise(
tau.lower = as.vector(quantile(tau, .025)),
tau.upper = as.vector(quantile(tau, .975)),
tau = median(tau)
)
result_simple = draws %>%
group_by(ff) %>%
median_qi(tau)
result = draws %>%
group_by(ff) %>%
median_qi(tau, .simple_names = FALSE)
expect_equal(result_simple$tau, ref$tau)
expect_equal(result_simple$.lower, ref$tau.lower)
expect_equal(result_simple$.upper, ref$tau.upper)
expect_equal(result$tau, ref$tau)
expect_equal(result$tau.lower, ref$tau.lower)
expect_equal(result$tau.upper, ref$tau.upper)
})
test_that("mean_qi works on multiple columns", {
draws = get_draws() %>%
group_by(.iteration) %>%
spread(ff, tau) %>%
ungroup()
ref = draws %>%
summarise(
a.lower = as.vector(quantile(a, .025)),
a.upper = as.vector(quantile(a, .975)),
a = mean(a),
b.lower = as.vector(quantile(b, .025)),
b.upper = as.vector(quantile(b, .975)),
b = mean(b)
)
result = draws %>%
mean_qi(a, b)
expect_equal(result$a, ref$a)
expect_equal(result$a.lower, ref$a.lower)
expect_equal(result$a.upper, ref$a.upper)
expect_equal(result$b, ref$b)
expect_equal(result$b.lower, ref$b.lower)
expect_equal(result$b.upper, ref$b.upper)
})
test_that("mean_qi works on non-95% probs", {
draws = get_draws()
ref = draws %>%
summarise(
tau.lower = as.vector(quantile(tau, .25)),
tau.upper = as.vector(quantile(tau, .75)),
tau = mean(tau)
)
result = draws %>%
mean_qi(tau, .width = .5)
expect_equal(result$tau, ref$tau)
expect_equal(result$.lower, ref$tau.lower)
expect_equal(result$.upper, ref$tau.upper)
})
test_that("mean_qi works on multiple probs with groups", {
draws = get_draws()
ref95 = draws %>%
group_by(ff) %>%
summarise(
.lower = as.vector(quantile(tau, .025)),
.upper = as.vector(quantile(tau, .975)),
tau = mean(tau),
.width = .95,
.point = "mean",
.interval = "qi"
) %>%
select(ff, tau, .lower, .upper, .width, .point, .interval)
ref50 = draws %>%
group_by(ff) %>%
summarise(
.lower = as.vector(quantile(tau, .25)),
.upper = as.vector(quantile(tau, .75)),
tau = mean(tau),
.width = .5,
.point = "mean",
.interval = "qi"
) %>%
select(ff, tau, .lower, .upper, .width, .point, .interval)
ref = bind_rows(ref50, ref95)
result = draws %>%
group_by(ff) %>%
mean_qi(tau, .width = c(.5, .95))
result_list = draws %>%
group_by(ff) %>%
summarise_at("tau", list) %>%
mean_qi(tau, .width = c(.5, .95))
expect_equal(as.data.frame(result), as.data.frame(ref))
expect_equal(as.data.frame(result_list), as.data.frame(ref))
})
test_that("mean_qi works on multiple probs with multiple vars", {
draws = get_draws() %>%
mutate(tau2 = tau * 2)
ref95 = draws %>%
group_by(ff) %>%
summarise(
tau.lower = as.vector(quantile(tau, .025)),
tau.upper = as.vector(quantile(tau, .975)),
tau = mean(tau),
tau2.lower = as.vector(quantile(tau2, .025)),
tau2.upper = as.vector(quantile(tau2, .975)),
tau2 = mean(tau2),
.width = .95,
.point = "mean",
.interval = "qi"
) %>%
select(ff, tau, tau.lower, tau.upper, tau2, tau2.lower, tau2.upper, .width, .point, .interval)
ref50 = draws %>%
group_by(ff) %>%
summarise(
tau.lower = as.vector(quantile(tau, .25)),
tau.upper = as.vector(quantile(tau, .75)),
tau = mean(tau),
tau2.lower = as.vector(quantile(tau2, .25)),
tau2.upper = as.vector(quantile(tau2, .75)),
tau2 = mean(tau2),
.width = .50,
.point = "mean",
.interval = "qi"
) %>%
select(ff, tau, tau.lower, tau.upper, tau2, tau2.lower, tau2.upper, .width, .point, .interval)
ref = bind_rows(ref50, ref95)
result = draws %>%
group_by(ff) %>%
mean_qi(tau, tau2, .width = c(.5, .95))
result_list = draws %>%
group_by(ff) %>%
summarise_at(c("tau", "tau2"), list) %>%
mean_qi(tau, tau2, .width = c(.5, .95))
expect_equal(as.data.frame(result), as.data.frame(ref))
expect_equal(as.data.frame(result_list), as.data.frame(ref))
})
test_that("mean_qi correctly identifies the desired columns when ... is empty", {
testdf = tibble(
.chain = 1:1000,
.iteration = 1:1000,
.draw = 1:1000,
.row = 1:1000,
.x = c(qnorm(ppoints(500)), qnorm(ppoints(500), 1)),
y = c(qnorm(ppoints(500), 2), qnorm(ppoints(500), 3)),
g = c(rep("a", 500), rep("b", 500))
) %>%
group_by(g)
expect_equal(mean_qi(testdf, .x, y), mean_qi(testdf))
})
test_that("multiple-response intervals work", {
set.seed(1234)
dd = tibble(
x = c(rnorm(1000), rnorm(1000, mean = 5))
)
ref = dd %>%
summarise(
.lower = list(hdi(x, .width = .5)[, 1]),
.upper = list(hdi(x, .width = .5)[, 2]),
x = Mode(x),
.width = .5,
.point = "mode",
.interval = "hdi"
) %>%
unnest(c(.lower, .upper)) %>%
select(x, everything())
expect_equal(mode_hdi(dd, x, .width = .5), ref)
})
test_that("point_interval errors if there are no columns to summarise", {
expect_error(
median_hdi(data.frame()),
"No columns found to calculate point and interval summaries for\\."
)
})
test_that("point_interval works on vectors", {
set.seed(1234)
x = rnorm(100, mean = 5)
ref = data.frame(
y = mean(x),
ymin = as.vector(quantile(x, probs = .025)),
ymax = as.vector(quantile(x, probs = .975)),
.width = .95,
.point = "mean",
.interval = "qi",
stringsAsFactors = FALSE
)
expect_equal(mean_qi(x), ref)
})
test_that("various point summaries and intervals give correct numbers", {
expect_equal(
median_hdci(c(0:6, 1:3 + 0.25, 1:3 + 0.5, 4.5, 5, 2), .width = .625),
data.frame(
y = 2.75, ymin = 1, ymax = 4,
.width = 0.625, .point = "median", .interval = "hdci",
stringsAsFactors = FALSE
),
tolerance = 1e-7
)
expect_equal(
mean_qi(c(0:6, 1:5, 2:4, 2), .width = .6),
data.frame(
y = 2.9375, ymin = 2, ymax = 4,
.width = 0.6, .point = "mean", .interval = "qi",
stringsAsFactors = FALSE
)
)
expect_equal(
mode_hdi(c(0:6, 0:5 + 0.5, 2:4), .width = .5, .simple_names = TRUE),
data.frame(
.value = 3, .lower = 1.75, .upper = 4.25,
.width = 0.5, .point = "mode", .interval = "hdi",
stringsAsFactors = FALSE
),
tolerance = 1e-7
)
expect_equal(
mode_hdci(c(0:6, 0:5 + 0.5, 2:4), .width = .5, .simple_names = TRUE),
data.frame(
.value = 3, .lower = 1.75, .upper = 4.25,
.width = 0.5, .point = "mode", .interval = "hdci",
stringsAsFactors = FALSE
),
tolerance = 1e-7
)
expect_equal(
mean_hdci(c(0:6, 0:5 + 0.5, 2:4), .width = .5),
data.frame(
y = 3, ymin = 1.75, ymax = 4.25,
.width = 0.5, .point = "mean", .interval = "hdci",
stringsAsFactors = FALSE
),
tolerance = 1e-7
)
})
test_that("attempting to use hdi with multiple multimodal columns simultaneously fails", {
expect_error(
mode_hdi(data.frame(x = c(1:5, 1, 5), y = c(1:5, 1, 5)), .width = .2),
"You are summarizing a multimodal distribution using a method that returns\nmultiple intervals"
)
})
test_that("NAs are handled correctly in point_interval", {
expect_equal(
median_hdci(c(0:6, 1:5, 2:4, 2, NA), .width = .6, na.rm = TRUE),
data.frame(
y = 3, ymin = 2, ymax = 5,
.width = 0.6, .point = "median", .interval = "hdci",
stringsAsFactors = FALSE
)
)
expect_equal(
mean_qi(c(0:6, 1:5, 2:4, 2, NA), .width = .6, na.rm = TRUE),
data.frame(
y = 2.9375, ymin = 2, ymax = 4,
.width = 0.6, .point = "mean", .interval = "qi",
stringsAsFactors = FALSE
)
)
expect_equal(
mode_hdi(c(0:6, 1:5, 2:4, 2, NA), .width = .6, .simple_names = TRUE, na.rm = TRUE),
data.frame(
.value = 2, .lower = 2, .upper = 5,
.width = 0.6, .point = "mode", .interval = "hdi",
stringsAsFactors = FALSE
)
)
expect_equal(
mode_hdci(c(0:6, 1:5, 2:4, 2, NA), .width = .6, .simple_names = TRUE, na.rm = TRUE),
data.frame(
.value = 2, .lower = 2, .upper = 5,
.width = 0.6, .point = "mode", .interval = "hdci",
stringsAsFactors = FALSE
)
)
expect_equal(
mean_hdci(c(0:6, 1:5, 2:4, 2, NA), .width = .6, na.rm = TRUE),
data.frame(
y = 2.9375, ymin = 2, ymax = 5,
.width = 0.6, .point = "mean", .interval = "hdci",
stringsAsFactors = FALSE
)
)
expect_equal(
median_hdci(c(0:6, 1:5, 2:4, 2, NA), .width = .6, na.rm = FALSE),
data.frame(
y = NA_real_, ymin = NA_real_, ymax = NA_real_,
.width = 0.6, .point = "median", .interval = "hdci",
stringsAsFactors = FALSE
)
)
expect_equal(
mean_qi(c(0:6, 1:5, 2:4, 2, NA), .width = .6, na.rm = FALSE),
data.frame(
y = NA_real_, ymin = NA_real_, ymax = NA_real_,
.width = 0.6, .point = "mean", .interval = "qi",
stringsAsFactors = FALSE
)
)
expect_equal(
mode_hdi(c(0:6, 1:5, 2:4, 2, NA), .width = .6, .simple_names = TRUE, na.rm = FALSE),
data.frame(
.value = NA_real_, .lower = NA_real_, .upper = NA_real_,
.width = 0.6, .point = "mode", .interval = "hdi",
stringsAsFactors = FALSE
)
)
expect_equal(
mode_hdci(c(0:6, 1:5, 2:4, 2, NA), .width = .6, .simple_names = TRUE, na.rm = FALSE),
data.frame(
.value = NA_real_, .lower = NA_real_, .upper = NA_real_,
.width = 0.6, .point = "mode", .interval = "hdci",
stringsAsFactors = FALSE
)
)
expect_equal(
mean_hdci(c(0:6, 1:5, 2:4, 2, NA), .width = .6, na.rm = FALSE),
data.frame(
y = NA_real_, ymin = NA_real_, ymax = NA_real_,
.width = 0.6, .point = "mean", .interval = "hdci",
stringsAsFactors = FALSE
)
)
expect_equal(
mean_ll(c(0:6, 1:5, 2:4, 2, NA), .width = .6, na.rm = FALSE),
data.frame(
y = NA_real_, ymin = NA_real_, ymax = NA_real_,
.width = 0.6, .point = "mean", .interval = "ll",
stringsAsFactors = FALSE
)
)
expect_equal(
mean_ul(c(0:6, 1:5, 2:4, 2, NA), .width = .6, na.rm = FALSE),
data.frame(
y = NA_real_, ymin = NA_real_, ymax = NA_real_,
.width = 0.6, .point = "mean", .interval = "ul",
stringsAsFactors = FALSE
)
)
})
test_that("automatic partial evaluation works", {
expect_equal(point_interval(.point = mean)(1:10), point_interval(1:10, .point = mean))
})
# upper/lower limits (ul/ll) ----------------------------------------------
test_that("ll and ul work", {
df = data.frame(x = ppoints(100, a = 1))
ref = tibble(x = 0.5, .lower = c(0.25, 0), .upper = 1, .width = c(0.75, 1), .point = "mean", .interval = "ll")
expect_equal(mean_ll(df, x, .width = c(.75, 1)), ref)
expect_equal(median_ll(df, x, .width = c(.75, 1)), mutate(ref, .point = "median"))
expect_equal(mode_ll(df, x, .width = c(.75, 1)) %>% mutate(x = round(x, 2)), mutate(ref, .point = "mode"))
ref = tibble(x = 0.5, .lower = 0, .upper = c(0.75, 1), .width = c(0.75, 1), .point = "mean", .interval = "ul")
expect_equal(mean_ul(df, x, .width = c(.75, 1)), ref)
expect_equal(median_ul(df, x, .width = c(.75, 1)), mutate(ref, .point = "median"))
expect_equal(mode_ul(df, x, .width = c(.75, 1)) %>% mutate(x = round(x, 2)), mutate(ref, .point = "mode"))
})
# rvars -------------------------------------------------
test_that("pointintervals work on rvars", {
skip_if_not_installed("posterior")
x = c(posterior::rvar(c(0:6, 1:5, 2:4, 2)), posterior::rvar(c(0:6, 1:5, 2:4, 2) + 2))
expect_equal(
median_qi(x, .width = 0.6),
tibble(.value = c(3,5), .lower = c(2,4), .upper = c(4,6), .width = 0.6, .point = "median", .interval = "qi")
)
expect_equal(
mean_hdi(tibble(x), .width = 0.6),
tibble(x = c(2.9375,4.9375), .lower = c(2,4), .upper = c(5,7), .width = 0.6, .point = "mean", .interval = "hdi")
)
expect_equal(
mode_hdci(tibble(x), .width = 0.6),
tibble(x = c(2,4), .lower = c(2,4), .upper = c(5,7), .width = 0.6, .point = "mode", .interval = "hdci")
)
})
test_that("non-scalar rvars throw appropriate warnings", {
skip_if_not_installed("posterior")
x = posterior::rvar(matrix(1:6, nrow = 2))
expect_error(hdi(x), "HDI for non-scalar rvars is not implemented")
expect_error(hdci(x), "HDCI for non-scalar rvars is not implemented")
})
test_that("point_interval works on NA rvars", {
skip_if_not_installed("posterior")
ref = tibble(
.value = NA_real_,
.lower = NA_real_,
.upper = NA_real_,
.width = 0.95
)
x = posterior::rvar(NA_real_)
expect_equal(median_qi(x), mutate(ref, .point = "median", .interval = "qi"))
expect_equal(mean_hdi(x), mutate(ref, .point = "mean", .interval = "hdi"))
expect_equal(mode_hdci(x), mutate(ref, .point = "mode", .interval = "hdci"))
})
test_that("multivariate rvars work", {
skip_if_not_installed("posterior")
x = c(
posterior::rvar(c(qnorm(ppoints(50)), qnorm(ppoints(50), 5))),
posterior::rvar(qnorm(ppoints(100), 3)),
posterior::rvar(qnorm(ppoints(100), 2)),
posterior::rvar(qnorm(ppoints(100), 4))
)
dim(x) = c(2,2)
df = tibble(g = c("a", "b"), x = x)
# build qi ref
qis_50 = rbind(
qi(posterior::draws_of(x[1,1]), .width = .5),
qi(posterior::draws_of(x[1,2]), .width = .5),
qi(posterior::draws_of(x[2,1]), .width = .5),
qi(posterior::draws_of(x[2,2]), .width = .5)
)
qis_90 = rbind(
qi(posterior::draws_of(x[1,1]), .width = .9),
qi(posterior::draws_of(x[1,2]), .width = .9),
qi(posterior::draws_of(x[2,1]), .width = .9),
qi(posterior::draws_of(x[2,2]), .width = .9)
)
expect_equal(dim(qis_50), c(4,2))
expect_equal(dim(qis_90), c(4,2))
ref = tibble(
g = rep(c("a", "a", "b", "b"), 2),
x = rep(c(2.5, 2, 3, 4), 2),
.index = rep(1:2, 4),
.lower = c(qis_50[,1], qis_90[,1]),
.upper = c(qis_50[,2], qis_90[,2]),
.width = rep(c(0.5, 0.9), each = 4),
.point = "median",
.interval = "qi"
)
expect_equal(median_qi(df, x, .width = c(.5, .9)), ref)
# build hdi ref
hdis_50 = rbind(
hdi(posterior::draws_of(x[1,1]), .width = .5),
hdi(posterior::draws_of(x[1,2]), .width = .5),
hdi(posterior::draws_of(x[2,1]), .width = .5),
hdi(posterior::draws_of(x[2,2]), .width = .5)
)
hdis_90 = rbind(
hdi(posterior::draws_of(x[1,1]), .width = .9),
hdi(posterior::draws_of(x[1,2]), .width = .9),
hdi(posterior::draws_of(x[2,1]), .width = .9),
hdi(posterior::draws_of(x[2,2]), .width = .9)
)
expect_equal(dim(hdis_50), c(5,2))
expect_equal(dim(hdis_90), c(5,2))
ref = tibble(
g = rep(c("a", "a", "a", "b", "b"), 2),
x = rep(c(2.5, 2.5, 2, 3, 4), 2),
.index = rep(c(1,1,2,1,2), 2),
.lower = c(hdis_50[,1], hdis_90[,1]),
.upper = c(hdis_50[,2], hdis_90[,2]),
.width = rep(c(0.5, 0.9), each = 5),
.point = "median",
.interval = "hdi"
)
expect_equal(median_hdi(df, x, .width = c(.5, .9)), ref)
# > 2 dims
x_draws = array(
rep(qi(ppoints(100, a = 1)), 12) + rep(1:12, each = 100),
dim = c(100, 2, 3, 2)
)
df = tibble(i = 1:2, x = posterior::rvar(x_draws))
.index = paste0(rep(1:3, 4), ",", rep(1:2, each = 3, times = 2))
.index = ordered(.index, levels = paste0(rep(1:3, 2), ",", rep(1:2, each = 3)))
.x = c(seq(1, 11, by = 2), seq(2, 12, by = 2))
ref = tibble(
i = rep(1:2, each = 6),
x = .x + 0.5,
.index = .index,
.lower = .x + .025,
.upper = .x + .975,
.width = .95,
.point = "median",
.interval = "qi"
)
expect_equal(median_qi(df, x), ref)
})
# distributional objects --------------------------------------------------
test_that("pointintervals work on distributional objects", {
x = dist_gamma(1:2,2:3)
expect_equal(
median_qi(x, .width = 0.6),
tibble(
.value = qgamma(0.5, 1:2, 2:3),
.lower = qgamma(0.2, 1:2, 2:3),
.upper = qgamma(0.8, 1:2, 2:3),
.width = 0.6, .point = "median",
.interval = "qi"
)
)
expect_equal(
mean_qi(tibble(x), .width = 0.6),
tibble(
x = 1:2 / 2:3,
.lower = qgamma(0.2, 1:2, 2:3),
.upper = qgamma(0.8, 1:2, 2:3),
.width = 0.6,
.point = "mean",
.interval = "qi"
)
)
expect_equal(
mode_qi(tibble(x), .width = 0.6),
tibble(
x = 0:1 / 2:3,
.lower = qgamma(0.2, 1:2, 2:3),
.upper = qgamma(0.8, 1:2, 2:3),
.width = 0.6,
.point = "mode",
.interval = "qi"
),
tolerance = 1e-05
)
})
test_that("Mode on dist_sample uses the numeric method", {
x_values = dgamma(ppoints(100), 2, 2)
x = dist_sample(list(x_values))
expect_equal(Mode(x), Mode(x_values))
})
test_that("hdi on dist_sample uses the numeric method", {
x_values = dgamma(ppoints(100), 2, 2)
x = dist_sample(list(x_values))
expect_equal(hdi(x), hdi(x_values))
})
test_that("Mode on discrete distributions works", {
x = c(dist_poisson(3.5), dist_binomial(10, 0.4))
expect_equal(Mode(x), c(3, 4))
})
test_that("non-scalar distributions throw appropriate warnings", {
x = dist_normal(0:1)
expect_error(hdi(x), "HDI for non-scalar distribution objects is not implemented")
expect_error(hdci(x), "HDCI for non-scalar distribution objects is not implemented")
})
test_that("multivariate distributions throw appropriate warnings", {
skip_if_not_installed("mvtnorm") # needed for dist_multivariate_normal()
x = dist_multivariate_normal(list(0:1), list(diag(2)))
expect_error(hdi(x), "HDI for multivariate distribution objects is not implemented")
expect_error(hdci(x), "HDCI for multivariate distribution objects is not implemented")
})
test_that("point_interval works on NA dists", {
ref = tibble(
.value = NA_real_,
.lower = NA_real_,
.upper = NA_real_,
.width = 0.95
)
x = dist_missing()
expect_equal(median_qi(x), mutate(ref, .point = "median", .interval = "qi"))
expect_equal(mean_hdi(x), mutate(ref, .point = "mean", .interval = "hdi"))
expect_equal(mode_hdci(x), mutate(ref, .point = "mode", .interval = "hdci"))
})
test_that("multivariate distributions work", {
skip_if_not_installed("mvtnorm") # needed for dist_multivariate_normal()
x = c(dist_multivariate_normal(list(1:3), list(diag(3))), dist_normal(0,0.5))
df = tibble(g = c("a", "b"), x = x)
ref = tibble(
g = rep(c("a", "a", "a", "b"), 2),
x = rep(c(1, 2, 3, 0), 2),
.index = rep(c(1, 2, 3, NA), 2),
.lower = c(
qnorm(0.25, c(1, 2, 3, 0), c(1, 1, 1, 0.5)),
qnorm(0.05, c(1, 2, 3, 0), c(1, 1, 1, 0.5))
),
.upper = c(
qnorm(0.75, c(1, 2, 3, 0), c(1, 1, 1, 0.5)),
qnorm(0.95, c(1, 2, 3, 0), c(1, 1, 1, 0.5))
),
.width = rep(c(0.5, 0.9), each = 4),
.point = "median",
.interval = "qi"
)
expect_equal(median_qi(df, x, .width = c(.5, .9)), ref)
})
test_that("flattened indices retain index order", {
skip_if_no_vdiffr()
skip_if_not_installed("mvtnorm") # needed for dist_multivariate_normal()
vdiffr::expect_doppelganger("flattened indices with geom_pointinterval",
tibble(x = dist_multivariate_normal(list(1:10), list(diag(10)))) %>%
median_qi(x, .width = c(.66, .95)) %>%
ggplot(aes(x, xmin = .lower, xmax = .upper, y = .index)) +
geom_pointinterval()
)
vdiffr::expect_doppelganger("flattened indices with stat_pointinterval",
tibble(
x = c(
dist_multivariate_normal(list(1:10), list(diag(10))),
dist_normal()
),
y = c("a","b")
) %>%
ggplot(aes(xdist = x, y = y, group = after_stat(.index))) +
stat_pointinterval(position = "dodge")
)
})
# 100% intervals ----------------------------------------------------------
test_that("100% intervals work on sample data", {
x = seq(0, 1, length.out = 10)
ref = data.frame(
.value = 0.5,
.lower = 0,
.upper = 1,
.width = 1,
.point = "median",
.interval = "qi",
stringsAsFactors = FALSE
)
expect_equal(median_qi(x, .width = 1, .simple_names = TRUE), ref)
expect_equal(median_hdi(x, .width = 1, .simple_names = TRUE), mutate(ref, .interval = "hdi"))
expect_equal(median_hdci(x, .width = 1, .simple_names = TRUE), mutate(ref, .interval = "hdci"))
expect_equal(median_ll(x, .width = 1, .simple_names = TRUE), mutate(ref, .interval = "ll"))
expect_equal(median_ul(x, .width = 1, .simple_names = TRUE), mutate(ref, .interval = "ul"))
})
test_that("100% intervals work on distributions", {
x = dist_exponential(1)
ref = tibble(
.value = 1,
.lower = 0,
.upper = Inf,
.width = 1,
.point = "mean",
.interval = "qi"
)
expect_equal(mean_qi(x, .width = 1), ref)
expect_equal(mean_hdi(x, .width = 1), mutate(ref, .interval = "hdi"))
expect_equal(mean_hdci(x, .width = 1), mutate(ref, .interval = "hdci"))
expect_equal(mean_ll(x, .width = 1), mutate(ref, .interval = "ll"))
expect_equal(mean_ul(x, .width = 1), mutate(ref, .interval = "ul"))
})
test_that("100% intervals work on rvars", {
skip_if_not_installed("posterior")
x = posterior::rvar(seq(0, 1, length.out = 10))
ref = tibble(
.value = 0.5,
.lower = 0,
.upper = 1,
.width = 1,
.point = "median",
.interval = "qi"
)
expect_equal(median_qi(x, .width = 1), ref)
expect_equal(median_hdi(x, .width = 1), mutate(ref, .interval = "hdi"))
expect_equal(median_hdci(x, .width = 1), mutate(ref, .interval = "hdci"))
expect_equal(median_ll(x, .width = 1), mutate(ref, .interval = "ll"))
expect_equal(median_ul(x, .width = 1), mutate(ref, .interval = "ul"))
})
# constants --------------------------------------------------
test_that("intervals work on constants", {
ref = matrix(c(1, 1), nrow = 1)
expect_equal(hdi(1), ref)
expect_equal(hdci(1), ref)
expect_equal(qi(1), ref)
expect_equal(hdi(c(1,1,1)), ref)
expect_equal(hdci(c(1,1,1)), ref)
expect_equal(qi(c(1,1,1)), ref)
})
test_that("Mode works on constants", {
expect_equal(Mode(1), 1)
expect_equal(Mode(c(1,1,1)), 1)
expect_equal(Mode(dist_normal(1:2, 0)), c(1,2))
expect_equal(Mode(dist_degenerate(1:2)), c(1,2))
})
# weighted distributions --------------------------------------------------
test_that("Mode works on weighted discrete distributions", {
x = .dist_weighted_sample(list(1:5, 2:6), list(c(1,2,3,5,4)/15))
expect_equal(Mode(x), c(4,5))
})
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.