Computes an IRT version of the "reliable change index" (RCI) proposed by Jacobson and Traux (1991) but modified to use IRT information about scores and measurement error. Main benefit of the IRT approach is the inclusion of response pattern information in the pre/post data score estimates, as well as conditional standard error of measurement information.

RCI(mod, predat, postdat, cutoffs = NULL, ...)

Arguments

mod

single-group model fitted by mirt

predat

a vector (if one individual) or matrix/data.frame of response data to be scored, where each individuals' responses are included in exactly one row

postdat

same as predat, but with respect to the post/follow-up measurement

cutoffs

optional vector of length 2 indicating the type of cut-offs to report (e.g., c(-1.96, 1.96) reflects the 95 percent z-score type cut-off)

...

additional arguments passed to fscores

References

Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Environment. Journal of Statistical Software, 48(6), 1-29. doi:10.18637/jss.v048.i06

Jacobson, N. S., & Truax, P. (1991). Clinical significance: A statistical approach to defining meaningful change in psychotherapy research. Journal of Consulting and Clinical Psychology, 59, 12-19.

Author

Phil Chalmers rphilip.chalmers@gmail.com

Examples


# \donttest{

mod <- mirt(Science, 1)

# single response pattern change using EAP information
RCI(mod, predat = c(1,2,3,2), postdat = c(1,2,2,1))
#>   pre.score post.score  diff pooled_SEM    z
#> 1    -0.874     -1.691 0.817      0.793 1.03

# WLE estimator
RCI(mod, predat = c(1,2,3,2), postdat = c(1,2,2,1), method = 'WLE')
#>   pre.score post.score diff pooled_SEM     z
#> 1    -1.236     -2.356 1.12      0.864 1.296

# multiple respondents
RCI(mod, predat = Science[1:5,], postdat = Science[2:6,])
#>   pre.score post.score   diff pooled_SEM      z
#> 1     0.402      0.052  0.350      0.816  0.428
#> 2     0.052     -0.891  0.943      0.776  1.215
#> 3    -0.891     -0.891  0.000      0.767  0.000
#> 4    -0.891      0.765 -1.656      0.838 -1.977
#> 5     0.765      0.670  0.096      0.860  0.111

# include large-sample z-type cutoffs
RCI(mod, predat = Science[1:5,], postdat = Science[2:6,],
    cutoffs = c(-1.96, 1.96))
#>   pre.score post.score   diff pooled_SEM      z cut_decision
#> 1     0.402      0.052  0.350      0.816  0.428    unchanged
#> 2     0.052     -0.891  0.943      0.776  1.215    unchanged
#> 3    -0.891     -0.891  0.000      0.767  0.000    unchanged
#> 4    -0.891      0.765 -1.656      0.838 -1.977    decreased
#> 5     0.765      0.670  0.096      0.860  0.111    unchanged

############################
# Example where individuals take completely different item set pre-post
#   but prior calibration has been performed to equate the items

dat <- key2binary(SAT12,
  key = c(1,4,5,2,3,1,2,1,3,1,2,4,2,1,5,3,4,4,1,4,3,3,4,1,3,5,1,3,1,5,4,5))

mod <- mirt(dat, 1)

# with N=5 individuals under investigation
predat <- postdat <- dat[1:5,]
predat[, 17:32] <- NA
postdat[, 1:16] <- NA

head(predat)
#>      Item.1 Item.2 Item.3 Item.4 Item.5 Item.6 Item.7 Item.8 Item.9 Item.10
#> [1,]      1      1      1      1      1      1      1      1      1       1
#> [2,]      0      1      0      0      1      0      1      0      1       1
#> [3,]      1      1      1      0      1      0      1      0      1       0
#> [4,]      0      1      0      1      1      0      1      0      1       0
#> [5,]      0      1      1      1      1      0      1      1      0       0
#>      Item.11 Item.12 Item.13 Item.14 Item.15 Item.16 Item.17 Item.18 Item.19
#> [1,]       1       1       1       1       1       1      NA      NA      NA
#> [2,]       1       0       1       1       1       0      NA      NA      NA
#> [3,]       1       0       0       1       1       0      NA      NA      NA
#> [4,]       1       1       1       1       1       0      NA      NA      NA
#> [5,]       1       1       1       1       1       0      NA      NA      NA
#>      Item.20 Item.21 Item.22 Item.23 Item.24 Item.25 Item.26 Item.27 Item.28
#> [1,]      NA      NA      NA      NA      NA      NA      NA      NA      NA
#> [2,]      NA      NA      NA      NA      NA      NA      NA      NA      NA
#> [3,]      NA      NA      NA      NA      NA      NA      NA      NA      NA
#> [4,]      NA      NA      NA      NA      NA      NA      NA      NA      NA
#> [5,]      NA      NA      NA      NA      NA      NA      NA      NA      NA
#>      Item.29 Item.30 Item.31 Item.32
#> [1,]      NA      NA      NA      NA
#> [2,]      NA      NA      NA      NA
#> [3,]      NA      NA      NA      NA
#> [4,]      NA      NA      NA      NA
#> [5,]      NA      NA      NA      NA
head(postdat)
#>      Item.1 Item.2 Item.3 Item.4 Item.5 Item.6 Item.7 Item.8 Item.9 Item.10
#> [1,]     NA     NA     NA     NA     NA     NA     NA     NA     NA      NA
#> [2,]     NA     NA     NA     NA     NA     NA     NA     NA     NA      NA
#> [3,]     NA     NA     NA     NA     NA     NA     NA     NA     NA      NA
#> [4,]     NA     NA     NA     NA     NA     NA     NA     NA     NA      NA
#> [5,]     NA     NA     NA     NA     NA     NA     NA     NA     NA      NA
#>      Item.11 Item.12 Item.13 Item.14 Item.15 Item.16 Item.17 Item.18 Item.19
#> [1,]      NA      NA      NA      NA      NA      NA       1       1       1
#> [2,]      NA      NA      NA      NA      NA      NA       1       0       1
#> [3,]      NA      NA      NA      NA      NA      NA       1       0       0
#> [4,]      NA      NA      NA      NA      NA      NA       1       0       0
#> [5,]      NA      NA      NA      NA      NA      NA       1       0       1
#>      Item.20 Item.21 Item.22 Item.23 Item.24 Item.25 Item.26 Item.27 Item.28
#> [1,]       1       1       1       1       1       1       1       1       1
#> [2,]       1       1       1       0       1       0       0       1       0
#> [3,]       1       1       1       0       1       1       0       1       1
#> [4,]       1       1       0       0       0       0       0       1       1
#> [5,]       1       1       1       0       1       0       1       1       1
#>      Item.29 Item.30 Item.31 Item.32
#> [1,]       1       1       1       1
#> [2,]       0       0       1       0
#> [3,]       0       0       1       0
#> [4,]       0       0       1       0
#> [5,]       1       0       1       0

RCI(mod, predat, postdat)
#>   pre.score post.score  diff pooled_SEM     z
#> 1     2.206      1.808 0.398      0.951 0.419
#> 2     0.373     -0.344 0.717      0.720 0.995
#> 3     0.303     -0.115 0.419      0.728 0.575
#> 4     0.295     -0.864 1.159      0.699 1.658
#> 5     0.670      0.513 0.157      0.772 0.203

# }