This function estimates the same model multiple times using different size
subsets of a set of choice data and then returns a data frame of the
estimated model coefficients and standard errors for each sample size. This
is useful for determining the required sample size for obtaining a desired
level of statistical power on each coefficient. The number of models to
estimate is set by the nbreaks
argument, which breaks up the data into
groups of increasing sample sizes. All models are estimated models using
the 'logitr' package. For more details see the JSS article on the 'logitr'
package (Helveston, 2023).
cbc_power(
data,
outcome,
obsID,
pars,
randPars = NULL,
nbreaks = 10,
n_q = 1,
return_models = FALSE,
panelID = NULL,
clusterID = NULL,
robust = FALSE,
predict = FALSE,
n_cores = NULL,
...
)
The data, formatted as a data.frame
object.
The name of the column that identifies the outcome variable,
which should be coded with a 1
for TRUE
and 0
for FALSE
.
The name of the column that identifies each observation.
The names of the parameters to be estimated in the model.
Must be the same as the column names in the data
argument.
A named vector whose names are the random parameters and
values the distribution: 'n'
for normal or 'ln'
for log-normal.
Defaults to NULL
.
The number of different sample size groups.
Number of questions per respondent. Defaults to 1
if not
specified.
If TRUE
, a list of all estimated models is returned.
This can be useful if you want to extract other outputs from each model,
such as the variance-covariance matrix, etc. Defaults to FALSE
.
The name of the column that identifies the individual (for
panel data where multiple observations are recorded for each individual).
Defaults to NULL
.
The name of the column that identifies the cluster
groups to be used in model estimation. Defaults to NULL
.
Determines whether or not a robust covariance matrix is
estimated. Defaults to FALSE
. Specification of a clusterID
will override
the user setting and set this to `TRUE' (a warning will be displayed in this
case). Replicates the functionality of Stata's cmcmmixlogit.
If TRUE
, predicted probabilities, fitted values, and
residuals are also included in the returned model objects. Defaults to
FALSE
.
The number of cores to use for parallel processing.
Set to 1
to run serially Defaults to NULL
, in which case the number of
cores is set to parallel::detectCores() - 1
. Max cores allowed is capped
at parallel::detectCores()
.
Other arguments that are passed to logitr::logitr()
for model
estimation. See the logitr documentation for details about other
available arguments.
Returns a data frame of estimated model coefficients and standard
errors for the same model estimated on subsets of the data
with increasing
sample sizes.
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"
)
# Conduct a power analysis
power <- cbc_power(
data = data,
pars = c("price", "type", "freshness"),
outcome = "choice",
obsID = "obsID",
nbreaks = 10,
n_q = 6,
n_cores = 2
)
#> Estimating models using 2 cores...
#> done!