This function simulates choice data from a probit model.

## Usage

```
simulate_choices(
form,
N,
T = 1,
J,
re = NULL,
alternatives = NULL,
ordered = FALSE,
ranked = FALSE,
base = NULL,
covariates = NULL,
seed = NULL,
true_parameter = list()
)
```

## Arguments

- form
A

`formula`

object that is used to specify the model equation. The structure is`choice ~ A | B | C`

, where`choice`

is the name of the dependent variable (the choices),`A`

are names of alternative and choice situation specific covariates with a coefficient that is constant across alternatives,`B`

are names of choice situation specific covariates with alternative specific coefficients,and

`C`

are names of alternative and choice situation specific covariates with alternative specific coefficients.

Multiple covariates (of one type) are separated by a

`+`

sign. By default, alternative specific constants (ASCs) are added to the model. They can be removed by adding`+0`

in the second spot.In the ordered probit model (

`ordered = TRUE`

), the`formula`

object has the simple structure`choice ~ A`

. ASCs are not estimated.- N
The number (greater or equal 1) of decision makers.

- T
The number (greater or equal 1) of choice occasions or a vector of choice occasions of length

`N`

(i.e. a decision maker specific number). Per default,`T = 1`

.- J
The number (greater or equal 2) of choice alternatives.

- re
A character (vector) of covariates of

`form`

with random effects. If`re = NULL`

(the default), there are no random effects. To have random effects for the ASCs, include`"ASC"`

in`re`

.- alternatives
A character vector with the names of the choice alternatives. If not specified, the choice set is defined by the observed choices. If

`ordered = TRUE`

,`alternatives`

is assumed to be specified with the alternatives ordered from worst to best.- ordered
A boolean,

`FALSE`

per default. If`TRUE`

, the choice set`alternatives`

is assumed to be ordered from worst to best.- ranked
TBA

- base
A character, the name of the base alternative for covariates that are not alternative specific (i.e. type 2 covariates and ASCs). Ignored and set to

`NULL`

if the model has no alternative specific covariates (e.g. in the ordered probit model). Per default,`base`

is the last element of`alternatives`

.- covariates
A named list of covariate values. Each element must be a vector of length equal to the number of choice occasions and named according to a covariate. Covariates for which no values are supplied are drawn from a standard normal distribution.

- seed
Set a seed for the simulation.

- true_parameter
Optionally specify a named list with true parameter values for

`alpha`

,`C`

,`s`

,`b`

,`Omega`

,`Sigma`

,`Sigma_full`

,`beta`

,`z`

, or`d`

for the simulation. See the vignette on model definition for definitions of these variables.

## Details

See the vignette on choice data for more details.

## See also

`check_form()`

for checking the model formula`overview_effects()`

for an overview of the model effects`create_lagged_cov()`

for creating lagged covariates`as_cov_names()`

for re-labeling alternative-specific covariates`prepare_data()`

for preparing empirical choice data`train_test()`

for splitting choice data into a train and test subset

## Examples

```
### simulate data from a binary probit model with two latent classes
data <- simulate_choices(
form = choice ~ cost | income | time,
N = 100,
T = 10,
J = 2,
re = c("cost", "time"),
alternatives = c("car", "bus"),
seed = 1,
true_parameter = list(
"alpha" = c(-1, 1),
"b" = matrix(c(-1, -1, -0.5, -1.5, 0, -1), ncol = 2),
"C" = 2
)
)
### simulate data from an ordered probit model
data <- simulate_choices(
form = opinion ~ age + gender,
N = 10,
T = 1:10,
J = 5,
alternatives = c("very bad", "bad", "indifferent", "good", "very good"),
ordered = TRUE,
covariates = list(
"gender" = rep(sample(c(0, 1), 10, replace = TRUE), times = 1:10)
),
seed = 1
)
### simulate data from a ranked probit model
data <- simulate_choices(
form = product ~ price,
N = 10,
T = 1:10,
J = 3,
alternatives = c("A", "B", "C"),
ranked = TRUE,
seed = 1
)
```