options("RprobitB_progress" = FALSE)
test_that("setting prior parameter works", {
prior <- check_prior(P_f = 1, P_r = 2, J = 3)
expect_snapshot(prior)
expect_s3_class(prior, "RprobitB_prior")
})
test_that("setting of initial Gibbs values works", {
init <- RprobitB:::set_initial_gibbs_values(
N = 2, T = 3, J = 3, P_f = 1, P_r = 2, C = 2
)
expect_snapshot(init)
})
test_that("RprobitB_latent_class setting works", {
expect_error(
RprobitB_latent_classes("not a list")
)
expect_snapshot(
RprobitB_latent_classes(list("C" = 2))
)
expect_error(
RprobitB_latent_classes(list("C" = -1))
)
expect_snapshot(
(out <- RprobitB_latent_classes(list(
"weight_update" = TRUE,
"dp_update" = TRUE
)))
)
expect_snapshot(str(out))
})
test_that("building of RprobitB_normalization works", {
form <- choice ~ price + time + comfort + change | 1
re <- "time"
alternatives <- c("A", "B")
expect_warning(
RprobitB_normalization(
level = "A", scale = "Sigma_1,1 := 1", form = form, re = re,
alternatives = alternatives, base = "B"
)
)
expect_snapshot(
RprobitB_normalization(
level = "B", scale = "price := -1", form = form, re = re,
alternatives = alternatives, base = "B"
)
)
expect_error(
RprobitB_normalization(
level = "B", scale = "time := 1", form = form, re = re,
alternatives = alternatives, base = "B"
)
)
expect_error(
RprobitB_normalization(
level = "B", scale = "Sigma_3,3 := 1", form = form, re = re,
alternatives = alternatives, base = "B"
)
)
expect_error(
RprobitB_normalization(
level = "B", scale = "Sigma_1,1 := -1", form = form, re = re,
alternatives = alternatives, base = "B"
)
)
})
test_that("Gibbs sampling works", {
data <- simulate_choices(
form = choice ~ a | b | c,
N = 50, T = 1:50, J = 2,
seed = 1, base = "B"
)
model <- fit_model(data, R = 2000, seed = 1)
expect_snapshot(print(model))
expect_snapshot(summary(model))
expect_snapshot(print(coef(model)))
})
test_that("Ordered probit model estimation works", {
data <- simulate_choices(
form = opinion_on_sth ~ age + gender,
N = 50,
T = 1:50,
J = 5,
alternatives = c("very bad", "bad", "indifferent", "good", "very good"),
ordered = TRUE,
covariates = list(
"gender" = rep(sample(c(0, 1), 50, replace = TRUE), times = 1:50)
),
seed = 1
)
model <- fit_model(data)
expect_snapshot(print(model))
expect_snapshot(summary(model))
expect_snapshot(print(coef(model)))
})
test_that("Ranked probit model estimation works", {
data <- simulate_choices(
form = product ~ price,
N = 100,
T = 10,
J = 3,
ranked = TRUE,
seed = 1
)
model <- fit_model(data)
expect_snapshot(print(model))
expect_snapshot(summary(model))
expect_snapshot(print(coef(model)))
})
test_that("setting fixed parameters for the Gibbs sampling works", {
par <- list("Sigma" = 1, "alpha" = 1:2, b = 1, Omega = 0.1)
data <- simulate_choices(
form = choice ~ a | b, N = 10, T = 1:10, J = 2, seed = 1, base = "B",
re = "b", true_parameter = par
)
model <- fit_model(
data,
R = 2000, seed = 1, fixed_parameter = par
)
true <- do.call(
what = RprobitB_parameter,
args = c(
list(
"P_f" = data$P_f, "P_r" = data$P_r, "J" = data$J, "N" = data$N,
"ordered" = data$ordered, sample = FALSE
),
par
)
)
est <- point_estimates(model)
expect_true(all.equal(true, est))
})
test_that("computation of sufficient statistics works", {
form <- choice ~ v1 | v2
re <- "v2"
alternatives <- c("A", "B", "C")
data <- simulate_choices(
form = form, N = 2, T = 1:2, J = 3, re = re, alternatives = alternatives,
seed = 1
)
normalization <- RprobitB:::RprobitB_normalization(
form = form, re = re, alternatives = alternatives, base = "C"
)
ss <- RprobitB:::sufficient_statistics(data = data, normalization = normalization)
expect_snapshot(ss)
})
test_that("transforming RprobitB_fit works", {
set.seed(1)
form <- choice ~ price + time + change + comfort | 0
data <- prepare_data(form = form, choice_data = train_choice, id = "deciderID", idc = "occasionID")
model <- fit_model(
data = data,
scale = "price := -1",
R = 100,
B = 90
)
model_new_B <- transform(model, B = 2)
expect_s3_class(model_new_B, "RprobitB_fit")
expect_s3_class(model_new_B$gibbs_samples, "RprobitB_gibbs_samples")
expect_equal(model_new_B$B, 2)
model_new_Q <- transform(model, Q = 1)
expect_s3_class(model_new_Q, "RprobitB_fit")
expect_s3_class(model_new_Q$gibbs_samples, "RprobitB_gibbs_samples")
expect_equal(model_new_Q$Q, 1)
model_new_scale <- transform(
model,
scale = "Sigma_1,1 := 1", check_preference_flip = FALSE
)
expect_s3_class(model_new_scale, "RprobitB_fit")
expect_s3_class(model_new_scale$gibbs_samples, "RprobitB_gibbs_samples")
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.