Skip to contents

Generate synthetic binary-indicator data with known latent class structure. All item response probabilities are explicitly specified.

Usage

simulate_lca(item_probs, class_probs, n, seed = NULL)

Arguments

item_probs

Numeric matrix of dimension n_items x n_classes. Each column gives the probability that each item equals 1 for that class. All values must be in \([0, 1]\).

class_probs

Numeric vector of length n_classes. Class mixing proportions. Need not sum to 1 – normalised internally.

n

Positive integer. Total sample size.

seed

Integer or NULL. Random seed for reproducibility.

Value

A named list with elements:

data

data.frame with binary columns item1...itemm and integer column true_class (labels 1...K).

params

list with item_probs and class_probs (as supplied, un-normalised).

Examples

item_probs <- matrix(c(0.9, 0.1, 0.9, 0.1,
                       0.1, 0.9, 0.1, 0.9), nrow = 4, ncol = 2)
r <- simulate_lca(item_probs = item_probs, class_probs = c(0.5, 0.5),
                  n = 200, seed = 1)
r$data        # data.frame
#>     item1 item2 item3 item4 true_class
#> 1       0     1     0     1          2
#> 2       0     1     1     1          2
#> 3       1     1     1     1          1
#> 4       1     0     1     0          1
#> 5       0     0     1     1          2
#> 6       1     0     0     0          1
#> 7       1     0     1     0          1
#> 8       1     0     1     1          1
#> 9       1     0     0     0          1
#> 10      0     0     0     1          2
#> 11      1     0     1     1          2
#> 12      0     1     0     1          2
#> 13      1     0     1     0          1
#> 14      1     1     0     0          2
#> 15      1     0     1     0          1
#> 16      0     1     0     1          2
#> 17      1     0     1     1          1
#> 18      0     0     1     1          1
#> 19      1     1     0     1          2
#> 20      1     0     1     0          1
#> 21      1     0     1     0          1
#> 22      0     1     0     1          2
#> 23      1     0     1     0          1
#> 24      0     1     0     1          2
#> 25      1     1     0     1          2
#> 26      0     1     0     1          2
#> 27      0     1     0     1          2
#> 28      0     0     0     1          2
#> 29      1     0     1     0          1
#> 30      0     1     1     1          2
#> 31      0     0     0     1          2
#> 32      1     0     1     1          1
#> 33      0     1     0     1          2
#> 34      0     1     0     1          2
#> 35      1     0     1     0          1
#> 36      1     0     1     0          1
#> 37      1     0     1     0          1
#> 38      0     1     0     1          2
#> 39      1     0     1     1          1
#> 40      0     0     0     1          2
#> 41      1     0     0     1          1
#> 42      1     0     1     0          1
#> 43      0     0     0     0          1
#> 44      1     0     1     0          1
#> 45      1     0     1     0          1
#> 46      1     0     1     0          1
#> 47      0     1     0     1          2
#> 48      0     0     0     1          2
#> 49      1     0     1     0          1
#> 50      0     0     0     0          1
#> 51      0     0     0     0          2
#> 52      0     0     1     0          1
#> 53      0     1     0     1          2
#> 54      0     1     0     0          2
#> 55      0     1     0     1          2
#> 56      0     1     0     1          2
#> 57      0     1     0     1          2
#> 58      1     1     1     0          1
#> 59      1     0     1     0          1
#> 60      1     1     0     1          2
#> 61      1     0     1     0          1
#> 62      0     1     0     1          2
#> 63      0     1     0     1          2
#> 64      0     1     0     1          2
#> 65      1     0     1     0          1
#> 66      0     0     0     1          2
#> 67      0     1     1     1          2
#> 68      1     0     1     0          1
#> 69      0     1     0     1          2
#> 70      1     0     1     0          1
#> 71      0     1     0     1          2
#> 72      1     1     1     1          1
#> 73      0     1     0     1          2
#> 74      0     1     0     1          2
#> 75      0     1     0     1          2
#> 76      1     0     1     0          1
#> 77      1     0     1     0          1
#> 78      0     1     0     1          2
#> 79      1     0     1     0          1
#> 80      1     0     1     1          1
#> 81      0     1     0     1          2
#> 82      1     0     1     1          1
#> 83      0     1     0     0          2
#> 84      0     0     0     1          2
#> 85      1     0     1     0          1
#> 86      0     1     0     1          2
#> 87      1     0     1     0          1
#> 88      0     1     0     1          2
#> 89      0     1     0     1          2
#> 90      0     1     1     1          2
#> 91      0     1     0     1          2
#> 92      0     0     0     1          2
#> 93      0     0     1     0          1
#> 94      1     0     1     0          1
#> 95      1     0     1     0          1
#> 96      1     0     1     0          1
#> 97      0     1     0     1          2
#> 98      0     1     0     1          2
#> 99      1     0     0     0          1
#> 100     0     0     1     0          1
#> 101     1     0     0     0          1
#> 102     0     1     1     1          2
#> 103     0     1     0     1          2
#> 104     1     0     1     0          1
#> 105     1     0     1     0          1
#> 106     1     0     0     1          2
#> 107     0     1     0     1          2
#> 108     0     1     0     1          2
#> 109     1     0     0     0          1
#> 110     1     0     1     0          1
#> 111     1     0     1     0          1
#> 112     1     0     1     0          1
#> 113     0     1     0     1          2
#> 114     0     1     0     1          2
#> 115     0     1     0     1          2
#> 116     0     1     0     1          2
#> 117     1     0     1     0          1
#> 118     0     1     0     1          2
#> 119     1     1     0     1          2
#> 120     1     0     1     0          1
#> 121     1     0     1     0          1
#> 122     0     1     0     0          2
#> 123     0     1     1     0          2
#> 124     1     1     0     1          2
#> 125     1     0     1     0          1
#> 126     1     0     0     1          2
#> 127     1     0     1     0          1
#> 128     0     1     0     1          2
#> 129     0     0     0     1          2
#> 130     1     1     1     0          1
#> 131     0     0     1     0          1
#> 132     0     1     0     0          2
#> 133     0     1     0     1          2
#> 134     1     0     1     0          1
#> 135     1     0     1     0          1
#> 136     1     0     1     0          1
#> 137     1     0     1     1          1
#> 138     1     0     1     0          1
#> 139     1     0     1     0          1
#> 140     0     0     1     0          1
#> 141     0     0     1     0          1
#> 142     1     1     1     1          1
#> 143     0     1     0     1          2
#> 144     0     1     0     1          2
#> 145     1     0     1     0          1
#> 146     0     1     0     1          2
#> 147     0     0     0     1          2
#> 148     1     0     1     0          1
#> 149     0     1     0     0          2
#> 150     1     0     1     0          1
#> 151     1     0     1     0          1
#> 152     1     0     0     0          1
#> 153     0     1     0     1          2
#> 154     0     0     0     1          2
#> 155     0     0     1     0          1
#> 156     0     1     0     1          2
#> 157     1     0     1     0          1
#> 158     0     1     0     1          2
#> 159     0     1     1     1          2
#> 160     0     1     0     1          2
#> 161     0     1     0     1          2
#> 162     1     0     1     0          1
#> 163     0     1     0     1          2
#> 164     1     0     1     0          1
#> 165     1     1     1     0          1
#> 166     0     1     0     1          2
#> 167     0     1     0     1          2
#> 168     0     1     0     1          2
#> 169     1     0     1     1          1
#> 170     0     0     0     1          2
#> 171     1     0     1     1          1
#> 172     1     0     1     0          1
#> 173     0     0     1     0          1
#> 174     0     1     1     0          2
#> 175     0     1     0     1          2
#> 176     1     0     1     0          1
#> 177     1     0     1     0          1
#> 178     1     0     1     0          1
#> 179     1     0     1     0          1
#> 180     1     0     0     0          1
#> 181     0     1     1     1          2
#> 182     0     0     0     1          2
#> 183     1     0     1     1          1
#> 184     0     0     1     0          1
#> 185     1     0     1     0          1
#> 186     0     1     0     1          2
#> 187     1     0     1     0          1
#> 188     1     0     1     0          1
#> 189     1     1     1     1          1
#> 190     0     0     1     0          1
#> 191     1     0     1     0          1
#> 192     0     1     0     1          2
#> 193     1     1     1     1          2
#> 194     1     0     1     0          1
#> 195     0     1     0     1          2
#> 196     1     0     1     0          1
#> 197     0     1     0     1          2
#> 198     1     0     1     0          1
#> 199     0     1     0     1          2
#> 200     1     0     1     0          1
r$params      # ground-truth parameters
#> $item_probs
#>      [,1] [,2]
#> [1,]  0.9  0.1
#> [2,]  0.1  0.9
#> [3,]  0.9  0.1
#> [4,]  0.1  0.9
#> 
#> $class_probs
#> [1] 0.5 0.5
#>