Code
library(thurstonianIRT)The model is the Thurstonian IRT model of Brown and Maydeu-Olivares (2011), fitted with the thurstonianIRT package (Bürkner, Schulte & Holling, 2019).
Forced-choice rankings must be expressed as binary pairwise outcomes: for each pair {i, k} in a block, y = 1 if item i is preferred to item k and 0 otherwise (Brown & Maydeu-Olivares, 2011). In the examples below, rank 1 denotes the most preferred item. The triplets data are already in this pairwise format; raw ranks could instead be passed to make_TIRT_data(..., format = "ranks", direction = "smaller"), which performs this recoding automatically.
| Rank | Rank | Rank |
|---|---|---|
| A | B | C |
| 1 | 2 | 3 |
| binary | binary | binary |
|---|---|---|
| {A, B} | {A, C} | {B, C} |
| 1 | 1 | 1 |
| Rank | Rank | Rank |
|---|---|---|
| A | B | C |
| 2 | 1 | 3 |
| binary | binary | binary |
|---|---|---|
| {A, B} | {A, C} | {B, C} |
| 0 | 1 | 1 |
blocks<-set_block(c("i1","i2","i3"),
traits=c("t1","t2","t3"),
signs=c(1,1,1))+
set_block(c("i4","i5","i6"),
traits=c("t1","t2","t3"),
signs=c(-1,1,1))+
set_block(c("i7","i8","i9"),
traits=c("t1","t2","t3"),
signs=c(1,1,-1))+
set_block(c("i10","i11","i12"),
traits=c("t1","t2","t3"),
signs=c(1,-1,1))
data.frame(blocks$blocks) items traits names signs items.1 traits.1 names.1 signs.1 items.2 traits.2 names.2 signs.2 items.3 traits.3 names.3 signs.3
1 i1 t1 i1 1 i4 t1 i4 -1 i7 t1 i7 1 i10 t1 i10 1
2 i2 t2 i2 1 i5 t2 i5 1 i8 t2 i8 1 i11 t2 i11 -1
3 i3 t3 i3 1 i6 t3 i6 1 i9 t3 i9 -1 i12 t3 i12 1
data_tirt<-make_TIRT_data(data=triplets,blocks=blocks,direction="larger",format="pairwise",family="bernoulli",range=c(0,1))
data_sem<-make_sem_data(data=data_tirt)
data_stan<-make_stan_data(data=data_tirt)
spesification_lavaan<-make_lavaan_code(data_tirt)
spesification_mplus<-make_mplus_code(data_tirt)# factor loadings (lambda)
trait1 =~ start(1) * i1i2 + L1 * i1i2 + start(1) * i1i3 + L1 * i1i3 + start(1) * i4i5 + L4 * i4i5 + start(1) * i4i6 + L4 * i4i6 + start(1) * i7i8 + L7 * i7i8 + start(1) * i7i9 + L7 * i7i9 + start(1) * i10i11 + L10 * i10i11 + start(1) * i10i12 + L10 * i10i12
trait2 =~ start(-1) * i1i2 + L2n * i1i2 + start(1) * i2i3 + L2 * i2i3 + start(-1) * i4i5 + L5n * i4i5 + start(1) * i5i6 + L5 * i5i6 + start(-1) * i7i8 + L8n * i7i8 + start(1) * i8i9 + L8 * i8i9 + start(-1) * i10i11 + L11n * i10i11 + start(1) * i11i12 + L11 * i11i12
trait3 =~ start(-1) * i1i3 + L3n * i1i3 + start(-1) * i2i3 + L3n * i2i3 + start(-1) * i4i6 + L6n * i4i6 + start(-1) * i5i6 + L6n * i5i6 + start(-1) * i7i9 + L9n * i7i9 + start(-1) * i8i9 + L9n * i8i9 + start(-1) * i10i12 + L12n * i10i12 + start(-1) * i11i12 + L12n * i11i12
# fix factor variances to 1
trait1 ~~ 1 * trait1
trait2 ~~ 1 * trait2
trait3 ~~ 1 * trait3
# factor correlations
trait1 ~~ trait2 + trait3
trait2 ~~ trait3
# fix factor loadings of the same item to the same value
L2 == -L2n
L5 == -L5n
L8 == -L8n
L11 == -L11n
# declare uniquenesses (psi)
i1i2 ~~ P1P2 * i1i2
i1i3 ~~ P1P3 * i1i3
i2i3 ~~ P2P3 * i2i3
i4i5 ~~ P4P5 * i4i5
i4i6 ~~ P4P6 * i4i6
i5i6 ~~ P5P6 * i5i6
i7i8 ~~ P7P8 * i7i8
i7i9 ~~ P7P9 * i7i9
i8i9 ~~ P8P9 * i8i9
i10i11 ~~ P10P11 * i10i11
i10i12 ~~ P10P12 * i10i12
i11i12 ~~ P11P12 * i11i12
# correlated uniqunesses
i1i2 ~~ start(1) * i1i3 + P1 * i1i3
i1i2 ~~ start(-1) * i2i3 + P2n * i2i3
i1i3 ~~ start(1) * i2i3 + P3 * i2i3
i4i5 ~~ start(1) * i4i6 + P4 * i4i6
i4i5 ~~ start(-1) * i5i6 + P5n * i5i6
i4i6 ~~ start(1) * i5i6 + P6 * i5i6
i7i8 ~~ start(1) * i7i9 + P7 * i7i9
i7i8 ~~ start(-1) * i8i9 + P8n * i8i9
i7i9 ~~ start(1) * i8i9 + P9 * i8i9
i10i11 ~~ start(1) * i10i12 + P10 * i10i12
i10i11 ~~ start(-1) * i11i12 + P11n * i11i12
i10i12 ~~ start(1) * i11i12 + P12 * i11i12
# pair's uniqueness is equal to sum of 2 utility uniqunesses
P1P2 == P1 - P2n
P1P3 == P1 + P3
P2P3 == - P2n + P3
P4P5 == P4 - P5n
P4P6 == P4 + P6
P5P6 == - P5n + P6
P7P8 == P7 - P8n
P7P9 == P7 + P9
P8P9 == - P8n + P9
P10P11 == P10 - P11n
P10P12 == P10 + P12
P11P12 == - P11n + P12
# fix certain uniquenesses for identification
P1 == 1
P4 == 1
P7 == 1
P10 == 1
# force item parameters of the same item to be equal
Thurstonian IRT model
! It is assumed that the input file contains only item responses
! Any additional variables should be added below
CATEGORICAL ARE ALL;
ESTIMATOR = ulsmv;
ITERATIONS = 1000;
PARAMETERIZATION = theta;
! factor loadings (lambda)
trait1 BY
i1i2*1 (L1)
i1i3*1 (L1)
i4i5*1 (L4)
i4i6*1 (L4)
i7i8*1 (L7)
i7i9*1 (L7)
i10i11*1 (L10)
i10i12*1 (L10);
trait2 BY
i1i2*-1 (L2n)
i2i3*1 (L2)
i4i5*-1 (L5n)
i5i6*1 (L5)
i7i8*-1 (L8n)
i8i9*1 (L8)
i10i11*-1 (L11n)
i11i12*1 (L11);
trait3 BY
i1i3*-1 (L3n)
i2i3*-1 (L3n)
i4i6*-1 (L6n)
i5i6*-1 (L6n)
i7i9*-1 (L9n)
i8i9*-1 (L9n)
i10i12*-1 (L12n)
i11i12*-1 (L12n);
! fix factor variances to 1
trait1@1
trait2@1
trait3@1
! factor correlations
trait1 WITH
trait2*0
trait3*0;
trait2 WITH
trait3*0;
! declare uniquenesses (psi)
i1i2*1 (P1P2);
i1i3*1 (P1P3);
i2i3*1 (P2P3);
i4i5*1 (P4P5);
i4i6*1 (P4P6);
i5i6*1 (P5P6);
i7i8*1 (P7P8);
i7i9*1 (P7P9);
i8i9*1 (P8P9);
i10i11*1 (P10P11);
i10i12*1 (P10P12);
i11i12*1 (P11P12);
! correlated uniqunesses
i1i2 WITH i1i3*1 (P1);
i1i2 WITH i2i3*-1 (P2n);
i1i3 WITH i2i3*1 (P3);
i4i5 WITH i4i6*1 (P4);
i4i5 WITH i5i6*-1 (P5n);
i4i6 WITH i5i6*1 (P6);
i7i8 WITH i7i9*1 (P7);
i7i8 WITH i8i9*-1 (P8n);
i7i9 WITH i8i9*1 (P9);
i10i11 WITH i10i12*1 (P10);
i10i11 WITH i11i12*-1 (P11n);
i10i12 WITH i11i12*1 (P12);
! fix factor loadings of the same item to the same value
L2 = -L2n;
L5 = -L5n;
L8 = -L8n;
L11 = -L11n;
! pair's uniqueness is equal to sum of 2 utility uniqunesses
P1P2 = P1- P2n;
P1P3 = P1 + P3;
P2P3 = - P2n + P3;
P4P5 = P4- P5n;
P4P6 = P4 + P6;
P5P6 = - P5n + P6;
P7P8 = P7- P8n;
P7P9 = P7 + P9;
P8P9 = - P8n + P9;
P10P11 = P10- P11n;
P10P12 = P10 + P12;
P11P12 = - P11n + P12;
! fix certain uniquenesses for identification
P1 = 1;
P4 = 1;
P7 = 1;
P10 = 1;
! force item parameters of the same item to be equal
! trait scores for individuals are estimated and saved in a file
FILE IS 'eta.csv';
SAVE = FSCORES;
SAMPLING FOR MODEL 'thurstonian_irt_model' NOW (CHAIN 1).
Chain 1:
Chain 1: Gradient evaluation took 0.000958 seconds
Chain 1: 1000 transitions using 10 leapfrog steps per transition would take 9.58 seconds.
Chain 1: Adjust your expectations accordingly!
Chain 1:
Chain 1:
Chain 1: Iteration: 1 / 2000 [ 0%] (Warmup)
Chain 1: Iteration: 200 / 2000 [ 10%] (Warmup)
Chain 1: Iteration: 400 / 2000 [ 20%] (Warmup)
Chain 1: Iteration: 600 / 2000 [ 30%] (Warmup)
Chain 1: Iteration: 800 / 2000 [ 40%] (Warmup)
Chain 1: Iteration: 1000 / 2000 [ 50%] (Warmup)
Chain 1: Iteration: 1001 / 2000 [ 50%] (Sampling)
Chain 1: Iteration: 1200 / 2000 [ 60%] (Sampling)
Chain 1: Iteration: 1400 / 2000 [ 70%] (Sampling)
Chain 1: Iteration: 1600 / 2000 [ 80%] (Sampling)
Chain 1: Iteration: 1800 / 2000 [ 90%] (Sampling)
Chain 1: Iteration: 2000 / 2000 [100%] (Sampling)
Chain 1:
Chain 1: Elapsed Time: 33.763 seconds (Warm-up)
Chain 1: 28.628 seconds (Sampling)
Chain 1: 62.391 seconds (Total)
Chain 1:
SAMPLING FOR MODEL 'thurstonian_irt_model' NOW (CHAIN 2).
Chain 2:
Chain 2: Gradient evaluation took 0.000631 seconds
Chain 2: 1000 transitions using 10 leapfrog steps per transition would take 6.31 seconds.
Chain 2: Adjust your expectations accordingly!
Chain 2:
Chain 2:
Chain 2: Iteration: 1 / 2000 [ 0%] (Warmup)
Chain 2: Iteration: 200 / 2000 [ 10%] (Warmup)
Chain 2: Iteration: 400 / 2000 [ 20%] (Warmup)
Chain 2: Iteration: 600 / 2000 [ 30%] (Warmup)
Chain 2: Iteration: 800 / 2000 [ 40%] (Warmup)
Chain 2: Iteration: 1000 / 2000 [ 50%] (Warmup)
Chain 2: Iteration: 1001 / 2000 [ 50%] (Sampling)
Chain 2: Iteration: 1200 / 2000 [ 60%] (Sampling)
Chain 2: Iteration: 1400 / 2000 [ 70%] (Sampling)
Chain 2: Iteration: 1600 / 2000 [ 80%] (Sampling)
Chain 2: Iteration: 1800 / 2000 [ 90%] (Sampling)
Chain 2: Iteration: 2000 / 2000 [100%] (Sampling)
Chain 2:
Chain 2: Elapsed Time: 35.075 seconds (Warm-up)
Chain 2: 29.31 seconds (Sampling)
Chain 2: 64.385 seconds (Total)
Chain 2:
SAMPLING FOR MODEL 'thurstonian_irt_model' NOW (CHAIN 3).
Chain 3:
Chain 3: Gradient evaluation took 0.000398 seconds
Chain 3: 1000 transitions using 10 leapfrog steps per transition would take 3.98 seconds.
Chain 3: Adjust your expectations accordingly!
Chain 3:
Chain 3:
Chain 3: Iteration: 1 / 2000 [ 0%] (Warmup)
Chain 3: Iteration: 200 / 2000 [ 10%] (Warmup)
Chain 3: Iteration: 400 / 2000 [ 20%] (Warmup)
Chain 3: Iteration: 600 / 2000 [ 30%] (Warmup)
Chain 3: Iteration: 800 / 2000 [ 40%] (Warmup)
Chain 3: Iteration: 1000 / 2000 [ 50%] (Warmup)
Chain 3: Iteration: 1001 / 2000 [ 50%] (Sampling)
Chain 3: Iteration: 1200 / 2000 [ 60%] (Sampling)
Chain 3: Iteration: 1400 / 2000 [ 70%] (Sampling)
Chain 3: Iteration: 1600 / 2000 [ 80%] (Sampling)
Chain 3: Iteration: 1800 / 2000 [ 90%] (Sampling)
Chain 3: Iteration: 2000 / 2000 [100%] (Sampling)
Chain 3:
Chain 3: Elapsed Time: 33.105 seconds (Warm-up)
Chain 3: 27.95 seconds (Sampling)
Chain 3: 61.055 seconds (Total)
Chain 3:
SAMPLING FOR MODEL 'thurstonian_irt_model' NOW (CHAIN 4).
Chain 4:
Chain 4: Gradient evaluation took 0.000402 seconds
Chain 4: 1000 transitions using 10 leapfrog steps per transition would take 4.02 seconds.
Chain 4: Adjust your expectations accordingly!
Chain 4:
Chain 4:
Chain 4: Iteration: 1 / 2000 [ 0%] (Warmup)
Chain 4: Iteration: 200 / 2000 [ 10%] (Warmup)
Chain 4: Iteration: 400 / 2000 [ 20%] (Warmup)
Chain 4: Iteration: 600 / 2000 [ 30%] (Warmup)
Chain 4: Iteration: 800 / 2000 [ 40%] (Warmup)
Chain 4: Iteration: 1000 / 2000 [ 50%] (Warmup)
Chain 4: Iteration: 1001 / 2000 [ 50%] (Sampling)
Chain 4: Iteration: 1200 / 2000 [ 60%] (Sampling)
Chain 4: Iteration: 1400 / 2000 [ 70%] (Sampling)
Chain 4: Iteration: 1600 / 2000 [ 80%] (Sampling)
Chain 4: Iteration: 1800 / 2000 [ 90%] (Sampling)
Chain 4: Iteration: 2000 / 2000 [100%] (Sampling)
Chain 4:
Chain 4: Elapsed Time: 34.711 seconds (Warm-up)
Chain 4: 29.236 seconds (Sampling)
Chain 4: 63.947 seconds (Total)
Chain 4:
# A tibble: 600 × 3
id trait estimate
<int> <chr> <dbl>
1 1 trait1 0.300
2 1 trait2 -1.21
3 1 trait3 0.143
4 2 trait1 -0.915
5 2 trait2 0.858
6 2 trait3 0.640
7 3 trait1 -0.631
8 3 trait2 1.34
9 3 trait3 0.877
10 4 trait1 -0.952
# ℹ 590 more rows
fit
chisq.scaled 46.71
df.scaled 43.00
pvalue.scaled 0.32
cfi.scaled 0.99
tli.scaled 0.99
rmsea.scaled 0.02
srmr 0.07
gfi 0.98
r_squared
i1i2 0.6063962
i1i3 0.5592264
i2i3 0.4278743
i4i5 0.5230762
i4i6 0.6047728
i5i6 0.3926475
i7i8 0.5656510
i7i9 0.5186509
i8i9 0.5715663
i10i11 0.4101206
i10i12 0.5753794
i11i12 0.5960012
$lambda
trait1 trait2 trait3
i1i2 1.174 -1.264 0.000
i1i3 1.174 0.000 -1.224
i4i5 -1.389 -1.240 0.000
i4i6 -1.389 0.000 -0.923
i7i8 1.036 -1.006 0.000
i7i9 1.036 0.000 0.998
i10i11 1.113 0.595 0.000
i10i12 1.113 0.000 -1.231
i2i3 0.000 1.264 -1.224
i5i6 0.000 1.240 -0.923
i8i9 0.000 1.006 0.998
i11i12 0.000 -0.595 -1.231
$theta
i1i2 i1i3 i4i5 i4i6 i7i8 i7i9 i10i11 i10i12 i2i3 i5i6 i8i9 i11i12
i1i2 2.432
i1i3 1.000 2.078
i4i5 0.000 0.000 2.344
i4i6 0.000 0.000 1.000 1.958
i7i8 0.000 0.000 0.000 0.000 2.016
i7i9 0.000 0.000 0.000 0.000 1.000 2.081
i10i11 0.000 0.000 0.000 0.000 0.000 0.000 1.795
i10i12 0.000 0.000 0.000 0.000 0.000 0.000 1.000 1.864
i2i3 -1.432 1.078 0.000 0.000 0.000 0.000 0.000 0.000 2.510
i5i6 0.000 0.000 -1.344 0.958 0.000 0.000 0.000 0.000 0.000 2.302
i8i9 0.000 0.000 0.000 0.000 -1.016 1.081 0.000 0.000 0.000 0.000 2.097
i11i12 0.000 0.000 0.000 0.000 0.000 0.000 -0.795 0.864 0.000 0.000 0.000 1.659
$psi
trait1 trait2 trait3
trait1 1.000
trait2 -0.260 1.000
trait3 0.083 0.394 1.000
$nu
intrcp
i1i2 0
i1i3 0
i4i5 0
i4i6 0
i7i8 0
i7i9 0
i10i11 0
i10i12 0
i2i3 0
i5i6 0
i8i9 0
i11i12 0
$alpha
intrcp
trait1 0
trait2 0
trait3 0
$tau
thrshl
i1i2|t1 0.470
i1i3|t1 -1.170
i4i5|t1 0.648
i4i6|t1 1.135
i7i8|t1 -0.859
i7i9|t1 -1.181
i10i11|t1 0.533
i10i12|t1 1.514
i2i3|t1 -1.917
i5i6|t1 0.646
i8i9|t1 -0.475
i11i12|t1 0.892
$delta
scales
i1i2 0.402
i1i3 0.461
i4i5 0.451
i4i6 0.449
i7i8 0.464
i7i9 0.481
i10i11 0.573
i10i12 0.477
i2i3 0.477
i5i6 0.514
i8i9 0.452
i11i12 0.493
$lambda
trait1 trait2 trait3
i1i2 0.472 -0.508 0.000
i1i3 0.541 0.000 -0.564
i4i5 -0.626 -0.559 0.000
i4i6 -0.624 0.000 -0.415
i7i8 0.481 -0.467 0.000
i7i9 0.498 0.000 0.480
i10i11 0.638 0.341 0.000
i10i12 0.531 0.000 -0.588
i2i3 0.000 0.603 -0.584
i5i6 0.000 0.637 -0.474
i8i9 0.000 0.455 0.451
i11i12 0.000 -0.294 -0.608
$theta
i1i2 i1i3 i4i5 i4i6 i7i8 i7i9 i10i11 i10i12 i2i3 i5i6 i8i9 i11i12
i1i2 0.394
i1i3 0.445 0.441
i4i5 0.000 0.000 0.477
i4i6 0.000 0.000 0.467 0.395
i7i8 0.000 0.000 0.000 0.000 0.434
i7i9 0.000 0.000 0.000 0.000 0.488 0.481
i10i11 0.000 0.000 0.000 0.000 0.000 0.000 0.590
i10i12 0.000 0.000 0.000 0.000 0.000 0.000 0.547 0.425
i2i3 -0.580 0.472 0.000 0.000 0.000 0.000 0.000 0.000 0.572
i5i6 0.000 0.000 -0.579 0.451 0.000 0.000 0.000 0.000 0.000 0.607
i8i9 0.000 0.000 0.000 0.000 -0.494 0.517 0.000 0.000 0.000 0.000 0.428
i11i12 0.000 0.000 0.000 0.000 0.000 0.000 -0.461 0.491 0.000 0.000 0.000 0.404
$psi
trait1 trait2 trait3
trait1 1.000
trait2 -0.260 1.000
trait3 0.083 0.394 1.000
$nu
intrcp
i1i2 0
i1i3 0
i4i5 0
i4i6 0
i7i8 0
i7i9 0
i10i11 0
i10i12 0
i2i3 0
i5i6 0
i8i9 0
i11i12 0
$alpha
intrcp
trait1 0
trait2 0
trait3 0
$tau
thrshl
i1i2|t1 0.189
i1i3|t1 -0.539
i4i5|t1 0.292
i4i6|t1 0.510
i7i8|t1 -0.399
i7i9|t1 -0.568
i10i11|t1 0.305
i10i12|t1 0.722
i2i3|t1 -0.915
i5i6|t1 0.332
i8i9|t1 -0.215
i11i12|t1 0.440
$delta
scales
i1i2 1
i1i3 1
i4i5 1
i4i6 1
i7i8 1
i7i9 1
i10i11 1
i10i12 1
i2i3 1
i5i6 1
i8i9 1
i11i12 1
Latent Variables:
Estimate Std.Err z-value P(>|z|) ci.lower ci.upper Std.lv Std.all
trait1 =~
i1i2 (L1) 1.174 0.513 2.289 0.022 0.169 2.179 1.174 0.472
i1i3 (L1) 1.174 0.513 2.289 0.022 0.169 2.179 1.174 0.541
i4i5 (L4) -1.389 0.607 -2.289 0.022 -2.578 -0.199 -1.389 -0.626
i4i6 (L4) -1.389 0.607 -2.289 0.022 -2.578 -0.199 -1.389 -0.624
i7i8 (L7) 1.036 0.375 2.765 0.006 0.302 1.770 1.036 0.481
i7i9 (L7) 1.036 0.375 2.765 0.006 0.302 1.770 1.036 0.498
i10i11 (L10) 1.113 0.429 2.591 0.010 0.271 1.954 1.113 0.638
i10i12 (L10) 1.113 0.429 2.591 0.010 0.271 1.954 1.113 0.531
trait2 =~
i1i2 (L2n) -1.264 0.504 -2.507 0.012 -2.252 -0.276 -1.264 -0.508
i2i3 (L2) 1.264 0.504 2.507 0.012 0.276 2.252 1.264 0.603
i4i5 (L5n) -1.240 0.517 -2.398 0.016 -2.253 -0.226 -1.240 -0.559
i5i6 (L5) 1.240 0.517 2.398 0.016 0.226 2.253 1.240 0.637
i7i8 (L8n) -1.006 0.371 -2.713 0.007 -1.732 -0.279 -1.006 -0.467
i8i9 (L8) 1.006 0.371 2.713 0.007 0.279 1.732 1.006 0.455
i10i11 (L11n) 0.595 0.273 2.180 0.029 0.060 1.130 0.595 0.341
i11i12 (L11) -0.595 0.273 -2.180 0.029 -1.130 -0.060 -0.595 -0.294
trait3 =~
i1i3 (L3n) -1.224 0.461 -2.656 0.008 -2.127 -0.321 -1.224 -0.564
i2i3 (L3n) -1.224 0.461 -2.656 0.008 -2.127 -0.321 -1.224 -0.584
i4i6 (L6n) -0.923 0.401 -2.302 0.021 -1.710 -0.137 -0.923 -0.415
i5i6 (L6n) -0.923 0.401 -2.302 0.021 -1.710 -0.137 -0.923 -0.474
i7i9 (L9n) 0.998 0.339 2.944 0.003 0.334 1.663 0.998 0.480
i8i9 (L9n) 0.998 0.339 2.944 0.003 0.334 1.663 0.998 0.451
i10i12 (L12n) -1.231 0.423 -2.909 0.004 -2.061 -0.402 -1.231 -0.588
i11i12 (L12n) -1.231 0.423 -2.909 0.004 -2.061 -0.402 -1.231 -0.608
Covariances:
Estimate Std.Err z-value P(>|z|) ci.lower ci.upper Std.lv Std.all
trait1 ~~
trait2 -0.260 0.147 -1.766 0.077 -0.548 0.029 -0.260 -0.260
trait3 0.083 0.163 0.513 0.608 -0.236 0.402 0.083 0.083
trait2 ~~
trait3 0.394 0.139 2.842 0.004 0.122 0.665 0.394 0.394
.i1i2 ~~
.i1i3 (P1) 1.000 1.000 1.000 1.000 0.445
.i2i3 (P2n) -1.432 1.272 -1.126 0.260 -3.925 1.060 -1.432 -0.580
.i1i3 ~~
.i2i3 (P3) 1.078 1.114 0.968 0.333 -1.105 3.261 1.078 0.472
.i4i5 ~~
.i4i6 (P4) 1.000 1.000 1.000 1.000 0.467
.i5i6 (P5n) -1.344 1.134 -1.186 0.236 -3.567 0.878 -1.344 -0.579
.i4i6 ~~
.i5i6 (P6) 0.958 0.883 1.084 0.278 -0.774 2.689 0.958 0.451
.i7i8 ~~
.i7i9 (P7) 1.000 1.000 1.000 1.000 0.488
.i8i9 (P8n) -1.016 0.801 -1.269 0.204 -2.586 0.553 -1.016 -0.494
.i7i9 ~~
.i8i9 (P9) 1.081 0.879 1.230 0.219 -0.642 2.803 1.081 0.517
.i10i11 ~~
.i10i12 (P10) 1.000 1.000 1.000 1.000 0.547
.i11i12 (P11n) -0.795 0.677 -1.174 0.240 -2.123 0.532 -0.795 -0.461
.i10i12 ~~
.i11i12 (P12) 0.864 0.726 1.191 0.234 -0.558 2.286 0.864 0.491
Intercepts:
Estimate Std.Err z-value P(>|z|) ci.lower ci.upper Std.lv Std.all
.i1i2 0.000 0.000 0.000 0.000 0.000
.i1i3 0.000 0.000 0.000 0.000 0.000
.i4i5 0.000 0.000 0.000 0.000 0.000
.i4i6 0.000 0.000 0.000 0.000 0.000
.i7i8 0.000 0.000 0.000 0.000 0.000
.i7i9 0.000 0.000 0.000 0.000 0.000
.i10i11 0.000 0.000 0.000 0.000 0.000
.i10i12 0.000 0.000 0.000 0.000 0.000
.i2i3 0.000 0.000 0.000 0.000 0.000
.i5i6 0.000 0.000 0.000 0.000 0.000
.i8i9 0.000 0.000 0.000 0.000 0.000
.i11i12 0.000 0.000 0.000 0.000 0.000
trait1 0.000 0.000 0.000 0.000 0.000
trait2 0.000 0.000 0.000 0.000 0.000
trait3 0.000 0.000 0.000 0.000 0.000
Thresholds:
Estimate Std.Err z-value P(>|z|) ci.lower ci.upper Std.lv Std.all
i1i2|t1 0.470 0.259 1.815 0.069 -0.037 0.978 0.470 0.189
i1i3|t1 -1.170 0.413 -2.835 0.005 -1.979 -0.361 -1.170 -0.539
i4i5|t1 0.648 0.282 2.297 0.022 0.095 1.201 0.648 0.292
i4i6|t1 1.135 0.413 2.748 0.006 0.326 1.945 1.135 0.510
i7i8|t1 -0.859 0.273 -3.147 0.002 -1.395 -0.324 -0.859 -0.399
i7i9|t1 -1.181 0.331 -3.565 0.000 -1.830 -0.532 -1.181 -0.568
i10i11|t1 0.533 0.211 2.525 0.012 0.119 0.947 0.533 0.305
i10i12|t1 1.514 0.439 3.447 0.001 0.653 2.374 1.514 0.722
i2i3|t1 -1.917 0.711 -2.696 0.007 -3.311 -0.524 -1.917 -0.915
i5i6|t1 0.646 0.284 2.273 0.023 0.089 1.203 0.646 0.332
i8i9|t1 -0.475 0.244 -1.944 0.052 -0.954 0.004 -0.475 -0.215
i11i12|t1 0.892 0.313 2.846 0.004 0.278 1.505 0.892 0.440
Variances:
Estimate Std.Err z-value P(>|z|) ci.lower ci.upper Std.lv Std.all
trat1 1.000 1.000 1.000 1.000 1.000
trat2 1.000 1.000 1.000 1.000 1.000
trat3 1.000 1.000 1.000 1.000 1.000
.i1i2 (P1P2) 2.432 1.272 1.912 0.056 -0.060 4.925 2.432 0.394
.i1i3 (P1P3) 2.078 1.114 1.866 0.062 -0.105 4.261 2.078 0.441
.i2i3 (P2P3) 2.510 2.163 1.161 0.246 -1.729 6.750 2.510 0.572
.i4i5 (P4P5) 2.344 1.134 2.067 0.039 0.122 4.567 2.344 0.477
.i4i6 (P4P6) 1.958 0.883 2.216 0.027 0.226 3.689 1.958 0.395
.i5i6 (P5P6) 2.302 1.828 1.260 0.208 -1.280 5.884 2.302 0.607
.i7i8 (P7P8) 2.016 0.801 2.518 0.012 0.447 3.586 2.016 0.434
.i7i9 (P7P9) 2.081 0.879 2.368 0.018 0.358 3.803 2.081 0.481
.i8i9 (P8P9) 2.097 1.430 1.466 0.143 -0.706 4.900 2.097 0.428
.i1011 (P10P11) 1.795 0.677 2.650 0.008 0.468 3.123 1.795 0.590
.i1012 (P10P12) 1.864 0.726 2.569 0.010 0.442 3.286 1.864 0.425
.i1112 (P11P) 1.659 1.176 1.411 0.158 -0.646 3.964 1.659 0.404
Scales y*:
Estimate Std.Err z-value P(>|z|) ci.lower ci.upper Std.lv Std.all
i1i2 0.402 0.402 0.402 0.402 1.000
i1i3 0.461 0.461 0.461 0.461 1.000
i4i5 0.451 0.451 0.451 0.451 1.000
i4i6 0.449 0.449 0.449 0.449 1.000
i7i8 0.464 0.464 0.464 0.464 1.000
i7i9 0.481 0.481 0.481 0.481 1.000
i10i11 0.573 0.573 0.573 0.573 1.000
i10i12 0.477 0.477 0.477 0.477 1.000
i2i3 0.477 0.477 0.477 0.477 1.000
i5i6 0.514 0.514 0.514 0.514 1.000
i8i9 0.452 0.452 0.452 0.452 1.000
i11i12 0.493 0.493 0.493 0.493 1.000
R-Square:
Estimate
i1i2 0.606
i1i3 0.559
i2i3 0.428
i4i5 0.523
i4i6 0.605
i5i6 0.393
i7i8 0.566
i7i9 0.519
i8i9 0.572
i10i11 0.410
i10i12 0.575
i11i12 0.596
Constraints:
|Slack|
L2 - (-L2n) 0.000
L5 - (-L5n) 0.000
L8 - (-L8n) 0.000
L11 - (-L11n) 0.000
P1P2 - (P1-P2n) 0.000
P1P3 - (P1+P3) 0.000
P2P3 - (-P2n+P3) 0.000
P4P5 - (P4-P5n) 0.000
P4P6 - (P4+P6) 0.000
P5P6 - (-P5n+P6) 0.000
P7P8 - (P7-P8n) 0.000
P7P9 - (P7+P9) 0.000
P8P9 - (-P8n+P9) 0.000
P10P11 - (P10-P11n) 0.000
P10P12 - (P10+P12) 0.000
P11P12 - (-P11n+P12) 0.000
P1 - (1) 0.000
P4 - (1) 0.000
P7 - (1) 0.000
P10 - (1) 0.000
lhs op rhs mi epc sepc.all delta ncp power decision
122 trait1 =~ i2i3 13.197 0.644 0.307 0.1 0.318 0.087 **(m)**
180 i10i12 ~~ i5i6 11.332 -1.077 -0.520 0.1 0.098 0.061 **(m)**
153 i4i5 ~~ i7i9 9.980 1.287 0.583 0.1 0.060 0.057 **(m)**
176 i10i11 ~~ i2i3 8.760 0.835 0.393 0.1 0.126 0.065 **(m)**
123 trait1 =~ i5i6 7.414 -0.433 -0.222 0.1 0.396 0.096 **(m)**
179 i10i12 ~~ i2i3 5.250 0.838 0.387 0.1 0.075 0.059 **(m)**
173 i7i9 ~~ i2i3 5.138 0.818 0.358 0.1 0.077 0.059 **(m)**
125 trait1 =~ i11i12 4.999 -0.340 -0.168 0.1 0.434 0.101 **(m)**
177 i10i11 ~~ i5i6 4.190 -0.543 -0.267 0.1 0.142 0.066 **(m)**
166 i7i8 ~~ i10i11 3.730 0.623 0.327 0.1 0.096 0.061 (i)
148 i1i3 ~~ i10i12 3.665 -0.777 -0.395 0.1 0.061 0.057 (i)
184 i2i3 ~~ i11i12 3.331 -0.663 -0.325 0.1 0.076 0.059 (i)
128 trait2 =~ i7i9 2.733 0.391 0.188 0.1 0.179 0.071 (i)
72 i7i9 ~*~ i7i9 2.680 -0.065 -1.000 0.1 6.414 0.717 (i)
74 i10i12 ~*~ i10i12 2.583 -0.055 -1.000 0.1 8.526 0.831 (nm)
130 trait3 =~ i1i2 2.463 0.305 0.123 0.1 0.265 0.081 (i)
175 i7i9 ~~ i11i12 2.422 -0.581 -0.313 0.1 0.072 0.058 (i)
139 i1i2 ~~ i10i12 2.366 -0.670 -0.314 0.1 0.053 0.056 (i)
124 trait1 =~ i8i9 2.266 -0.275 -0.124 0.1 0.299 0.085 (i)
140 i1i2 ~~ i5i6 2.229 -0.601 -0.254 0.1 0.062 0.057 (i)
155 i4i5 ~~ i10i12 2.213 0.565 0.270 0.1 0.069 0.058 (i)
145 i1i3 ~~ i7i8 2.210 0.601 0.294 0.1 0.061 0.057 (i)
149 i1i3 ~~ i5i6 2.191 0.493 0.225 0.1 0.090 0.060 (i)
186 i5i6 ~~ i11i12 2.154 0.475 0.243 0.1 0.096 0.061 (i)
135 i1i2 ~~ i4i6 2.130 -0.671 -0.308 0.1 0.047 0.055 (i)
170 i7i8 ~~ i11i12 1.807 -0.495 -0.271 0.1 0.074 0.058 (i)
138 i1i2 ~~ i10i11 1.734 -0.473 -0.226 0.1 0.078 0.059 (i)
154 i4i5 ~~ i10i11 1.730 -0.445 -0.217 0.1 0.087 0.060 (i)
156 i4i5 ~~ i2i3 1.460 0.466 0.192 0.1 0.067 0.058 (i)
150 i1i3 ~~ i8i9 1.409 -0.500 -0.239 0.1 0.056 0.056 (i)
73 i10i11 ~*~ i10i11 1.340 0.063 1.000 0.1 3.367 0.450 (i)
41 i10i12 ~~ i10i12 1.258 0.493 0.425 0.1 0.052 0.056 (i)
38 i7i9 ~~ i7i9 1.220 0.529 0.481 0.1 0.044 0.055 (i)
134 i1i2 ~~ i4i5 1.161 -0.492 -0.206 0.1 0.048 0.056 (i)
69 i4i5 ~*~ i4i5 1.043 -0.038 -1.000 0.1 7.125 0.761 (nm)
174 i7i9 ~~ i5i6 1.032 0.353 0.161 0.1 0.083 0.060 (i)
171 i7i9 ~~ i10i11 1.024 0.321 0.166 0.1 0.099 0.061 (i)
151 i1i3 ~~ i11i12 1.018 0.385 0.207 0.1 0.069 0.058 (i)
77 i8i9 ~*~ i8i9 1.007 0.034 1.000 0.1 8.695 0.839 (nm)
132 trait3 =~ i7i8 0.869 -0.194 -0.090 0.1 0.231 0.077 (i)
182 i2i3 ~~ i5i6 0.822 0.330 0.137 0.1 0.075 0.059 (i)
76 i5i6 ~*~ i5i6 0.729 0.045 1.000 0.1 3.613 0.476 (i)
144 i1i3 ~~ i4i6 0.727 0.342 0.169 0.1 0.062 0.057 (i)
143 i1i3 ~~ i4i5 0.719 -0.326 -0.148 0.1 0.068 0.058 (i)
40 i10i11 ~~ i10i11 0.684 -0.342 -0.590 0.1 0.058 0.057 (i)
127 trait2 =~ i4i6 0.662 0.150 0.067 0.1 0.294 0.084 (i)
5 trait1 =~ i7i8 0.651 0.122 0.057 0.1 0.435 0.101 (i)
34 i4i5 ~~ i4i5 0.637 0.509 0.477 0.1 0.025 0.053 (i)
68 i1i3 ~*~ i1i3 0.603 0.029 1.000 0.1 6.960 0.751 (nm)
50 i7i8 ~~ i8i9 0.587 -0.258 -0.126 0.1 0.088 0.060 (i)
24 trait3 =~ i11i12 0.582 -0.156 -0.077 0.1 0.238 0.078 (i)
39 i8i9 ~~ i8i9 0.578 -0.423 -0.428 0.1 0.032 0.054 (i)
131 trait3 =~ i4i5 0.560 0.133 0.060 0.1 0.317 0.087 (i)
75 i2i3 ~*~ i2i3 0.544 -0.034 -1.000 0.1 4.598 0.573 (i)
53 i10i11 ~~ i11i12 0.525 -0.181 -0.105 0.1 0.160 0.069 (i)
142 i1i2 ~~ i11i12 0.503 -0.299 -0.149 0.1 0.056 0.056 (i)
172 i7i9 ~~ i10i12 0.465 0.257 0.130 0.1 0.071 0.058 (i)
6 trait1 =~ i7i9 0.421 -0.079 -0.038 0.1 0.673 0.130 (i)
187 i8i9 ~~ i11i12 0.408 -0.262 -0.140 0.1 0.059 0.057 (i)
157 i4i5 ~~ i8i9 0.406 0.262 0.118 0.1 0.059 0.057 (i)
71 i7i8 ~*~ i7i8 0.404 0.022 1.000 0.1 8.130 0.814 (nm)
36 i5i6 ~~ i5i6 0.380 -0.346 -0.607 0.1 0.032 0.054 (i)
168 i7i8 ~~ i2i3 0.363 0.241 0.107 0.1 0.062 0.057 (i)
162 i4i6 ~~ i10i12 0.346 -0.230 -0.120 0.1 0.066 0.058 (i)
16 trait2 =~ i11i12 0.323 0.078 0.038 0.1 0.537 0.113 (i)
161 i4i6 ~~ i10i11 0.314 0.188 0.100 0.1 0.089 0.060 (i)
78 i11i12 ~*~ i11i12 0.308 0.021 1.000 0.1 7.251 0.768 (nm)
32 i1i3 ~~ i1i3 0.272 -0.272 -0.441 0.1 0.037 0.054 (i)
14 trait2 =~ i8i9 0.262 0.095 0.043 0.1 0.289 0.084 (i)
54 i10i12 ~~ i11i12 0.247 -0.149 -0.085 0.1 0.111 0.063 (i)
17 trait3 =~ i1i3 0.240 -0.063 -0.029 0.1 0.597 0.121 (i)
164 i4i6 ~~ i8i9 0.225 -0.194 -0.096 0.1 0.060 0.057 (i)
11 trait2 =~ i4i5 0.224 0.055 0.025 0.1 0.743 0.139 (i)
167 i7i8 ~~ i10i12 0.217 0.178 0.092 0.1 0.068 0.058 (i)
129 trait2 =~ i10i12 0.214 -0.089 -0.042 0.1 0.273 0.082 (i)
23 trait3 =~ i10i12 0.209 0.056 0.027 0.1 0.664 0.129 (i)
37 i7i8 ~~ i7i8 0.207 -0.228 -0.434 0.1 0.040 0.055 (i)
12 trait2 =~ i5i6 0.205 0.050 0.026 0.1 0.812 0.147 (i)
49 i7i8 ~~ i7i9 0.197 -0.141 -0.069 0.1 0.100 0.061 (i)
48 i4i6 ~~ i5i6 0.195 0.135 0.064 0.1 0.107 0.062 (i)
137 i1i2 ~~ i7i9 0.190 -0.188 -0.084 0.1 0.054 0.056 (i)
13 trait2 =~ i7i8 0.190 0.069 0.032 0.1 0.399 0.097 (i)
33 i2i3 ~~ i2i3 0.171 0.199 0.572 0.1 0.043 0.055 (i)
42 i11i12 ~~ i11i12 0.161 -0.179 -0.404 0.1 0.050 0.056 (i)
18 trait3 =~ i2i3 0.154 0.041 0.019 0.1 0.931 0.162 (i)
185 i5i6 ~~ i8i9 0.148 0.141 0.064 0.1 0.074 0.059 (i)
44 i1i2 ~~ i2i3 0.122 0.129 0.052 0.1 0.074 0.058 (i)
43 i1i2 ~~ i1i3 0.122 0.133 0.059 0.1 0.069 0.058 (i)
15 trait2 =~ i10i11 0.119 0.029 0.016 0.1 1.454 0.226 (i)
159 i4i6 ~~ i7i8 0.117 0.140 0.071 0.1 0.060 0.057 (i)
46 i4i5 ~~ i4i6 0.101 -0.111 -0.052 0.1 0.082 0.059 (i)
163 i4i6 ~~ i2i3 0.095 0.117 0.053 0.1 0.070 0.058 (i)
22 trait3 =~ i8i9 0.094 0.056 0.025 0.1 0.297 0.085 (i)
51 i7i9 ~~ i8i9 0.093 -0.099 -0.048 0.1 0.095 0.061 (i)
8 trait1 =~ i10i12 0.091 -0.034 -0.016 0.1 0.770 0.142 (i)
158 i4i5 ~~ i11i12 0.091 0.110 0.056 0.1 0.075 0.059 (i)
126 trait2 =~ i1i3 0.086 -0.061 -0.028 0.1 0.231 0.077 (i)
147 i1i3 ~~ i10i11 0.084 0.090 0.047 0.1 0.104 0.062 (i)
7 trait1 =~ i10i11 0.084 0.032 0.018 0.1 0.839 0.150 (i)
70 i4i6 ~*~ i4i6 0.064 0.008 1.000 0.1 8.854 0.845 (nm)
9 trait2 =~ i1i2 0.059 0.049 0.020 0.1 0.244 0.078 (i)
169 i7i8 ~~ i5i6 0.054 0.083 0.039 0.1 0.078 0.059 (i)
1 trait1 =~ i1i2 0.052 0.040 0.016 0.1 0.325 0.088 (i)
165 i4i6 ~~ i11i12 0.048 0.084 0.046 0.1 0.068 0.058 (i)
141 i1i2 ~~ i8i9 0.047 -0.103 -0.045 0.1 0.045 0.055 (i)
21 trait3 =~ i7i9 0.043 -0.026 -0.012 0.1 0.645 0.126 (i)
178 i10i11 ~~ i8i9 0.037 -0.063 -0.033 0.1 0.091 0.061 (i)
146 i1i3 ~~ i7i9 0.034 0.072 0.035 0.1 0.066 0.058 (i)
183 i2i3 ~~ i8i9 0.034 -0.075 -0.033 0.1 0.060 0.057 (i)
35 i4i6 ~~ i4i6 0.033 -0.097 -0.395 0.1 0.035 0.054 (i)
133 trait3 =~ i10i11 0.032 0.029 0.016 0.1 0.396 0.096 (i)
19 trait3 =~ i4i6 0.025 -0.019 -0.009 0.1 0.660 0.128 (i)
2 trait1 =~ i1i3 0.024 -0.019 -0.009 0.1 0.699 0.133 (i)
52 i10i11 ~~ i10i12 0.020 -0.037 -0.020 0.1 0.150 0.067 (i)
10 trait2 =~ i2i3 0.016 0.014 0.006 0.1 0.885 0.156 (i)
20 trait3 =~ i5i6 0.014 0.011 0.006 0.1 1.166 0.191 (i)
160 i4i6 ~~ i7i9 0.010 0.042 0.021 0.1 0.056 0.056 (i)
152 i4i5 ~~ i7i8 0.006 -0.032 -0.015 0.1 0.058 0.057 (i)
181 i10i12 ~~ i8i9 0.006 -0.031 -0.015 0.1 0.061 0.057 (i)
67 i1i2 ~*~ i1i2 0.005 -0.002 -1.000 0.1 13.261 0.954 (nm)
31 i1i2 ~~ i1i2 0.003 0.039 0.394 0.1 0.023 0.053 (i)
47 i4i5 ~~ i5i6 0.002 0.014 0.006 0.1 0.107 0.062 (i)
45 i1i3 ~~ i2i3 0.002 0.015 0.006 0.1 0.097 0.061 (i)
4 trait1 =~ i4i6 0.001 0.006 0.002 0.1 0.409 0.098 (i)
3 trait1 =~ i4i5 0.001 -0.003 -0.001 0.1 0.722 0.136 (i)
136 i1i2 ~~ i7i8 0.000 0.007 0.003 0.1 0.043 0.055 (i)
65 i8i9 | t1 0.000 0.000 0.000 0.1 0.409 0.098 (i)
62 i10i12 | t1 0.000 0.000 0.000 0.1 0.456 0.104 (i)
63 i2i3 | t1 0.000 0.000 0.000 0.1 0.456 0.104 (i)
58 i4i6 | t1 0.000 0.000 0.000 0.1 0.404 0.097 (i)
56 i1i3 | t1 0.000 0.000 0.000 0.1 0.424 0.100 (i)
57 i4i5 | t1 0.000 0.000 0.000 0.1 0.407 0.098 (i)
61 i10i11 | t1 0.000 0.000 0.000 0.1 0.657 0.128 (i)
64 i5i6 | t1 0.000 0.000 0.000 0.1 0.528 0.112 (i)
60 i7i9 | t1 0.000 0.000 0.000 0.1 0.463 0.104 (i)
30 trait2 ~~ trait3 0.000 0.000 0.000 0.1 5.225 0.628 (i)
66 i11i12 | t1 0.000 0.000 0.000 0.1 0.487 0.107 (i)
29 trait1 ~~ trait3 0.000 0.000 0.000 0.1 6.167 0.700 (i)
28 trait1 ~~ trait2 0.000 0.000 0.000 0.1 5.631 0.660 (i)
55 i1i2 | t1 0.000 0.000 0.000 0.1 0.324 0.088 (i)
59 i7i8 | t1 0.000 0.000 0.000 0.1 0.431 0.101 (i)
score<-predict(fit_lavaan)
score<-data.frame(score)
score<-reshape(score, direction="wide", idvar="id", timevar="trait")
triplets_new<-make_TIRT_data(data=triplets[1:2,],blocks=blocks,direction="larger",format="pairwise",family="bernoulli",range=c(0,1))
score_new<-predict(fit_stan,newdata=triplets_new)
SAMPLING FOR MODEL 'thurstonian_irt_model_newdata' NOW (CHAIN 1).
Chain 1:
Chain 1: Gradient evaluation took 1e-05 seconds
Chain 1: 1000 transitions using 10 leapfrog steps per transition would take 0.1 seconds.
Chain 1: Adjust your expectations accordingly!
Chain 1:
Chain 1:
Chain 1: Iteration: 1 / 2000 [ 0%] (Warmup)
Chain 1: Iteration: 200 / 2000 [ 10%] (Warmup)
Chain 1: Iteration: 400 / 2000 [ 20%] (Warmup)
Chain 1: Iteration: 600 / 2000 [ 30%] (Warmup)
Chain 1: Iteration: 800 / 2000 [ 40%] (Warmup)
Chain 1: Iteration: 1000 / 2000 [ 50%] (Warmup)
Chain 1: Iteration: 1001 / 2000 [ 50%] (Sampling)
Chain 1: Iteration: 1200 / 2000 [ 60%] (Sampling)
Chain 1: Iteration: 1400 / 2000 [ 70%] (Sampling)
Chain 1: Iteration: 1600 / 2000 [ 80%] (Sampling)
Chain 1: Iteration: 1800 / 2000 [ 90%] (Sampling)
Chain 1: Iteration: 2000 / 2000 [100%] (Sampling)
Chain 1:
Chain 1: Elapsed Time: 0.028 seconds (Warm-up)
Chain 1: 0.027 seconds (Sampling)
Chain 1: 0.055 seconds (Total)
Chain 1:
SAMPLING FOR MODEL 'thurstonian_irt_model_newdata' NOW (CHAIN 2).
Chain 2:
Chain 2: Gradient evaluation took 1.8e-05 seconds
Chain 2: 1000 transitions using 10 leapfrog steps per transition would take 0.18 seconds.
Chain 2: Adjust your expectations accordingly!
Chain 2:
Chain 2:
Chain 2: Iteration: 1 / 2000 [ 0%] (Warmup)
Chain 2: Iteration: 200 / 2000 [ 10%] (Warmup)
Chain 2: Iteration: 400 / 2000 [ 20%] (Warmup)
Chain 2: Iteration: 600 / 2000 [ 30%] (Warmup)
Chain 2: Iteration: 800 / 2000 [ 40%] (Warmup)
Chain 2: Iteration: 1000 / 2000 [ 50%] (Warmup)
Chain 2: Iteration: 1001 / 2000 [ 50%] (Sampling)
Chain 2: Iteration: 1200 / 2000 [ 60%] (Sampling)
Chain 2: Iteration: 1400 / 2000 [ 70%] (Sampling)
Chain 2: Iteration: 1600 / 2000 [ 80%] (Sampling)
Chain 2: Iteration: 1800 / 2000 [ 90%] (Sampling)
Chain 2: Iteration: 2000 / 2000 [100%] (Sampling)
Chain 2:
Chain 2: Elapsed Time: 0.028 seconds (Warm-up)
Chain 2: 0.027 seconds (Sampling)
Chain 2: 0.055 seconds (Total)
Chain 2:
SAMPLING FOR MODEL 'thurstonian_irt_model_newdata' NOW (CHAIN 3).
Chain 3:
Chain 3: Gradient evaluation took 6e-06 seconds
Chain 3: 1000 transitions using 10 leapfrog steps per transition would take 0.06 seconds.
Chain 3: Adjust your expectations accordingly!
Chain 3:
Chain 3:
Chain 3: Iteration: 1 / 2000 [ 0%] (Warmup)
Chain 3: Iteration: 200 / 2000 [ 10%] (Warmup)
Chain 3: Iteration: 400 / 2000 [ 20%] (Warmup)
Chain 3: Iteration: 600 / 2000 [ 30%] (Warmup)
Chain 3: Iteration: 800 / 2000 [ 40%] (Warmup)
Chain 3: Iteration: 1000 / 2000 [ 50%] (Warmup)
Chain 3: Iteration: 1001 / 2000 [ 50%] (Sampling)
Chain 3: Iteration: 1200 / 2000 [ 60%] (Sampling)
Chain 3: Iteration: 1400 / 2000 [ 70%] (Sampling)
Chain 3: Iteration: 1600 / 2000 [ 80%] (Sampling)
Chain 3: Iteration: 1800 / 2000 [ 90%] (Sampling)
Chain 3: Iteration: 2000 / 2000 [100%] (Sampling)
Chain 3:
Chain 3: Elapsed Time: 0.028 seconds (Warm-up)
Chain 3: 0.03 seconds (Sampling)
Chain 3: 0.058 seconds (Total)
Chain 3:
SAMPLING FOR MODEL 'thurstonian_irt_model_newdata' NOW (CHAIN 4).
Chain 4:
Chain 4: Gradient evaluation took 6e-06 seconds
Chain 4: 1000 transitions using 10 leapfrog steps per transition would take 0.06 seconds.
Chain 4: Adjust your expectations accordingly!
Chain 4:
Chain 4:
Chain 4: Iteration: 1 / 2000 [ 0%] (Warmup)
Chain 4: Iteration: 200 / 2000 [ 10%] (Warmup)
Chain 4: Iteration: 400 / 2000 [ 20%] (Warmup)
Chain 4: Iteration: 600 / 2000 [ 30%] (Warmup)
Chain 4: Iteration: 800 / 2000 [ 40%] (Warmup)
Chain 4: Iteration: 1000 / 2000 [ 50%] (Warmup)
Chain 4: Iteration: 1001 / 2000 [ 50%] (Sampling)
Chain 4: Iteration: 1200 / 2000 [ 60%] (Sampling)
Chain 4: Iteration: 1400 / 2000 [ 70%] (Sampling)
Chain 4: Iteration: 1600 / 2000 [ 80%] (Sampling)
Chain 4: Iteration: 1800 / 2000 [ 90%] (Sampling)
Chain 4: Iteration: 2000 / 2000 [100%] (Sampling)
Chain 4:
Chain 4: Elapsed Time: 0.027 seconds (Warm-up)
Chain 4: 0.027 seconds (Sampling)
Chain 4: 0.054 seconds (Total)
Chain 4:
score contains lavaan (ULSMV) factor-score estimates for all 200 respondents; score_new contains Bayesian (Stan) posterior-mean estimates for two respondents treated as new data, so small differences between the two are expected.
id estimate.trait1 estimate.trait2 estimate.trait3
1 1 0.2995961 -1.20767032 0.1426395
4 2 -0.9154698 0.85793811 0.6401725
7 3 -0.6305020 1.34407005 0.8769478
10 4 -0.9522713 -0.40026605 0.0620571
13 5 0.9106010 -0.01306284 -0.1038967
16 6 0.5347432 -0.65726252 -1.4962309
id estimate.t1 estimate.t2 estimate.t3
1 1 0.3202487 -1.3164596 0.3569623
4 2 -0.9579917 0.8954891 0.7122130
Brown, A., & Maydeu-Olivares, A. (2011). Item response modeling of forced-choice questionnaires. Educational and Psychological Measurement, 71(3), 460–502. https://doi.org/10.1177/0013164410375112
Bürkner, P.-C., Schulte, N., & Holling, H. (2019). On the statistical and practical limitations of Thurstonian IRT models. Educational and Psychological Measurement, 79(5), 827–854. https://doi.org/10.1177/0013164419832063
---
title: "Thurstonian IRT Example"
author: ""
output:
html_document:
css: styles.css
theme: flatly
highlight: tango
toc: true
toc_float: true
code_folding: show
self_contained: true
vignette: >
%\VignetteIndexEntry{Thurstonian IRT Example}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
```{r options,echo=FALSE,warning=FALSE,message=FALSE}
directory<-if (rstudioapi::isAvailable()) paste0(dirname(rstudioapi::getActiveDocumentContext()$path),"/") else ""
source(paste0(directory, "R/code_options.R"))
source(paste0(directory, "R/code_rwf.R"))
```
## Load
```{r library,message=FALSE,warning=FALSE}
library(thurstonianIRT)
```
The model is the Thurstonian IRT model of Brown and Maydeu-Olivares (2011), fitted with the thurstonianIRT package (Bürkner, Schulte & Holling, 2019).
## The data
Forced-choice rankings must be expressed as binary pairwise outcomes: for each pair {i, k} in a block, y = 1 if item i is preferred to item k and 0 otherwise (Brown & Maydeu-Olivares, 2011).
In the examples below, rank 1 denotes the most preferred item.
The `triplets` data are already in this pairwise format; raw ranks could instead be passed to `make_TIRT_data(..., format = "ranks", direction = "smaller")`, which performs this recoding automatically.
### Example 1
| Rank | Rank | Rank |
|------|------|------|
| A | B | C |
| 1 | 2 | 3 |
| binary | binary | binary |
|--------|--------|--------|
| {A, B} | {A, C} | {B, C} |
| 1 | 1 | 1 |
### Example 2
| Rank | Rank | Rank |
|------|------|------|
| A | B | C |
| 2 | 1 | 3 |
| binary | binary | binary |
|--------|--------|--------|
| {A, B} | {A, C} | {B, C} |
| 0 | 1 | 1 |
## The coded data
```{r load}
data("triplets")
head(triplets)
```
## Define blocks
```{r blocks}
blocks<-set_block(c("i1","i2","i3"),
traits=c("t1","t2","t3"),
signs=c(1,1,1))+
set_block(c("i4","i5","i6"),
traits=c("t1","t2","t3"),
signs=c(-1,1,1))+
set_block(c("i7","i8","i9"),
traits=c("t1","t2","t3"),
signs=c(1,1,-1))+
set_block(c("i10","i11","i12"),
traits=c("t1","t2","t3"),
signs=c(1,-1,1))
data.frame(blocks$blocks)
```
## Triplets
```{r triplets}
data_tirt<-make_TIRT_data(data=triplets,blocks=blocks,direction="larger",format="pairwise",family="bernoulli",range=c(0,1))
data_sem<-make_sem_data(data=data_tirt)
data_stan<-make_stan_data(data=data_tirt)
spesification_lavaan<-make_lavaan_code(data_tirt)
spesification_mplus<-make_mplus_code(data_tirt)
```
## Model Specification
```{r spesification}
# Specification in lavaan
cat(spesification_lavaan)
# Specification in MPLUS
cat(spesification_mplus$TITLE)
cat(spesification_mplus$DATA)
cat(spesification_mplus$VARIABLE)
cat(spesification_mplus$ANALYSIS)
cat(spesification_mplus$MODEL)
cat(spesification_mplus$MODELCONSTRAINT)
cat(spesification_mplus$SAVEDATA)
```
## Model fit
```{r fit, cache=TRUE}
fit_lavaan<-fit_TIRT_lavaan(data_tirt,control=list(maxiter=1000))
# fit_mplus<-fit_TIRT_mplus(data_tirt)
fit_stan<-fit_TIRT_stan(data_tirt)
model<-fit_lavaan$fit
predict(fit_lavaan,newdata=data_tirt)
```
## Plot Model
```{r plot,fig.width=10,fig.height=10}
semPlot::semPaths(model,what="est",rotation=2,reorder=FALSE)
semPlot::semPaths(model,what="std",rotation=2,reorder=FALSE)
semPlot::semPaths(model,what="paths",rotation=2,reorder=FALSE)
```
## Evaluate Model
```{r evaluate}
# Fit indices (ULSMV estimator: robust chi-square-based indices; AIC/BIC are not available)
fit_index<-data.frame(fit=lavaan::fitMeasures(model,c("chisq.scaled","df.scaled","pvalue.scaled","cfi.scaled","tli.scaled","rmsea.scaled","srmr","gfi")))
round(fit_index,2)
# Explained variance
r_squared<-data.frame(r_squared=lavaan::inspect(model,"rsquare"))
r_squared
# Estimates
unstandardized_estimates<-lavaan::inspect(model,"est")
unstandardized_estimates
standardized_estimates<-lavaan::inspect(model,"std")
standardized_estimates
lavaan::parameterEstimates(model,se=TRUE,
zstat=TRUE,
pvalue=TRUE,
ci=TRUE,
level=0.95,
standardized=TRUE,
fmi=FALSE,
remove.system.eq=TRUE,
remove.eq=FALSE,
remove.ineq=FALSE,
remove.def=FALSE,
rsquare=TRUE,
add.attributes=TRUE)
# Modification indices
lavaan::modificationIndices(model,
standardized=TRUE,
cov.std=TRUE,
information="expected",
power=TRUE,
delta=0.1,
alpha=0.05,
high.power=0.75,
sort.=TRUE,
minimum.value=0,
free.remove=FALSE,
na.remove=TRUE,
op=NULL)
```
## Score data
```{r score,message=FALSE}
score<-predict(fit_lavaan)
score<-data.frame(score)
score<-reshape(score, direction="wide", idvar="id", timevar="trait")
triplets_new<-make_TIRT_data(data=triplets[1:2,],blocks=blocks,direction="larger",format="pairwise",family="bernoulli",range=c(0,1))
score_new<-predict(fit_stan,newdata=triplets_new)
score_new<-data.frame(score_new)
score_new<-reshape(score_new[,c("id","trait","estimate")], direction="wide", idvar="id", timevar="trait")
```
## Print Scores
`score` contains lavaan (ULSMV) factor-score estimates for all `r nrow(score)` respondents; `score_new` contains Bayesian (Stan) posterior-mean estimates for two respondents treated as new data, so small differences between the two are expected.
```{r score_new}
head(score)
score_new
```
## References
Brown, A., & Maydeu-Olivares, A. (2011). Item response modeling of forced-choice questionnaires. *Educational and Psychological Measurement, 71*(3), 460–502. https://doi.org/10.1177/0013164410375112
Bürkner, P.-C., Schulte, N., & Holling, H. (2019). On the statistical and practical limitations of Thurstonian IRT models. *Educational and Psychological Measurement, 79*(5), 827–854. https://doi.org/10.1177/0013164419832063