Nothing
## ----setup, include=FALSE, message=FALSE, warning=FALSE-----------------------
knitr::opts_chunk$set(
collapse = TRUE,
warning = FALSE,
message = FALSE,
fig.retina = 3,
comment = "#>"
)
set.seed(123)
## -----------------------------------------------------------------------------
library(cbcTools)
profiles <- cbc_profiles(
price = c(1, 1.5, 2, 2.5, 3),
type = c('Fuji', 'Gala', 'Honeycrisp'),
freshness = c('Poor', 'Average', 'Excellent')
)
priors <- cbc_priors(
profiles = profiles,
price = -0.25,
type = c('Gala' = 0.5, 'Honeycrisp' = 1.0),
freshness = c('Average' = 0.6, 'Excellent' = 1.2)
)
## -----------------------------------------------------------------------------
design <- cbc_design(
profiles = profiles,
n_alts = 2, # Alternatives per question
n_q = 6, # Questions per respondent
n_resp = 100 # Number of respondents
)
design
## -----------------------------------------------------------------------------
design_decoded <- cbc_decode(design)
design_decoded
## -----------------------------------------------------------------------------
design_random <- cbc_design(
profiles = profiles,
method = "random",
n_alts = 2,
n_q = 6,
n_resp = 100
)
# Quick inspection
cbc_inspect(design_random, sections = "structure")
## -----------------------------------------------------------------------------
design_shortcut <- cbc_design(
profiles = profiles,
method = "shortcut",
n_alts = 2,
n_q = 6,
n_resp = 100
)
design_minoverlap <- cbc_design(
profiles = profiles,
method = "minoverlap",
n_alts = 2,
n_q = 6,
n_resp = 100
)
design_balanced <- cbc_design(
profiles = profiles,
method = "balanced",
n_alts = 2,
n_q = 6,
n_resp = 100
)
## -----------------------------------------------------------------------------
design_stochastic <- cbc_design(
profiles = profiles,
method = "stochastic",
n_alts = 2,
n_q = 6,
n_resp = 100,
priors = priors,
n_start = 1 # Number of random starting points
)
design_modfed <- cbc_design(
profiles = profiles,
n_alts = 2,
n_q = 6,
n_resp = 100,
priors = priors,
method = "modfed",
n_start = 1
)
design_cea <- cbc_design(
profiles = profiles,
n_alts = 2,
n_q = 6,
n_resp = 100,
priors = priors,
method = "cea",
n_start = 1
)
## -----------------------------------------------------------------------------
cbc_compare(
"Random" = design_random,
"Shortcut" = design_shortcut,
"Min Overlap" = design_minoverlap,
"Balanced" = design_balanced,
"Stochastic" = design_stochastic,
"Modfed" = design_modfed,
"CEA" = design_cea
)
## -----------------------------------------------------------------------------
# For D-optimal methods, must include no_choice in priors
priors_nochoice <- cbc_priors(
profiles = profiles,
price = -0.1,
type = c(0.1, 0.2),
freshness = c(0.1, 0.2),
no_choice = -0.5 # Negative value makes no-choice less attractive
)
design_nochoice <- cbc_design(
profiles = profiles,
n_alts = 2,
n_q = 6,
n_resp = 100,
no_choice = TRUE,
priors = priors_nochoice,
method = "stochastic"
)
head(design_nochoice)
## -----------------------------------------------------------------------------
design_labeled <- cbc_design(
profiles = profiles,
n_alts = 3, # Will be overridden to match number of type levels
n_q = 6,
n_resp = 100,
label = "type", # Use 'type' attribute as labels
method = "random"
)
head(design_labeled)
## -----------------------------------------------------------------------------
design_blocked <- cbc_design(
profiles = profiles,
method = "stochastic",
priors = priors,
n_alts = 2,
n_q = 6,
n_resp = 100,
n_blocks = 2 # Create 2 different design blocks
)
# Check block allocation
table(design_blocked$blockID)
## -----------------------------------------------------------------------------
design_no_dominance <- cbc_design(
profiles = profiles,
n_alts = 2,
n_q = 6,
n_resp = 100,
priors = priors,
method = "stochastic",
remove_dominant = TRUE,
dominance_types = c("total", "partial"),
dominance_threshold = 0.8
)
## -----------------------------------------------------------------------------
# Create priors with interactions
priors_interactions <- cbc_priors(
profiles = profiles,
price = -0.25,
type = c("Fuji" = 0.5, "Gala" = 1.0),
freshness = c(0.6, 1.2),
interactions = list(
# Price is less negative (less price sensitive) for Fuji apples
int_spec(
between = c("price", "type"),
with_level = "Fuji",
value = 0.5
),
# Price is slightly less negative for Gala apples
int_spec(
between = c("price", "type"),
with_level = "Gala",
value = 0.2
)
# Honeycrisp uses reference level (no additional interaction term)
)
)
design_interactions <- cbc_design(
profiles = profiles,
n_alts = 2,
n_q = 6,
n_resp = 100,
priors = priors_interactions,
method = "stochastic"
)
## -----------------------------------------------------------------------------
# Detailed inspection of the stochastic design
cbc_inspect(
design_stochastic,
sections = "all"
)
## ----eval=FALSE---------------------------------------------------------------
# # Advanced stochastic design with custom settings
# design_advanced <- cbc_design(
# profiles = profiles,
# n_alts = 2,
# n_q = 8,
# n_resp = 300,
# n_blocks = 2,
# priors = priors,
# method = "stochastic",
# n_start = 10, # More starting points for better optimization
# max_iter = 100, # More iterations per start
# n_cores = 4, # Parallel processing
# remove_dominant = TRUE,
# dominance_threshold = 0.9,
# randomize_questions = TRUE,
# randomize_alts = TRUE
# )
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.