Skip to contents

Simulates data based on a specified slca model. If the model parameters are not already estimated, they can either be provided by the user or generated randomly.

Usage

# S3 method for class 'slca'
simulate(object, nsim = 500, seed = NULL, parm, nlevel, ...)

Arguments

object

an slca object representing the model from which data will be simulated.

nsim

an integer specifying the number of response observations to simulate. The default is 500.

seed

an integer specifying the random seed for reproducibility. If not provided, results will vary across runs.

parm

a user-specified set of parameters to guide the simulation. This is required if the model has not been previously estimated.

nlevel

an integer or integer vector specifying the number of levels for each manifest item in the model. If a single integer is provided, all manifest items will have the same number of levels. The default is 2.

...

Additional arguments passed to other methods.

Value

A list with the following components:

class

A data.frame containing the assigned latent class for each individual across all latent class variables.

response

A data.frame containing the simulated manifest item responses.

Examples

m1 <- slca(lc1[3] ~ x1 + x2 + x3 + x4 + x5,
              lc2[4] ~ y1 + y2 + y3 + y4 + y5)
sim <- simulate(m1, 1000)
sapply(sim$class, table)
#> $lc1
#> 
#>   1   2   3 
#>  63 434 503 
#> 
#> $lc2
#> 
#>   1   2   3   4 
#> 127 293  71 509 
#> 

# simulate data with defined number of levels of manifest items
m2 <- slca(lc1[3] ~ x1 + x2 + x3 + x4)
sim <- simulate(m2, nlevel = c(3, 3, 3, 3))
d <- sim$response
sapply(d, table)
#>    x1  x2  x3  x4
#> 1 162 273 159 202
#> 2 189  78 161 152
#> 3 149 149 180 146

sim <- simulate(m2, nlevel = c(x1 = 2, x3 = 3, x4 = 4, x5 = 5))
d <- sim$response
sapply(d, table)
#> $x1
#> 
#>   1   2 
#> 238 262 
#> 
#> $x2
#> 
#>   1   2   3 
#> 130 196 174 
#> 
#> $x3
#> 
#>   1   2   3   4 
#> 151 111  89 149 
#> 
#> $x4
#> 
#>   1   2   3   4   5 
#>  63 158 116  66  97 
#> 

# simulate data with user-defined parameters
pi <- rep(1 / 3, 3)
rho <- c(.9, .1, .9, .1, .9, .1, .9, .1,
         .9, .1, .9, .1, .1, .9, .1, .9,
         .1, .9, .1, .9, .1, .9, .1, .9)
par <- c(pi, rho)
m3 <- slca(lc[3] ~ y1 + y2 + y3 + y4)
sim <- simulate(m3, parm = par)
mf <- estimate(m3, sim$response)
param(mf)
#> PI :
#> (lc)
#>   class
#>          1       2       3
#>     0.3218  0.3101  0.3680
#> 
#> RHO :
#> (a)
#>         class
#> response       1       2       3
#>    1(V1)  0.1996  0.8382  0.8907
#>    2      0.8004  0.1618  0.1093
#>    1(V2)  0.0000  1.0000  0.9397
#>    2      1.0000  0.0000  0.0603
#>    1(V3)  0.0934  0.0000  0.9074
#>    2      0.9066  1.0000  0.0926
#>    1(V4)  0.0967  0.0887  0.7700
#>    2      0.9033  0.9113  0.2300
#> 
#>    V1 V2 V3 V4
#> lc y1 y2 y3 y4