-
Notifications
You must be signed in to change notification settings - Fork 0
/
02-simcdm.Rmd
136 lines (107 loc) · 3.33 KB
/
02-simcdm.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# simcdm: Simulate Cognitive Diagnostic Model Data {#simcdm}
```{r load-r-pkg, include = FALSE}
library(simcdm)
```
## Matrix Simulation
Simulations within this section are done underneath the following settings.
```{r setup-matrix-sims}
# Set a seed for reproducibility
set.seed(888)
# Setup Parameters
N = 15 # Number of Examinees / Subjects
J = 10 # Number of Items
K = 2 # Number of Skills / Attributes
```
### Attribute profile simulation
Generate latent attribute profile classes ($2^K$ latent classes by $K$ skills).
```{r attribute-classes-gen}
# Create a listing of all attribute classes
class_alphas = attribute_classes(K)
class_alphas
```
Generate latent attribute profile class for each subject ($N$ subjects by $K$ skills).
```{r sim-subject-attributes}
# Set a seed for reproducibility
set.seed(5126)
# Create attributes for a subject
subject_alphas = sim_subject_attributes(N, K)
subject_alphas
# Equivalent to:
# subject_alphas = class_alphas[sample(2 ^ K, N, replace = TRUE),]
```
### Identifiable Q Matrix Simulation
Simulate an identifiable $Q$ matrix ($J$ items by $K$ skills).
```{r sim-q-matrix}
# Set a seed for reproducibility
set.seed(1512)
# Simulate an identifiable Q matrix
Q = sim_q_matrix(J, K)
Q
```
## DINA Simulation
Simulations within this section are done underneath the following settings.
```{r setup-sim-dina}
# Set a seed for reproducibility
set.seed(888)
# Setup Parameters
N = 15 # Number of Examinees / Subjects
J = 10 # Number of Items
K = 2 # Number of Skills / Attributes
# Assign slipping and guessing values for each item
ss = gs = rep(.2, J)
# Simulate identifiable Q matrix
Q = sim_q_matrix(J, K)
# Simulate subject attributes
subject_alphas = sim_subject_attributes(N, K)
```
### DINA Item Simulation
Simulate item data, $Y$, under DINA model ($N$ by $J$)
```{r sim-dina-items}
# Set a seed for reproducibility
set.seed(2019)
# Simulate items under the DINA model
items_dina = sim_dina_items(subject_alphas, Q, ss, gs)
items_dina
```
### DINA Attribute Simulation
Simulate attribute data under DINA model ($N$ by $J$)
```{r sim-dina-attributes}
# Set a seed for reproducibility
set.seed(51823)
# Simulate attributes under the DINA model
attributes = sim_dina_attributes(subject_alphas, Q)
attributes
```
## rRUM Simulation
The rRUM simulations are done using the following settings.
```{r rrum-sim-setup}
# Set a seed for reproducibility
set.seed(888)
# Setup Parameters
N = 15 # Number of Examinees / Subjects
J = 10 # Number of Items
K = 2 # Number of Skills / Attributes
# The probabilities of answering each item correctly for individuals
# who do not lack any required attribute
pistar = rep(.9, J)
# Simulate an identifiable Q matrix
Q = sim_q_matrix(J, K)
# Penalties for failing to have each of the required attributes
rstar = .5 * Q
# Latent Class Probabilities
pis = c(.1, .2, .3, .4)
# Generate latent attribute profile with custom probability (N subjects by K skills)
subject_alphas = sim_subject_attributes(N, K, prob = pis)
# Equivalent to:
# class_alphas = attribute_classes(K)
# subject_alphas = class_alphas[sample(2 ^ K, N, replace = TRUE, prob = pis),]
```
### Simulate rRUM items
Simulate rRUM item data $Y$ ($N$ by $J$)
```{r sim-rrum}
# Set a seed for reproducibility
set.seed(912)
# Generate rRUM items
rrum_items = sim_rrum_items(Q, rstar, pistar, subject_alphas)
rrum_items
```