Simulate choices for a survey design, either randomly or according to a utility model defined by user-provided prior parameters. All choices are simulated using the 'logitr' package. For more details see the JSS article on the 'logitr' package (Helveston, 2023).
cbc_choices(design, obsID = "obsID", priors = NULL, n_draws = 100)
A data frame of a survey design.
The name of the column in design
that identifies each choice
observation. Defaults to "obsID"
.
A list of one or more prior parameters that define a prior
(assumed) utility model used to simulate choices for the survey
data frame.
If NULL
(the default), choices will be randomly assigned.
The number of Halton draws to use for simulated choices
for mixed logit models. Defaults to 100
.
Returns the design
data frame with an additional choice
column
identifying the simulated choices.
Helveston, J. P. (2023). logitr: Fast Estimation of Multinomial and Mixed Logit Models with Preference Space and Willingness-to-Pay Space Utility Parameterizations. Journal of Statistical Software, 105(10), 1–37, doi:10.18637/jss.v105.i10
library(cbcTools)
# A simple conjoint experiment about apples
# Generate all possible profiles
profiles <- cbc_profiles(
price = c(1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5),
type = c("Fuji", "Gala", "Honeycrisp"),
freshness = c('Poor', 'Average', 'Excellent')
)
# Make a survey design from all possible profiles
# (This is the default setting where method = 'full' for "full factorial")
design <- cbc_design(
profiles = profiles,
n_resp = 300, # Number of respondents
n_alts = 3, # Number of alternatives per question
n_q = 6 # Number of questions per respondent
)
# Simulate random choices
data <- cbc_choices(
design = design,
obsID = "obsID"
)
# Simulate choices according to a prior utility model
data <- cbc_choices(
design = design,
obsID = "obsID",
priors = list(
price = 0.1,
type = c(0.1, 0.2),
freshness = c(0.1, 0.2)
)
)
# Simulate choices according to a prior model with interactions
data <- cbc_choices(
design = design,
obsID = "obsID",
priors = list(
price = 0.1,
type = c(0.1, 0.2),
freshness = c(0.1, 0.2),
`price*type` = c(0.1, 0.5)
)
)
# Simulate choices according to a prior utility model with random parameters
data <- cbc_choices(
design = design,
obsID = "obsID",
priors = list(
price = 0.1,
type = randN(mean = c(0.1, 0.2), sd = c(1, 2)),
freshness = c(0.1, 0.2)
)
)