The goal of irtQ
is to fit unidimensional item response
theory (IRT) models to mixture of dichotomous and polytomous data,
calibrate online item parameters (i.e., pretest and operational items),
estimate examinees abilities, and examine the IRT model-data fit on
item-level in different ways as well as provide useful functions related
to IRT analyses.
For the item parameter estimation, the marginal maximum likelihood estimation with expectation-maximization (MMLE-EM) algorithm (Bock & Aitkin, 1981) is used. For the online calibration, the fixed item parameter calibration (FIPC) method (e.g., Kim, 2006) and the fixed ability parameter calibration (FAPC) method (Ban, Hanson, Wang, Yi, & Harris, 2001; stocking, 1988), often called Stocking’s Method A, are provided. For the ability estimation, several popular scoring methods (e.g., MLE, EAP, and MAP) are implemented. In terms of assessing the IRT model-data fit, one of distinguished features of this package is that it gives not only item fit statistics (e.g., chi-square fit statistic (X2; e.g., Bock, 1960; Yen, 1981), likelihood ratio chi-square fit statistic (G2; McKinley & Mills, 1985), infit and outfit statistics (Ames et al., 2015), and S-X2 (Orlando & Thissen, 2000, 2003)) but also graphical displays to look at residuals between the observed data and model-based predictions (Hambleton, Swaminathan, & Rogers, 1991).
In addition, there are many useful functions such as analyzing differential item functioning (DIF), computing asymptotic variance-covariance matrices of item parameter estimates, importing item and/or ability parameters from popular IRT software, running flexMIRT (Cai, 2017) through R, generating simulated data, computing the conditional distribution of observed scores using the Lord-Wingersky recursion formula, computing item and test information functions, computing item and test characteristic curve functions, and plotting item and test characteristic curves and item and test information functions.
You can install the released version of irtQ from CRAN with:
install.packages("irtQ")
The fixed item parameter calibration (FIPC) is one of useful online
item calibration methods for computerized adaptive testing (CAT) to put
the parameter estimates of pretest items on the same scale of
operational item parameter estimates without post hoc linking/scaling
(Ban, Hanson, Wang, Yi, & Harris, 2001; Chen & Wang, 2016). In
FIPC, the operational item parameters are fixed to estimate the
characteristic of the underlying latent variable prior distribution when
calibrating the pretest items. More specifically, the underlying latent
variable prior distribution of the operational items is estimated during
the calibration of the pretest items to put the item parameters of the
pretest items on the scale of the operational item parameters (Kim,
2006). In irtQ
package, FIPC is implemented with two main
steps:
est_irt()
function.To run the est_irt()
function, it requires two data
sets:
x
in the function
est_irt
).When FIPC is implemented in est_irt()
function, the
pretest item parameters are estimated by fixing the operational item
parameters. To estimate the item parameters, you need to provide the
item metadata in the argument x
and the response data in
the argument data
.
It is worthwhile to explain about how to prepare the item metadata
set in the argument x
. A specific form of a data frame
should be used for the argument x
. The first column should
have item IDs, the second column should contain the number of score
categories of the items, and the third column should include IRT models.
The available IRT models are “1PLM”, “2PLM”, “3PLM”, and “DRM” for
dichotomous items, and “GRM” and “GPCM” for polytomous items. Note that
“DRM” covers all dichotomous IRT models (i.e, “1PLM”, “2PLM”, and
“3PLM”) and “GRM” and “GPCM” represent the graded response model and
(generalized) partial credit model, respectively. From the fourth
column, item parameters should be included. For dichotomous items, the
fourth, fifth, and sixth columns represent the item discrimination (or
slope), item difficulty, and item guessing parameters, respectively.
When “1PLM” or “2PLM” is specified for any items in the third column,
NAs should be inserted for the item guessing parameters. For polytomous
items, the item discrimination (or slope) parameters should be contained
in the fourth column and the item threshold (or step) parameters should
be included from the fifth to the last columns. When the number of
categories differs between items, the empty cells of item parameters
should be filled with NAs. See est_irt
for more details
about the item metadata.
Also, you should specify in the argument fipc = TRUE
and
a specific FIPC method in the argument fipc.method
.
Finally, you should provide a vector of the location of the items to be
fixed in the argument fix.loc
. For more details about
implementing FIPC, see the description of the est_irt()
function.
When implementing FIPC, you can estimate both the emprical histogram
and the scale of latent variable prior distribution by setting
EmpHist = TRUE
. If EmpHist = FALSE
, the normal
prior distribution is used during the item parameter estimation and the
scale of the normal prior distribution is updated during the EM
cycle.
If necessary, you need to specify whether prior distributions of item
slope and guessing parameters (only for the IRT 3PL model) are used in
the arguments of use.aprior
and use.gprior
,
respectively. If you decide to use the prior distributions, you should
specify what distributions will be used for the prior distributions in
the arguments of aprior
and gprior
,
respectively. Currently three probability distributions of Beta,
Log-normal, and Normal distributions are available.
In addition, if the response data include missing values, you must
indicate the missing value in argument missing
.
Once the est_irt()
function has been implemented, you’ll
get a list of several internal objects such as the item parameter
estimates, standard error of the parameter estimates.
In CAT, the fixed ability parameter calibration (FAPC), often called
Stocking’s Method A, is the relatively simplest and most straightforward
online calibration method, which is the maximum likelihood estimation of
the item parameters given the proficiency estimates. In CAT, FAPC can be
used to put the parameter estimates of pretest items on the same scale
of operational item parameter estimates and recalibrate the operational
items to evaluate the parameter drifts of the operational items (Chen
& Wang, 2016; Stocking, 1988). Also, FAPC is known to result in
accurate, unbiased item parameters calibration when items are randomly
rather than adaptively administered to examinees, which occurs most
commonly with pretest items (Ban et al., 2001; Chen & Wang, 2016).
Using irtQ
package, the FAPC is implemented to calibrate
the items with two main steps:
est_item()
function.To run the est_item()
function, it requires two data
sets:
The est_item()
function estimates the pretest item
parameters given the proficiency estimates. To estimate the item
parameters, you need to provide the response data in the argument
data
and the ability estimates in the argument
score
.
Also, you should provide a string vector of the IRT models in the
argument model
to indicate what IRT model is used to
calibrate each item. Available IRT models are “1PLM”, “2PLM”, “3PLM”,
and “DRM” for dichotomous items, and “GRM” and “GPCM” for polytomous
items. “GRM” and “GPCM” represent the graded response model and
(generalized) partial credit model, respectively. Note that “DRM” is
considered as “3PLM” in this function. If a single character of the IRT
model is specified, that model will be recycled across all items.
The est_item()
function requires a vector of the number
of score categories for the items in the argument cats
. For
example, a dichotomous item has two score categories. If a single
numeric value is specified, that value will be recycled across all
items. If NULL and all items are binary items (i.e., dichotomous items),
it assumes that all items have two score categories.
If necessary, you need to specify whether prior distributions of item
slope and guessing parameters (only for the IRT 3PL model) are used in
the arguments of use.aprior
and use.gprior
,
respectively. If you decide to use the prior distributions, you should
specify what distributions will be used for the prior distributions in
the arguments of aprior
and gprior
,
respectively. Currently three probability distributions of Beta,
Log-normal, and Normal distributions are available.
In addition, if the response data include missing values, you must
indicate the missing value in argument missing
.
Once the est_item
function has been implemented, you’ll
get a list of several internal objects such as the item parameter
estimates, standard error of the parameter estimates.
One way to assess goodness of IRT model-data fit is through an item
fit analysis by examining the traditional item fit statistics and
looking at the discrepancy between the observed data and model-based
predictions. Using irtQ
package, the traditional approach
of evaluating the IRT model-data fit on item-level can be implemented
with three main steps:
irtfit()
function.irtfit
) obtained in step 2, draw the IRT residual
plots (i.e., raw residual and standardized residual plots) using
plot
method.Before conducting the IRT model fit analysis, it is necessary to
prepare a data set. To run the irtfit()
function, it
requires three data sets:
shape_df()
function or by creating a data frame of the item
metadata by yourself. If you have output files of item parameter
estimates obtained from one of the IRT software such as BILOG-MG 3,
PARSCALE 4, flexMIRT, and mirt (R package), the item metadata can be
easily obtained using the functions of bring.bilog()
,
bring.parscale()
, bring.flexmirt()
,
bring.mirt()
. See the functions of irtfit()
,
test.info()
, or simdat()
for more details
about the item metadata format.The irtfit()
function computes the traditional IRT item
fit statistics such as X2, G2, infit, and outfit statistics. To
calculate the X2 and G2 statistics, two methods are available to divide
the ability scale into several groups. The two methods are “equal.width”
for dividing the scale by an equal length of the interval and
“equal.freq” for dividing the scale by an equal frequency of examinees.
Also, you need to specify the location of ability point at each group
(or interval) where the expected probabilities of score categories are
calculated from the IRT models. Available locations are “average” for
computing the expected probability at the average point of examinees’
ability estimates in each group and “middle” for computing the expected
probability at the midpoint of each group.
To use the irtfit()
function, you need to insert the
item metadata in the argument x
, the ability estimates in
the argument score
, and the response data in the argument
data
. If you want to divide the ability scale into other
than ten groups, you need to specify the number of groups in the
argument n.width
. In addition, if the response data include
missing values, you must indicate the missing value in argument
missing
.
Once the irtfit()
function has been implemented, you’ll
get the fit statistic results and the contingency tables for every item
used to calculate the X2 and G2 fit statistics.
Using the saved object of class irtfit
, you can use the
plot
method to evaluate the IRT raw residual and
standardized residual plots.
Because the plot
method can draw the residual plots for
an item at a time, you have to indicate which item will be examined. For
this, you can specify an integer value, which is the location of the
studied item, in the argument item.loc
.
In terms of the raw residual plot, the argument
ci.method
is used to select a method to estimate the
confidence intervals among four methods. Those methods are “wald” for
the Wald interval, which is based on the normal approximation (Laplace,
1812), “cp” for Clopper-Pearson interval (Clopper & Pearson, 1934),
“wilson” for Wilson score interval (Wilson, 1927), and “wilson.cr” for
Wilson score interval with continuity correction (Newcombe, 1998).
library("irtQ")
## ----------------------------------------------------------------------------
# 1. The example code below shows how to prepare the data sets and how to
# implement the fixed item parameter calibration (FIPC):
## ----------------------------------------------------------------------------
## Step 1: prepare a data set
## In this example, we generated examinees' true proficiency parameters and simulated
## the item response data using the function "simdat".
## import the "-prm.txt" output file from flexMIRT
<- system.file("extdata", "flexmirt_sample-prm.txt", package = "irtQ")
flex_sam
# select the item metadata
<- bring.flexmirt(file = flex_sam, "par")$Group1$full_df
x
# generate 1,000 examinees' latent abilities from N(0.4, 1.3)
set.seed(20)
<- rnorm(1000, mean = 0.4, sd = 1.3)
score
# simulate the response data
<- simdat(x = x, theta = score, D = 1)
sim.dat
## Step 2: Estimate the item parameters
# fit the 3PL model to all dichotmous items, fit the GRM model to all polytomous data,
# fix the five 3PL items (1st - 5th items) and three GRM items (53th to 55th items)
# also, estimate the empirical histogram of latent variable
<- c(1:5, 53:55)
fix.loc <- est_irt(
(mod.fix1 x = x, data = sim.dat, D = 1, use.gprior = TRUE, gprior = list(dist = "beta", params = c(5, 16)),
EmpHist = TRUE, Etol = 1e-3, fipc = TRUE, fipc.method = "MEM", fix.loc = fix.loc, verbose = FALSE
))#>
#> Call:
#> est_irt(x = x, data = sim.dat, D = 1, use.gprior = TRUE, gprior = list(dist = "beta",
#> params = c(5, 16)), EmpHist = TRUE, Etol = 0.001, fipc = TRUE,
#> fipc.method = "MEM", fix.loc = fix.loc, verbose = FALSE)
#>
#> Item parameter estimation using MMLE-EM.
#> 36 E-step cycles were completed using 49 quadrature points.
#> First-order test: Convergence criteria are satisfied.
#> Second-order test: Solution is a possible local maximum.
#> Computation of variance-covariance matrix:
#> Variance-covariance matrix of item parameter estimates is obtainable.
#>
#> Log-likelihood: -31049.92
summary(mod.fix1)
#>
#> Call:
#> est_irt(x = x, data = sim.dat, D = 1, use.gprior = TRUE, gprior = list(dist = "beta",
#> params = c(5, 16)), EmpHist = TRUE, Etol = 0.001, fipc = TRUE,
#> fipc.method = "MEM", fix.loc = fix.loc, verbose = FALSE)
#>
#> Summary of the Data
#> Number of Items: 55
#> Number of Cases: 1000
#>
#> Summary of Estimation Process
#> Maximum number of EM cycles: 500
#> Convergence criterion of E-step: 0.001
#> Number of rectangular quadrature points: 49
#> Minimum & Maximum quadrature points: -6, 6
#> Number of free parameters: 147
#> Number of fixed items: 8
#> Number of E-step cycles completed: 36
#> Maximum parameter change: 0.0009203814
#>
#> Processing time (in seconds)
#> EM algorithm: 2.22
#> Standard error computation: 1.61
#> Total computation: 4.07
#>
#> Convergence and Stability of Solution
#> First-order test: Convergence criteria are satisfied.
#> Second-order test: Solution is a possible local maximum.
#> Computation of variance-covariance matrix:
#> Variance-covariance matrix of item parameter estimates is obtainable.
#>
#> Summary of Estimation Results
#> -2loglikelihood: 62099.84
#> Akaike Information Criterion (AIC): 62393.84
#> Bayesian Information Criterion (BIC): 63115.28
#> Item Parameters:
#> id cats model par.1 se.1 par.2 se.2 par.3 se.3 par.4 se.4
#> 1 CMC1 2 3PLM 0.76 NA 1.46 NA 0.26 NA NA NA
#> 2 CMC2 2 3PLM 1.92 NA -1.05 NA 0.18 NA NA NA
#> 3 CMC3 2 3PLM 0.93 NA 0.39 NA 0.10 NA NA NA
#> 4 CMC4 2 3PLM 1.05 NA -0.41 NA 0.20 NA NA NA
#> 5 CMC5 2 3PLM 0.87 NA -0.12 NA 0.16 NA NA NA
#> 6 CMC6 2 3PLM 1.47 0.15 0.61 0.09 0.07 0.03 NA NA
#> 7 CMC7 2 3PLM 1.45 0.25 1.23 0.14 0.24 0.04 NA NA
#> 8 CMC8 2 3PLM 0.80 0.11 0.82 0.21 0.12 0.05 NA NA
#> 9 CMC9 2 3PLM 0.81 0.13 0.63 0.28 0.20 0.07 NA NA
#> 10 CMC10 2 3PLM 1.55 0.21 0.16 0.14 0.18 0.05 NA NA
#> 11 CMC11 2 3PLM 0.99 0.17 -0.01 0.33 0.32 0.08 NA NA
#> 12 CMC12 2 3PLM 0.86 0.13 1.30 0.18 0.11 0.04 NA NA
#> 13 CMC13 2 3PLM 1.48 0.26 1.61 0.12 0.18 0.03 NA NA
#> 14 CMC14 2 3PLM 1.53 0.21 0.25 0.16 0.27 0.05 NA NA
#> 15 CMC15 2 3PLM 1.53 0.18 -0.11 0.13 0.14 0.05 NA NA
#> 16 CMC16 2 3PLM 2.16 0.22 0.02 0.07 0.08 0.03 NA NA
#> 17 CMC17 2 3PLM 1.39 0.19 0.03 0.17 0.20 0.06 NA NA
#> 18 CMC18 2 3PLM 1.36 0.27 1.34 0.16 0.27 0.04 NA NA
#> 19 CMC19 2 3PLM 2.48 0.37 -0.94 0.12 0.19 0.06 NA NA
#> 20 CMC20 2 3PLM 1.80 0.37 -1.21 0.26 0.40 0.10 NA NA
#> 21 CMC21 2 3PLM 1.76 0.22 -0.98 0.17 0.21 0.07 NA NA
#> 22 CMC22 2 3PLM 0.94 0.13 -0.51 0.27 0.19 0.08 NA NA
#> 23 CMC23 2 3PLM 0.83 0.10 -0.37 0.23 0.13 0.06 NA NA
#> 24 CMC24 2 3PLM 0.98 0.21 1.86 0.20 0.22 0.04 NA NA
#> 25 CMC25 2 3PLM 0.63 0.09 -2.01 0.47 0.21 0.09 NA NA
#> 26 CMC26 2 3PLM 1.13 0.14 -1.68 0.28 0.22 0.09 NA NA
#> 27 CMC27 2 3PLM 1.19 0.14 0.01 0.16 0.14 0.05 NA NA
#> 28 CMC28 2 3PLM 2.23 0.26 -0.13 0.09 0.15 0.04 NA NA
#> 29 CMC29 2 3PLM 1.31 0.16 -1.32 0.22 0.19 0.08 NA NA
#> 30 CMC30 2 3PLM 1.63 0.30 1.03 0.15 0.37 0.04 NA NA
#> 31 CMC31 2 3PLM 1.03 0.15 0.93 0.17 0.15 0.05 NA NA
#> 32 CMC32 2 3PLM 1.55 0.21 -0.75 0.20 0.26 0.08 NA NA
#> 33 CMC33 2 3PLM 1.24 0.19 -1.09 0.30 0.31 0.10 NA NA
#> 34 CMC34 2 3PLM 1.34 0.16 0.31 0.15 0.17 0.05 NA NA
#> 35 CMC35 2 3PLM 1.24 0.15 -0.36 0.20 0.19 0.07 NA NA
#> 36 CMC36 2 3PLM 1.06 0.17 1.05 0.17 0.15 0.05 NA NA
#> 37 CMC37 2 3PLM 2.11 0.26 -0.29 0.11 0.16 0.05 NA NA
#> 38 CMC38 2 3PLM 0.57 0.11 -0.30 0.55 0.26 0.10 NA NA
#> 39 CFR1 5 GRM 2.09 0.13 -1.81 0.10 -1.14 0.07 -0.68 0.06
#> 40 CFR2 5 GRM 1.38 0.08 -0.70 0.08 -0.08 0.07 0.48 0.06
#> 41 AMC1 2 3PLM 1.25 0.18 0.62 0.16 0.18 0.05 NA NA
#> 42 AMC2 2 3PLM 1.79 0.22 -1.61 0.18 0.17 0.07 NA NA
#> 43 AMC3 2 3PLM 1.37 0.17 0.64 0.12 0.12 0.04 NA NA
#> 44 AMC4 2 3PLM 0.94 0.11 -0.22 0.23 0.16 0.06 NA NA
#> 45 AMC5 2 3PLM 1.11 0.33 2.83 0.26 0.21 0.03 NA NA
#> 46 AMC6 2 3PLM 2.22 0.37 1.70 0.09 0.19 0.02 NA NA
#> 47 AMC7 2 3PLM 1.16 0.13 0.02 0.14 0.10 0.04 NA NA
#> 48 AMC8 2 3PLM 1.31 0.16 0.33 0.15 0.18 0.05 NA NA
#> 49 AMC9 2 3PLM 1.22 0.13 0.30 0.12 0.09 0.04 NA NA
#> 50 AMC10 2 3PLM 1.83 0.28 1.48 0.09 0.15 0.03 NA NA
#> 51 AMC11 2 3PLM 1.68 0.22 -1.08 0.17 0.19 0.07 NA NA
#> 52 AMC12 2 3PLM 0.91 0.13 -0.82 0.35 0.26 0.09 NA NA
#> 53 AFR1 5 GRM 1.14 NA -0.37 NA 0.22 NA 0.85 NA
#> 54 AFR2 5 GRM 1.23 NA -2.08 NA -1.35 NA -0.71 NA
#> 55 AFR3 5 GRM 0.88 NA -0.76 NA -0.01 NA 0.67 NA
#> par.5 se.5
#> 1 NA NA
#> 2 NA NA
#> 3 NA NA
#> 4 NA NA
#> 5 NA NA
#> 6 NA NA
#> 7 NA NA
#> 8 NA NA
#> 9 NA NA
#> 10 NA NA
#> 11 NA NA
#> 12 NA NA
#> 13 NA NA
#> 14 NA NA
#> 15 NA NA
#> 16 NA NA
#> 17 NA NA
#> 18 NA NA
#> 19 NA NA
#> 20 NA NA
#> 21 NA NA
#> 22 NA NA
#> 23 NA NA
#> 24 NA NA
#> 25 NA NA
#> 26 NA NA
#> 27 NA NA
#> 28 NA NA
#> 29 NA NA
#> 30 NA NA
#> 31 NA NA
#> 32 NA NA
#> 33 NA NA
#> 34 NA NA
#> 35 NA NA
#> 36 NA NA
#> 37 NA NA
#> 38 NA NA
#> 39 -0.24 0.05
#> 40 1.05 0.07
#> 41 NA NA
#> 42 NA NA
#> 43 NA NA
#> 44 NA NA
#> 45 NA NA
#> 46 NA NA
#> 47 NA NA
#> 48 NA NA
#> 49 NA NA
#> 50 NA NA
#> 51 NA NA
#> 52 NA NA
#> 53 1.38 NA
#> 54 -0.12 NA
#> 55 1.25 NA
#> Group Parameters:
#> mu sigma2 sigma
#> estimates 0.40 1.88 1.37
#> se 0.04 0.08 0.03
# plot the estimated empirical histogram of latent variable prior distribution
<- getirt(mod.fix1, what = "weights"))
(emphist #> theta weight
#> 1 -6.00 2.301252e-10
#> 2 -5.75 1.434595e-09
#> 3 -5.50 8.649282e-09
#> 4 -5.25 5.019868e-08
#> 5 -5.00 2.782912e-07
#> 6 -4.75 1.456751e-06
#> 7 -4.50 7.085630e-06
#> 8 -4.25 3.134808e-05
#> 9 -4.00 1.227012e-04
#> 10 -3.75 4.100603e-04
#> 11 -3.50 1.119742e-03
#> 12 -3.25 2.386354e-03
#> 13 -3.00 3.889322e-03
#> 14 -2.75 5.167720e-03
#> 15 -2.50 6.767224e-03
#> 16 -2.25 1.053445e-02
#> 17 -2.00 1.742567e-02
#> 18 -1.75 2.236173e-02
#> 19 -1.50 2.498735e-02
#> 20 -1.25 3.374293e-02
#> 21 -1.00 4.224442e-02
#> 22 -0.75 4.948939e-02
#> 23 -0.50 7.710828e-02
#> 24 -0.25 8.024288e-02
#> 25 0.00 4.752956e-02
#> 26 0.25 5.636581e-02
#> 27 0.50 8.674316e-02
#> 28 0.75 6.936382e-02
#> 29 1.00 6.035964e-02
#> 30 1.25 6.234864e-02
#> 31 1.50 5.768393e-02
#> 32 1.75 4.254007e-02
#> 33 2.00 3.148380e-02
#> 34 2.25 3.111071e-02
#> 35 2.50 2.935626e-02
#> 36 2.75 1.950494e-02
#> 37 3.00 1.019680e-02
#> 38 3.25 5.154557e-03
#> 39 3.50 2.816466e-03
#> 40 3.75 1.753617e-03
#> 41 4.00 1.282170e-03
#> 42 4.25 1.097172e-03
#> 43 4.50 1.050444e-03
#> 44 4.75 1.046478e-03
#> 45 5.00 1.004637e-03
#> 46 5.25 8.721994e-04
#> 47 5.50 6.557355e-04
#> 48 5.75 4.168380e-04
#> 49 6.00 2.220842e-04
plot(emphist$weight ~ emphist$theta,
xlab = "Theta",
ylab = "Density", type = "h"
)
## ----------------------------------------------------------------------------
# 2. The example code below shows how to prepare the data sets and how to estimate
# the item parameters using the FAPC:
## ----------------------------------------------------------------------------
## Step 1: prepare a data set
## In this example, we generated examinees' true proficiency parameters and simulated
## the item response data using the function "simdat". Because the true
## proficiency parameters are not known in reality, the true proficiencies
## would be replaced with the proficiency estimates for the calibration.
# import the "-prm.txt" output file from flexMIRT
<- system.file("extdata", "flexmirt_sample-prm.txt", package = "irtQ")
flex_sam
# select the item metadata
<- bring.flexmirt(file = flex_sam, "par")$Group1$full_df
x
# modify the item metadata so that some items follow 1PLM, 2PLM and GPCM
c(1:3, 5), 3] <- "1PLM"
x[c(1:3, 5), 4] <- 1
x[c(1:3, 5), 6] <- 0
x[c(4, 8:12), 3] <- "2PLM"
x[c(4, 8:12), 6] <- 0
x[54:55, 3] <- "GPCM"
x[
# generate examinees' abilities from N(0, 1)
set.seed(23)
<- rnorm(500, mean = 0, sd = 1)
score
# simulate the response data
<- simdat(x = x, theta = score, D = 1)
data
## Step 2: Estimate the item parameters
# 1) item parameter estimation: constrain the slope parameters of the 1PLM to be equal
<- est_item(x, data, score,
(mod1 D = 1, fix.a.1pl = FALSE, use.gprior = TRUE,
gprior = list(dist = "beta", params = c(5, 17)), use.startval = FALSE
))#> Starting...
#> Parsing input...
#> Estimating item parameters...
#> Estimation is finished.
#>
#> Call:
#> est_item(x = x, data = data, score = score, D = 1, fix.a.1pl = FALSE,
#> use.gprior = TRUE, gprior = list(dist = "beta", params = c(5,
#> 17)), use.startval = FALSE)
#>
#> Fixed ability parameter calibration (Stocking's Method A).
#> All item parameters were successfully converged.
#>
#> Log-likelihood: -15830.66
summary(mod1)
#>
#> Call:
#> est_item(x = x, data = data, score = score, D = 1, fix.a.1pl = FALSE,
#> use.gprior = TRUE, gprior = list(dist = "beta", params = c(5,
#> 17)), use.startval = FALSE)
#>
#> Summary of the Data
#> Number of Items in Response Data: 55
#> Number of Excluded Items: 0
#> Number of free parameters: 162
#> Number of Responses for Each Item:
#> id n
#> 1 CMC1 500
#> 2 CMC2 500
#> 3 CMC3 500
#> 4 CMC4 500
#> 5 CMC5 500
#> 6 CMC6 500
#> 7 CMC7 500
#> 8 CMC8 500
#> 9 CMC9 500
#> 10 CMC10 500
#> 11 CMC11 500
#> 12 CMC12 500
#> 13 CMC13 500
#> 14 CMC14 500
#> 15 CMC15 500
#> 16 CMC16 500
#> 17 CMC17 500
#> 18 CMC18 500
#> 19 CMC19 500
#> 20 CMC20 500
#> 21 CMC21 500
#> 22 CMC22 500
#> 23 CMC23 500
#> 24 CMC24 500
#> 25 CMC25 500
#> 26 CMC26 500
#> 27 CMC27 500
#> 28 CMC28 500
#> 29 CMC29 500
#> 30 CMC30 500
#> 31 CMC31 500
#> 32 CMC32 500
#> 33 CMC33 500
#> 34 CMC34 500
#> 35 CMC35 500
#> 36 CMC36 500
#> 37 CMC37 500
#> 38 CMC38 500
#> 39 CFR1 500
#> 40 CFR2 500
#> 41 AMC1 500
#> 42 AMC2 500
#> 43 AMC3 500
#> 44 AMC4 500
#> 45 AMC5 500
#> 46 AMC6 500
#> 47 AMC7 500
#> 48 AMC8 500
#> 49 AMC9 500
#> 50 AMC10 500
#> 51 AMC11 500
#> 52 AMC12 500
#> 53 AFR1 500
#> 54 AFR2 500
#> 55 AFR3 500
#>
#> Processing time (in seconds)
#> Total computation: 0.82
#>
#> Convergence of Solution
#> All item parameters were successfully converged.
#>
#> Summary of Estimation Results
#> -2loglikelihood: 31661.31
#> Item Parameters:
#> id cats model par.1 se.1 par.2 se.2 par.3 se.3 par.4 se.4
#> 1 CMC1 2 1PLM 1.02 0.06 1.60 0.13 NA NA NA NA
#> 2 CMC2 2 1PLM 1.02 NA -1.06 0.12 NA NA NA NA
#> 3 CMC3 2 1PLM 1.02 NA 0.40 0.10 NA NA NA NA
#> 4 CMC4 2 2PLM 1.02 NA -0.25 0.10 NA NA NA NA
#> 5 CMC5 2 1PLM 0.96 0.12 -0.43 0.11 NA NA NA NA
#> 6 CMC6 2 3PLM 1.88 0.27 0.67 0.09 0.10 0.03 NA NA
#> 7 CMC7 2 3PLM 0.88 0.17 1.03 0.23 0.13 0.05 NA NA
#> 8 CMC8 2 2PLM 0.92 0.12 0.87 0.13 NA NA NA NA
#> 9 CMC9 2 2PLM 1.00 0.12 0.89 0.13 NA NA NA NA
#> 10 CMC10 2 2PLM 1.61 0.15 0.09 0.07 NA NA NA NA
#> 11 CMC11 2 2PLM 1.07 0.12 -0.37 0.10 NA NA NA NA
#> 12 CMC12 2 2PLM 0.94 0.12 1.10 0.15 NA NA NA NA
#> 13 CMC13 2 3PLM 1.35 0.34 1.31 0.17 0.17 0.04 NA NA
#> 14 CMC14 2 3PLM 1.36 0.31 0.15 0.24 0.24 0.08 NA NA
#> 15 CMC15 2 3PLM 1.53 0.27 0.01 0.17 0.20 0.07 NA NA
#> 16 CMC16 2 3PLM 2.10 0.25 0.04 0.08 0.10 0.04 NA NA
#> 17 CMC17 2 3PLM 1.02 0.15 -0.41 0.22 0.16 0.07 NA NA
#> 18 CMC18 2 3PLM 1.27 0.38 1.42 0.20 0.22 0.05 NA NA
#> 19 CMC19 2 3PLM 2.25 0.32 -1.11 0.14 0.17 0.07 NA NA
#> 20 CMC20 2 3PLM 1.47 0.22 -1.74 0.22 0.18 0.08 NA NA
#> 21 CMC21 2 3PLM 1.38 0.21 -1.25 0.23 0.20 0.08 NA NA
#> 22 CMC22 2 3PLM 0.92 0.16 -0.55 0.28 0.19 0.08 NA NA
#> 23 CMC23 2 3PLM 1.10 0.22 -0.12 0.27 0.22 0.09 NA NA
#> 24 CMC24 2 3PLM 1.21 0.34 1.43 0.21 0.22 0.05 NA NA
#> 25 CMC25 2 3PLM 0.83 0.16 -1.51 0.40 0.21 0.09 NA NA
#> 26 CMC26 2 3PLM 1.07 0.18 -2.16 0.35 0.19 0.08 NA NA
#> 27 CMC27 2 3PLM 1.18 0.18 0.09 0.17 0.14 0.06 NA NA
#> 28 CMC28 2 3PLM 2.19 0.31 -0.17 0.11 0.19 0.05 NA NA
#> 29 CMC29 2 3PLM 2.48 0.54 -0.81 0.20 0.38 0.09 NA NA
#> 30 CMC30 2 3PLM 1.88 0.45 0.69 0.15 0.34 0.05 NA NA
#> 31 CMC31 2 3PLM 0.70 0.16 1.00 0.32 0.16 0.07 NA NA
#> 32 CMC32 2 3PLM 1.73 0.30 -0.78 0.21 0.26 0.09 NA NA
#> 33 CMC33 2 3PLM 1.07 0.17 -1.45 0.28 0.19 0.08 NA NA
#> 34 CMC34 2 3PLM 1.04 0.17 0.21 0.20 0.16 0.06 NA NA
#> 35 CMC35 2 3PLM 1.36 0.19 -0.45 0.17 0.16 0.06 NA NA
#> 36 CMC36 2 3PLM 0.88 0.17 0.97 0.23 0.14 0.05 NA NA
#> 37 CMC37 2 3PLM 2.13 0.26 -0.25 0.09 0.13 0.05 NA NA
#> 38 CMC38 2 3PLM 0.87 0.17 -0.31 0.32 0.20 0.09 NA NA
#> 39 CFR1 5 GRM 2.00 0.14 -1.88 0.12 -1.25 0.08 -0.70 0.06
#> 40 CFR2 5 GRM 1.39 0.11 -0.80 0.09 -0.13 0.07 0.60 0.08
#> 41 AMC1 2 3PLM 1.81 0.39 0.74 0.14 0.28 0.05 NA NA
#> 42 AMC2 2 3PLM 1.70 0.25 -1.59 0.20 0.19 0.08 NA NA
#> 43 AMC3 2 3PLM 1.30 0.25 0.68 0.16 0.16 0.05 NA NA
#> 44 AMC4 2 3PLM 0.94 0.17 -0.18 0.26 0.18 0.07 NA NA
#> 45 AMC5 2 3PLM 1.69 0.65 2.11 0.26 0.19 0.03 NA NA
#> 46 AMC6 2 3PLM 2.83 0.64 1.44 0.10 0.15 0.02 NA NA
#> 47 AMC7 2 3PLM 1.69 0.41 0.37 0.18 0.25 0.07 NA NA
#> 48 AMC8 2 3PLM 1.65 0.29 0.39 0.14 0.20 0.05 NA NA
#> 49 AMC9 2 3PLM 1.55 0.26 0.49 0.13 0.15 0.05 NA NA
#> 50 AMC10 2 3PLM 2.48 0.51 1.31 0.10 0.13 0.02 NA NA
#> 51 AMC11 2 3PLM 1.73 0.23 -1.02 0.15 0.16 0.07 NA NA
#> 52 AMC12 2 3PLM 0.95 0.20 -0.83 0.38 0.24 0.10 NA NA
#> 53 AFR1 5 GRM 1.14 0.10 -0.30 0.09 0.30 0.09 0.92 0.11
#> 54 AFR2 5 GPCM 1.33 0.11 -1.99 0.21 -1.31 0.15 -0.72 0.12
#> 55 AFR3 5 GPCM 0.89 0.07 -0.80 0.15 0.15 0.15 0.46 0.16
#> par.5 se.5
#> 1 NA NA
#> 2 NA NA
#> 3 NA NA
#> 4 NA NA
#> 5 NA NA
#> 6 NA NA
#> 7 NA NA
#> 8 NA NA
#> 9 NA NA
#> 10 NA NA
#> 11 NA NA
#> 12 NA NA
#> 13 NA NA
#> 14 NA NA
#> 15 NA NA
#> 16 NA NA
#> 17 NA NA
#> 18 NA NA
#> 19 NA NA
#> 20 NA NA
#> 21 NA NA
#> 22 NA NA
#> 23 NA NA
#> 24 NA NA
#> 25 NA NA
#> 26 NA NA
#> 27 NA NA
#> 28 NA NA
#> 29 NA NA
#> 30 NA NA
#> 31 NA NA
#> 32 NA NA
#> 33 NA NA
#> 34 NA NA
#> 35 NA NA
#> 36 NA NA
#> 37 NA NA
#> 38 NA NA
#> 39 -0.23 0.06
#> 40 1.09 0.10
#> 41 NA NA
#> 42 NA NA
#> 43 NA NA
#> 44 NA NA
#> 45 NA NA
#> 46 NA NA
#> 47 NA NA
#> 48 NA NA
#> 49 NA NA
#> 50 NA NA
#> 51 NA NA
#> 52 NA NA
#> 53 1.35 0.13
#> 54 -0.21 0.10
#> 55 1.35 0.19
#>
#> Group Parameters:
#> mu sigma
#> 0.03 1.02
# 2) item parameter estimation: fix the slope parameters of the 1PLM to 1
<- est_item(x, data, score,
(mod2 D = 1, fix.a.1pl = TRUE, a.val.1pl = 1, use.gprior = TRUE,
gprior = list(dist = "beta", params = c(5, 17)), use.startval = FALSE
))#> Starting...
#> Parsing input...
#> Estimating item parameters...
#> Estimation is finished.
#>
#> Call:
#> est_item(x = x, data = data, score = score, D = 1, fix.a.1pl = TRUE,
#> a.val.1pl = 1, use.gprior = TRUE, gprior = list(dist = "beta",
#> params = c(5, 17)), use.startval = FALSE)
#>
#> Fixed ability parameter calibration (Stocking's Method A).
#> All item parameters were successfully converged.
#>
#> Log-likelihood: -15830.7
summary(mod2)
#>
#> Call:
#> est_item(x = x, data = data, score = score, D = 1, fix.a.1pl = TRUE,
#> a.val.1pl = 1, use.gprior = TRUE, gprior = list(dist = "beta",
#> params = c(5, 17)), use.startval = FALSE)
#>
#> Summary of the Data
#> Number of Items in Response Data: 55
#> Number of Excluded Items: 0
#> Number of free parameters: 161
#> Number of Responses for Each Item:
#> id n
#> 1 CMC1 500
#> 2 CMC2 500
#> 3 CMC3 500
#> 4 CMC4 500
#> 5 CMC5 500
#> 6 CMC6 500
#> 7 CMC7 500
#> 8 CMC8 500
#> 9 CMC9 500
#> 10 CMC10 500
#> 11 CMC11 500
#> 12 CMC12 500
#> 13 CMC13 500
#> 14 CMC14 500
#> 15 CMC15 500
#> 16 CMC16 500
#> 17 CMC17 500
#> 18 CMC18 500
#> 19 CMC19 500
#> 20 CMC20 500
#> 21 CMC21 500
#> 22 CMC22 500
#> 23 CMC23 500
#> 24 CMC24 500
#> 25 CMC25 500
#> 26 CMC26 500
#> 27 CMC27 500
#> 28 CMC28 500
#> 29 CMC29 500
#> 30 CMC30 500
#> 31 CMC31 500
#> 32 CMC32 500
#> 33 CMC33 500
#> 34 CMC34 500
#> 35 CMC35 500
#> 36 CMC36 500
#> 37 CMC37 500
#> 38 CMC38 500
#> 39 CFR1 500
#> 40 CFR2 500
#> 41 AMC1 500
#> 42 AMC2 500
#> 43 AMC3 500
#> 44 AMC4 500
#> 45 AMC5 500
#> 46 AMC6 500
#> 47 AMC7 500
#> 48 AMC8 500
#> 49 AMC9 500
#> 50 AMC10 500
#> 51 AMC11 500
#> 52 AMC12 500
#> 53 AFR1 500
#> 54 AFR2 500
#> 55 AFR3 500
#>
#> Processing time (in seconds)
#> Total computation: 0.68
#>
#> Convergence of Solution
#> All item parameters were successfully converged.
#>
#> Summary of Estimation Results
#> -2loglikelihood: 31661.4
#> Item Parameters:
#> id cats model par.1 se.1 par.2 se.2 par.3 se.3 par.4 se.4
#> 1 CMC1 2 1PLM 1.00 NA 1.62 0.12 NA NA NA NA
#> 2 CMC2 2 1PLM 1.00 NA -1.08 0.11 NA NA NA NA
#> 3 CMC3 2 1PLM 1.00 NA 0.40 0.10 NA NA NA NA
#> 4 CMC4 2 2PLM 0.96 0.12 -0.43 0.11 NA NA NA NA
#> 5 CMC5 2 1PLM 1.00 NA -0.25 0.10 NA NA NA NA
#> 6 CMC6 2 3PLM 1.88 0.27 0.67 0.09 0.10 0.03 NA NA
#> 7 CMC7 2 3PLM 0.88 0.17 1.03 0.23 0.13 0.05 NA NA
#> 8 CMC8 2 2PLM 0.92 0.12 0.87 0.13 NA NA NA NA
#> 9 CMC9 2 2PLM 1.00 0.12 0.89 0.13 NA NA NA NA
#> 10 CMC10 2 2PLM 1.61 0.15 0.09 0.07 NA NA NA NA
#> 11 CMC11 2 2PLM 1.07 0.12 -0.37 0.10 NA NA NA NA
#> 12 CMC12 2 2PLM 0.94 0.12 1.10 0.15 NA NA NA NA
#> 13 CMC13 2 3PLM 1.35 0.34 1.31 0.17 0.17 0.04 NA NA
#> 14 CMC14 2 3PLM 1.36 0.31 0.15 0.24 0.24 0.08 NA NA
#> 15 CMC15 2 3PLM 1.53 0.27 0.01 0.17 0.20 0.07 NA NA
#> 16 CMC16 2 3PLM 2.10 0.25 0.04 0.08 0.10 0.04 NA NA
#> 17 CMC17 2 3PLM 1.02 0.15 -0.41 0.22 0.16 0.07 NA NA
#> 18 CMC18 2 3PLM 1.27 0.38 1.42 0.20 0.22 0.05 NA NA
#> 19 CMC19 2 3PLM 2.25 0.32 -1.11 0.14 0.17 0.07 NA NA
#> 20 CMC20 2 3PLM 1.47 0.22 -1.74 0.22 0.18 0.08 NA NA
#> 21 CMC21 2 3PLM 1.38 0.21 -1.25 0.23 0.20 0.08 NA NA
#> 22 CMC22 2 3PLM 0.92 0.16 -0.55 0.28 0.19 0.08 NA NA
#> 23 CMC23 2 3PLM 1.10 0.22 -0.12 0.27 0.22 0.09 NA NA
#> 24 CMC24 2 3PLM 1.21 0.34 1.43 0.21 0.22 0.05 NA NA
#> 25 CMC25 2 3PLM 0.83 0.16 -1.51 0.40 0.21 0.09 NA NA
#> 26 CMC26 2 3PLM 1.07 0.18 -2.16 0.35 0.19 0.08 NA NA
#> 27 CMC27 2 3PLM 1.18 0.18 0.09 0.17 0.14 0.06 NA NA
#> 28 CMC28 2 3PLM 2.19 0.31 -0.17 0.11 0.19 0.05 NA NA
#> 29 CMC29 2 3PLM 2.48 0.54 -0.81 0.20 0.38 0.09 NA NA
#> 30 CMC30 2 3PLM 1.88 0.45 0.69 0.15 0.34 0.05 NA NA
#> 31 CMC31 2 3PLM 0.70 0.16 1.00 0.32 0.16 0.07 NA NA
#> 32 CMC32 2 3PLM 1.73 0.30 -0.78 0.21 0.26 0.09 NA NA
#> 33 CMC33 2 3PLM 1.07 0.17 -1.45 0.28 0.19 0.08 NA NA
#> 34 CMC34 2 3PLM 1.04 0.17 0.21 0.20 0.16 0.06 NA NA
#> 35 CMC35 2 3PLM 1.36 0.19 -0.45 0.17 0.16 0.06 NA NA
#> 36 CMC36 2 3PLM 0.88 0.17 0.97 0.23 0.14 0.05 NA NA
#> 37 CMC37 2 3PLM 2.13 0.26 -0.25 0.09 0.13 0.05 NA NA
#> 38 CMC38 2 3PLM 0.87 0.17 -0.31 0.32 0.20 0.09 NA NA
#> 39 CFR1 5 GRM 2.00 0.14 -1.88 0.12 -1.25 0.08 -0.70 0.06
#> 40 CFR2 5 GRM 1.39 0.11 -0.80 0.09 -0.13 0.07 0.60 0.08
#> 41 AMC1 2 3PLM 1.81 0.39 0.74 0.14 0.28 0.05 NA NA
#> 42 AMC2 2 3PLM 1.70 0.25 -1.59 0.20 0.19 0.08 NA NA
#> 43 AMC3 2 3PLM 1.30 0.25 0.68 0.16 0.16 0.05 NA NA
#> 44 AMC4 2 3PLM 0.94 0.17 -0.18 0.26 0.18 0.07 NA NA
#> 45 AMC5 2 3PLM 1.69 0.65 2.11 0.26 0.19 0.03 NA NA
#> 46 AMC6 2 3PLM 2.83 0.64 1.44 0.10 0.15 0.02 NA NA
#> 47 AMC7 2 3PLM 1.69 0.41 0.37 0.18 0.25 0.07 NA NA
#> 48 AMC8 2 3PLM 1.65 0.29 0.39 0.14 0.20 0.05 NA NA
#> 49 AMC9 2 3PLM 1.55 0.26 0.49 0.13 0.15 0.05 NA NA
#> 50 AMC10 2 3PLM 2.48 0.51 1.31 0.10 0.13 0.02 NA NA
#> 51 AMC11 2 3PLM 1.73 0.23 -1.02 0.15 0.16 0.07 NA NA
#> 52 AMC12 2 3PLM 0.95 0.20 -0.83 0.38 0.24 0.10 NA NA
#> 53 AFR1 5 GRM 1.14 0.10 -0.30 0.09 0.30 0.09 0.92 0.11
#> 54 AFR2 5 GPCM 1.33 0.11 -1.99 0.21 -1.31 0.15 -0.72 0.12
#> 55 AFR3 5 GPCM 0.89 0.07 -0.80 0.15 0.15 0.15 0.46 0.16
#> par.5 se.5
#> 1 NA NA
#> 2 NA NA
#> 3 NA NA
#> 4 NA NA
#> 5 NA NA
#> 6 NA NA
#> 7 NA NA
#> 8 NA NA
#> 9 NA NA
#> 10 NA NA
#> 11 NA NA
#> 12 NA NA
#> 13 NA NA
#> 14 NA NA
#> 15 NA NA
#> 16 NA NA
#> 17 NA NA
#> 18 NA NA
#> 19 NA NA
#> 20 NA NA
#> 21 NA NA
#> 22 NA NA
#> 23 NA NA
#> 24 NA NA
#> 25 NA NA
#> 26 NA NA
#> 27 NA NA
#> 28 NA NA
#> 29 NA NA
#> 30 NA NA
#> 31 NA NA
#> 32 NA NA
#> 33 NA NA
#> 34 NA NA
#> 35 NA NA
#> 36 NA NA
#> 37 NA NA
#> 38 NA NA
#> 39 -0.23 0.06
#> 40 1.09 0.10
#> 41 NA NA
#> 42 NA NA
#> 43 NA NA
#> 44 NA NA
#> 45 NA NA
#> 46 NA NA
#> 47 NA NA
#> 48 NA NA
#> 49 NA NA
#> 50 NA NA
#> 51 NA NA
#> 52 NA NA
#> 53 1.35 0.13
#> 54 -0.21 0.10
#> 55 1.35 0.19
#>
#> Group Parameters:
#> mu sigma
#> 0.03 1.02
# 3) item parameter estimation: fix the guessing parameters of the 3PLM to 0.2
<- est_item(x, data, score,
(mod3 D = 1, fix.a.1pl = TRUE, fix.g = TRUE, a.val.1pl = 1, g.val = .2,
use.startval = FALSE
))#> Starting...
#> Parsing input...
#> Estimating item parameters...
#> Estimation is finished.
#>
#> Call:
#> est_item(x = x, data = data, score = score, D = 1, fix.a.1pl = TRUE,
#> fix.g = TRUE, a.val.1pl = 1, g.val = 0.2, use.startval = FALSE)
#>
#> Fixed ability parameter calibration (Stocking's Method A).
#> All item parameters were successfully converged.
#>
#> Log-likelihood: -15916.26
summary(mod3)
#>
#> Call:
#> est_item(x = x, data = data, score = score, D = 1, fix.a.1pl = TRUE,
#> fix.g = TRUE, a.val.1pl = 1, g.val = 0.2, use.startval = FALSE)
#>
#> Summary of the Data
#> Number of Items in Response Data: 55
#> Number of Excluded Items: 0
#> Number of free parameters: 121
#> Number of Responses for Each Item:
#> id n
#> 1 CMC1 500
#> 2 CMC2 500
#> 3 CMC3 500
#> 4 CMC4 500
#> 5 CMC5 500
#> 6 CMC6 500
#> 7 CMC7 500
#> 8 CMC8 500
#> 9 CMC9 500
#> 10 CMC10 500
#> 11 CMC11 500
#> 12 CMC12 500
#> 13 CMC13 500
#> 14 CMC14 500
#> 15 CMC15 500
#> 16 CMC16 500
#> 17 CMC17 500
#> 18 CMC18 500
#> 19 CMC19 500
#> 20 CMC20 500
#> 21 CMC21 500
#> 22 CMC22 500
#> 23 CMC23 500
#> 24 CMC24 500
#> 25 CMC25 500
#> 26 CMC26 500
#> 27 CMC27 500
#> 28 CMC28 500
#> 29 CMC29 500
#> 30 CMC30 500
#> 31 CMC31 500
#> 32 CMC32 500
#> 33 CMC33 500
#> 34 CMC34 500
#> 35 CMC35 500
#> 36 CMC36 500
#> 37 CMC37 500
#> 38 CMC38 500
#> 39 CFR1 500
#> 40 CFR2 500
#> 41 AMC1 500
#> 42 AMC2 500
#> 43 AMC3 500
#> 44 AMC4 500
#> 45 AMC5 500
#> 46 AMC6 500
#> 47 AMC7 500
#> 48 AMC8 500
#> 49 AMC9 500
#> 50 AMC10 500
#> 51 AMC11 500
#> 52 AMC12 500
#> 53 AFR1 500
#> 54 AFR2 500
#> 55 AFR3 500
#>
#> Processing time (in seconds)
#> Total computation: 0.43
#>
#> Convergence of Solution
#> All item parameters were successfully converged.
#>
#> Summary of Estimation Results
#> -2loglikelihood: 31832.52
#> Item Parameters:
#> id cats model par.1 se.1 par.2 se.2 par.3 se.3 par.4 se.4
#> 1 CMC1 2 1PLM 1.00 NA 1.62 0.12 NA NA NA NA
#> 2 CMC2 2 1PLM 1.00 NA -1.08 0.11 NA NA NA NA
#> 3 CMC3 2 1PLM 1.00 NA 0.40 0.10 NA NA NA NA
#> 4 CMC4 2 2PLM 0.96 0.12 -0.43 0.11 NA NA NA NA
#> 5 CMC5 2 1PLM 1.00 NA -0.25 0.10 NA NA NA NA
#> 6 CMC6 2 3PLM 2.25 0.29 0.83 0.08 0.20 NA NA NA
#> 7 CMC7 2 3PLM 1.00 0.17 1.22 0.19 0.20 NA NA NA
#> 8 CMC8 2 2PLM 0.92 0.12 0.87 0.13 NA NA NA NA
#> 9 CMC9 2 2PLM 1.00 0.12 0.89 0.13 NA NA NA NA
#> 10 CMC10 2 2PLM 1.61 0.15 0.09 0.07 NA NA NA NA
#> 11 CMC11 2 2PLM 1.07 0.12 -0.37 0.10 NA NA NA NA
#> 12 CMC12 2 2PLM 0.94 0.12 1.10 0.15 NA NA NA NA
#> 13 CMC13 2 3PLM 1.53 0.28 1.37 0.15 0.20 NA NA NA
#> 14 CMC14 2 3PLM 1.26 0.18 0.05 0.10 0.20 NA NA NA
#> 15 CMC15 2 3PLM 1.52 0.20 0.00 0.09 0.20 NA NA NA
#> 16 CMC16 2 3PLM 2.36 0.27 0.18 0.07 0.20 NA NA NA
#> 17 CMC17 2 3PLM 1.06 0.15 -0.30 0.12 0.20 NA NA NA
#> 18 CMC18 2 3PLM 1.16 0.23 1.38 0.19 0.20 NA NA NA
#> 19 CMC19 2 3PLM 2.30 0.30 -1.07 0.10 0.20 NA NA NA
#> 20 CMC20 2 3PLM 1.48 0.22 -1.71 0.19 0.20 NA NA NA
#> 21 CMC21 2 3PLM 1.38 0.19 -1.25 0.16 0.20 NA NA NA
#> 22 CMC22 2 3PLM 0.93 0.14 -0.52 0.15 0.20 NA NA NA
#> 23 CMC23 2 3PLM 1.08 0.16 -0.17 0.12 0.20 NA NA NA
#> 24 CMC24 2 3PLM 1.13 0.23 1.40 0.19 0.20 NA NA NA
#> 25 CMC25 2 3PLM 0.82 0.15 -1.55 0.28 0.20 NA NA NA
#> 26 CMC26 2 3PLM 1.07 0.18 -2.14 0.31 0.20 NA NA NA
#> 27 CMC27 2 3PLM 1.27 0.17 0.22 0.10 0.20 NA NA NA
#> 28 CMC28 2 3PLM 2.22 0.27 -0.15 0.07 0.20 NA NA NA
#> 29 CMC29 2 3PLM 1.84 0.28 -1.19 0.14 0.20 NA NA NA
#> 30 CMC30 2 3PLM 1.19 0.20 0.35 0.11 0.20 NA NA NA
#> 31 CMC31 2 3PLM 0.76 0.15 1.15 0.23 0.20 NA NA NA
#> 32 CMC32 2 3PLM 1.62 0.22 -0.90 0.12 0.20 NA NA NA
#> 33 CMC33 2 3PLM 1.07 0.16 -1.43 0.21 0.20 NA NA NA
#> 34 CMC34 2 3PLM 1.11 0.16 0.33 0.12 0.20 NA NA NA
#> 35 CMC35 2 3PLM 1.42 0.18 -0.36 0.10 0.20 NA NA NA
#> 36 CMC36 2 3PLM 1.00 0.17 1.15 0.18 0.20 NA NA NA
#> 37 CMC37 2 3PLM 2.30 0.27 -0.15 0.07 0.20 NA NA NA
#> 38 CMC38 2 3PLM 0.87 0.14 -0.33 0.15 0.20 NA NA NA
#> 39 CFR1 5 GRM 2.00 0.14 -1.88 0.12 -1.25 0.08 -0.70 0.06
#> 40 CFR2 5 GRM 1.39 0.11 -0.80 0.09 -0.13 0.07 0.60 0.08
#> 41 AMC1 2 3PLM 1.45 0.22 0.57 0.10 0.20 NA NA NA
#> 42 AMC2 2 3PLM 1.72 0.25 -1.57 0.16 0.20 NA NA NA
#> 43 AMC3 2 3PLM 1.44 0.21 0.77 0.11 0.20 NA NA NA
#> 44 AMC4 2 3PLM 0.96 0.15 -0.13 0.13 0.20 NA NA NA
#> 45 AMC5 2 3PLM 1.83 0.53 2.10 0.25 0.20 NA NA NA
#> 46 AMC6 2 3PLM 3.32 0.68 1.50 0.09 0.20 NA NA NA
#> 47 AMC7 2 3PLM 1.48 0.21 0.25 0.09 0.20 NA NA NA
#> 48 AMC8 2 3PLM 1.65 0.23 0.39 0.09 0.20 NA NA NA
#> 49 AMC9 2 3PLM 1.72 0.23 0.59 0.09 0.20 NA NA NA
#> 50 AMC10 2 3PLM 3.21 0.62 1.40 0.09 0.20 NA NA NA
#> 51 AMC11 2 3PLM 1.78 0.22 -0.96 0.11 0.20 NA NA NA
#> 52 AMC12 2 3PLM 0.91 0.15 -0.96 0.19 0.20 NA NA NA
#> 53 AFR1 5 GRM 1.14 0.10 -0.30 0.09 0.30 0.09 0.92 0.11
#> 54 AFR2 5 GPCM 1.33 0.11 -1.99 0.21 -1.31 0.15 -0.72 0.12
#> 55 AFR3 5 GPCM 0.89 0.07 -0.80 0.15 0.15 0.15 0.46 0.16
#> par.5 se.5
#> 1 NA NA
#> 2 NA NA
#> 3 NA NA
#> 4 NA NA
#> 5 NA NA
#> 6 NA NA
#> 7 NA NA
#> 8 NA NA
#> 9 NA NA
#> 10 NA NA
#> 11 NA NA
#> 12 NA NA
#> 13 NA NA
#> 14 NA NA
#> 15 NA NA
#> 16 NA NA
#> 17 NA NA
#> 18 NA NA
#> 19 NA NA
#> 20 NA NA
#> 21 NA NA
#> 22 NA NA
#> 23 NA NA
#> 24 NA NA
#> 25 NA NA
#> 26 NA NA
#> 27 NA NA
#> 28 NA NA
#> 29 NA NA
#> 30 NA NA
#> 31 NA NA
#> 32 NA NA
#> 33 NA NA
#> 34 NA NA
#> 35 NA NA
#> 36 NA NA
#> 37 NA NA
#> 38 NA NA
#> 39 -0.23 0.06
#> 40 1.09 0.10
#> 41 NA NA
#> 42 NA NA
#> 43 NA NA
#> 44 NA NA
#> 45 NA NA
#> 46 NA NA
#> 47 NA NA
#> 48 NA NA
#> 49 NA NA
#> 50 NA NA
#> 51 NA NA
#> 52 NA NA
#> 53 1.35 0.13
#> 54 -0.21 0.10
#> 55 1.35 0.19
#>
#> Group Parameters:
#> mu sigma
#> 0.03 1.02
## ----------------------------------------------------------------------------
# 3. The example code below shows how to prepare the data sets and how to conduct
# the IRT model-data fit analysis:
## ----------------------------------------------------------------------------
## Step 1: prepare a data set for IRT
## In this example, we use the simulated mixed-item format CAT Data
## But, only items that have item responses more than 1,000 are assessed.
# find the location of items that have more than 1,000 item responses
<- which(colSums(simCAT_MX$res.dat, na.rm = TRUE) > 1000)
over1000
# (1) item metadata
<- simCAT_MX$item.prm[over1000, ]
x dim(x)
#> [1] 113 7
print(x[1:10, ])
#> id cats model par.1 par.2 par.3 par.4
#> 2 V2 2 2PLM 0.9152754 1.3843593 NA NA
#> 3 V3 2 2PLM 1.3454796 -1.2554919 NA NA
#> 5 V5 2 2PLM 1.0862914 1.7114409 NA NA
#> 6 V6 2 2PLM 1.1311496 -0.6029080 NA NA
#> 7 V7 2 2PLM 1.2012407 -0.4721664 NA NA
#> 8 V8 2 2PLM 1.3244155 -0.6353713 NA NA
#> 10 V10 2 2PLM 1.2487125 0.1381082 NA NA
#> 11 V11 2 2PLM 1.4413208 1.2276303 NA NA
#> 12 V12 2 2PLM 1.2077273 -0.8017795 NA NA
#> 13 V13 2 2PLM 1.1715456 -1.0803926 NA NA
# (2) examinee's ability estimates
<- simCAT_MX$score
score length(score)
#> [1] 30000
print(score[1:100])
#> [1] -0.30311440 -0.67224807 -0.73474583 1.76935738 -0.91017203 -0.28448278
#> [7] 0.81656431 -1.66434615 0.59312008 -0.35182937 0.23129679 -0.93107524
#> [13] -0.29971993 -0.32700449 -0.22271651 1.48912121 -0.92927809 0.43453041
#> [19] -0.01795450 -0.28365286 0.01115173 -0.76101441 0.12144273 0.83096135
#> [25] 1.96600585 -0.83510402 -0.40268865 -0.05605526 0.72398446 -0.16026059
#> [31] -1.09011778 1.22126764 -0.13340360 -1.28230720 -1.05581980 0.83484173
#> [37] -0.52136360 -0.66913590 -1.08580804 1.73214834 0.56950387 0.48016332
#> [43] -0.03472720 -2.17577824 0.44127032 0.98913071 1.43861714 -1.08133809
#> [49] -0.69016072 0.19325797 0.89998383 1.25383167 -1.09600809 0.50519143
#> [55] -0.51707395 -0.39474484 -0.45031102 1.85675021 1.50768131 1.06011811
#> [61] -0.41064797 1.10960278 -0.68853387 -0.59397660 -0.65326436 0.29147751
#> [67] -1.86787473 1.04838050 -1.14582092 1.07395234 -0.03828693 0.08445559
#> [73] 0.34582524 0.72300905 0.84448992 -1.86488055 0.77121937 1.66573208
#> [79] 0.10311673 -0.50768866 -1.60992457 -0.23074682 0.16162326 0.26091160
#> [85] 0.60682182 0.65415304 -0.69923141 1.07545766 0.24060267 -0.93542383
#> [91] 1.24988766 -0.01826940 1.27403936 0.10985621 -1.19092047 0.79614598
#> [97] 0.62302338 -0.89455596 -0.03472720 0.20250837
# (3) response data
<- simCAT_MX$res.dat[, over1000]
data dim(data)
#> [1] 30000 113
print(data[1:20, 1:6])
#> Item.dc.2 Item.dc.3 Item.dc.5 Item.dc.6 Item.dc.7 Item.dc.8
#> [1,] NA NA NA NA 0 1
#> [2,] NA NA NA NA 0 1
#> [3,] NA NA NA NA 1 1
#> [4,] NA NA 0 NA NA NA
#> [5,] NA 1 NA 0 1 1
#> [6,] NA 0 NA 0 1 0
#> [7,] NA NA NA NA NA NA
#> [8,] NA 1 NA 1 1 0
#> [9,] NA NA 0 NA NA NA
#> [10,] NA 0 NA 1 1 0
#> [11,] NA NA 0 NA NA NA
#> [12,] NA 1 NA 0 1 1
#> [13,] NA 0 NA 1 1 0
#> [14,] NA NA NA NA 1 NA
#> [15,] NA NA NA 1 1 1
#> [16,] 1 NA 0 NA NA NA
#> [17,] NA 0 NA 0 1 0
#> [18,] NA NA NA NA NA NA
#> [19,] NA 0 NA 0 1 1
#> [20,] NA NA NA NA NA NA
## Step 2: Compute the IRT mode-data fit statistics
# (1) the use of "equal.width"
<- irtfit(
fit1 x = x, score = score, data = data, group.method = "equal.width",
n.width = 11, loc.theta = "average", range.score = c(-4, 4), D = 1, alpha = 0.05,
missing = NA, overSR = 2.5
)
# what kinds of internal objects does the results have?
names(fit1)
#> [1] "fit_stat" "contingency.fitstat" "contingency.plot"
#> [4] "item_df" "individual.info" "ancillary"
#> [7] "call"
# show the results of the fit statistics
$fit_stat[1:10, ]
fit1#> id X2 G2 df.X2 df.G2 crit.val.X2 crit.val.G2 p.X2 p.G2 outfit
#> 1 V2 75.070 75.209 8 10 15.51 18.31 0 0 1.018
#> 2 V3 186.880 168.082 8 10 15.51 18.31 0 0 1.124
#> 3 V5 151.329 139.213 8 10 15.51 18.31 0 0 1.133
#> 4 V6 178.409 157.911 8 10 15.51 18.31 0 0 1.056
#> 5 V7 185.438 170.360 9 11 16.92 19.68 0 0 1.078
#> 6 V8 209.653 193.001 8 10 15.51 18.31 0 0 1.098
#> 7 V10 267.444 239.563 9 11 16.92 19.68 0 0 1.097
#> 8 V11 148.896 133.209 7 9 14.07 16.92 0 0 1.129
#> 9 V12 139.295 125.647 9 11 16.92 19.68 0 0 1.065
#> 10 V13 128.422 117.439 9 11 16.92 19.68 0 0 1.075
#> infit N overSR.prop
#> 1 1.016 2018 0.364
#> 2 1.090 11041 0.636
#> 3 1.111 5181 0.727
#> 4 1.045 13599 0.545
#> 5 1.059 18293 0.455
#> 6 1.075 16163 0.636
#> 7 1.073 19702 0.727
#> 8 1.083 13885 0.455
#> 9 1.051 12118 0.636
#> 10 1.059 10719 0.545
# show the contingency tables for the first item (dichotomous)
$contingency.fitstat[[1]]
fit1#> total obs.freq.0 obs.freq.1 exp.freq.0 exp.freq.1 obs.prop.0 obs.prop.1
#> 1 8 5 3 6.102331 1.897669 0.6250000 0.3750000
#> 2 14 8 6 9.969510 4.030490 0.5714286 0.4285714
#> 3 60 34 26 40.253757 19.746243 0.5666667 0.4333333
#> 4 185 99 86 115.264928 69.735072 0.5351351 0.4648649
#> 5 240 115 125 138.368078 101.631922 0.4791667 0.5208333
#> 6 349 145 204 185.031440 163.968560 0.4154728 0.5845272
#> 7 325 114 211 155.483116 169.516884 0.3507692 0.6492308
#> 8 246 82 164 108.731822 137.268178 0.3333333 0.6666667
#> 9 377 139 238 154.062263 222.937737 0.3687003 0.6312997
#> 10 214 78 136 72.645447 141.354553 0.3644860 0.6355140
#> exp.prob.0 exp.prob.1 raw.rsd.0 raw.rsd.1
#> 1 0.7627914 0.2372086 -0.13779141 0.13779141
#> 2 0.7121079 0.2878921 -0.14067932 0.14067932
#> 3 0.6708959 0.3291041 -0.10422928 0.10422928
#> 4 0.6230537 0.3769463 -0.08791853 0.08791853
#> 5 0.5765337 0.4234663 -0.09736699 0.09736699
#> 6 0.5301760 0.4698240 -0.11470327 0.11470327
#> 7 0.4784096 0.5215904 -0.12764036 0.12764036
#> 8 0.4419993 0.5580007 -0.10866594 0.10866594
#> 9 0.4086532 0.5913468 -0.03995295 0.03995295
#> 10 0.3394647 0.6605353 0.02502128 -0.02502128
# (2) the use of "equal.freq"
<- irtfit(
fit2 x = x, score = score, data = data, group.method = "equal.freq",
n.width = 11, loc.theta = "average", range.score = c(-4, 4), D = 1, alpha = 0.05,
missing = NA
)
# show the results of the fit statistics
$fit_stat[1:10, ]
fit2#> id X2 G2 df.X2 df.G2 crit.val.X2 crit.val.G2 p.X2 p.G2 outfit
#> 1 V2 79.629 79.941 9 11 16.92 19.68 0 0 1.018
#> 2 V3 200.266 180.620 9 11 16.92 19.68 0 0 1.124
#> 3 V5 148.742 138.244 9 11 16.92 19.68 0 0 1.133
#> 4 V6 141.905 135.027 9 11 16.92 19.68 0 0 1.056
#> 5 V7 189.680 178.200 9 11 16.92 19.68 0 0 1.078
#> 6 V8 214.014 198.621 9 11 16.92 19.68 0 0 1.098
#> 7 V10 258.335 237.874 9 11 16.92 19.68 0 0 1.097
#> 8 V11 162.225 146.413 9 11 16.92 19.68 0 0 1.129
#> 9 V12 147.600 136.192 9 11 16.92 19.68 0 0 1.065
#> 10 V13 141.090 132.064 9 11 16.92 19.68 0 0 1.075
#> infit N overSR.prop
#> 1 1.016 2018 0.636
#> 2 1.090 11041 0.636
#> 3 1.111 5181 0.727
#> 4 1.045 13599 0.636
#> 5 1.059 18293 0.455
#> 6 1.075 16163 0.545
#> 7 1.073 19702 0.636
#> 8 1.083 13885 0.636
#> 9 1.051 12118 0.455
#> 10 1.059 10719 0.636
# show the contingency table for the fourth item (polytomous)
$contingency.fitstat[[4]]
fit2#> total obs.freq.0 obs.freq.1 exp.freq.0 exp.freq.1 obs.prop.0 obs.prop.1
#> 1 1156 901 255 932.9066 223.0934 0.7794118 0.2205882
#> 2 1304 928 376 938.1209 365.8791 0.7116564 0.2883436
#> 3 1248 786 462 821.9101 426.0899 0.6298077 0.3701923
#> 4 1235 760 475 747.7321 487.2679 0.6153846 0.3846154
#> 5 1222 694 528 686.2295 535.7705 0.5679214 0.4320786
#> 6 1249 683 566 659.9220 589.0780 0.5468375 0.4531625
#> 7 1238 652 586 610.7195 627.2805 0.5266559 0.4733441
#> 8 1231 612 619 554.8880 676.1120 0.4971568 0.5028432
#> 9 1241 571 670 501.1981 739.8019 0.4601128 0.5398872
#> 10 1238 495 743 434.7901 803.2099 0.3998384 0.6001616
#> 11 1237 467 770 325.5017 911.4983 0.3775263 0.6224737
#> exp.prob.0 exp.prob.1 raw.rsd.0 raw.rsd.1
#> 1 0.8070127 0.1929873 -0.027600903 0.027600903
#> 2 0.7194179 0.2805821 -0.007761448 0.007761448
#> 3 0.6585818 0.3414182 -0.028774123 0.028774123
#> 4 0.6054511 0.3945489 0.009933503 -0.009933503
#> 5 0.5615626 0.4384374 0.006358826 -0.006358826
#> 6 0.5283603 0.4716397 0.018477151 -0.018477151
#> 7 0.4933114 0.5066886 0.033344472 -0.033344472
#> 8 0.4507620 0.5492380 0.046394802 -0.046394802
#> 9 0.4038663 0.5961337 0.056246491 -0.056246491
#> 10 0.3512036 0.6487964 0.048634854 -0.048634854
#> 11 0.2631380 0.7368620 0.114388254 -0.114388254
## Step 3: Draw the IRT residual plots
# 1. the dichotomous item
# (1) both raw and standardized residual plots using the object "fit1"
plot(x = fit1, item.loc = 1, type = "both", ci.method = "wald", ylim.sr.adjust = TRUE)
#> interval point total obs.freq.0 obs.freq.1 obs.prop.0
#> 1 [-0.1218815,0.08512996) -0.02529272 3 3 0 1.0000000
#> 2 [0.08512996,0.2921415) 0.18431014 5 2 3 0.4000000
#> 3 [0.2921415,0.499153) 0.39488272 14 8 6 0.5714286
#> 4 [0.499153,0.7061645) 0.60618911 60 34 26 0.5666667
#> 5 [0.7061645,0.913176) 0.83531169 185 99 86 0.5351351
#> 6 [0.913176,1.120187) 1.04723712 240 115 125 0.4791667
#> 7 [1.120187,1.327199) 1.25232143 349 145 204 0.4154728
#> 8 [1.327199,1.53421) 1.47877397 325 114 211 0.3507692
#> 9 [1.53421,1.741222) 1.63898436 246 82 164 0.3333333
#> 10 [1.741222,1.948233) 1.78810197 377 139 238 0.3687003
#> 11 [1.948233,2.155245] 2.11166019 214 78 136 0.3644860
#> obs.prop.1 exp.prob.0 exp.prob.1 raw.rsd.0 raw.rsd.1 se.0
#> 1 0.0000000 0.7841844 0.2158156 0.21581559 -0.21581559 0.23751437
#> 2 0.6000000 0.7499556 0.2500444 -0.34995561 0.34995561 0.19366063
#> 3 0.4285714 0.7121079 0.2878921 -0.14067932 0.14067932 0.12101070
#> 4 0.4333333 0.6708959 0.3291041 -0.10422928 0.10422928 0.06066226
#> 5 0.4648649 0.6230537 0.3769463 -0.08791853 0.08791853 0.03563007
#> 6 0.5208333 0.5765337 0.4234663 -0.09736699 0.09736699 0.03189453
#> 7 0.5845272 0.5301760 0.4698240 -0.11470327 0.11470327 0.02671560
#> 8 0.6492308 0.4784096 0.5215904 -0.12764036 0.12764036 0.02770914
#> 9 0.6666667 0.4419993 0.5580007 -0.10866594 0.10866594 0.03166362
#> 10 0.6312997 0.4086532 0.5913468 -0.03995295 0.03995295 0.02531791
#> 11 0.6355140 0.3394647 0.6605353 0.02502128 -0.02502128 0.03236968
#> se.1 std.rsd.0 std.rsd.1
#> 1 0.23751437 0.9086423 -0.9086423
#> 2 0.19366063 -1.8070560 1.8070560
#> 3 0.12101070 -1.1625362 1.1625362
#> 4 0.06066226 -1.7181899 1.7181899
#> 5 0.03563007 -2.4675377 2.4675377
#> 6 0.03189453 -3.0527806 3.0527806
#> 7 0.02671560 -4.2934941 4.2934941
#> 8 0.02770914 -4.6064351 4.6064351
#> 9 0.03166362 -3.4318859 3.4318859
#> 10 0.02531791 -1.5780508 1.5780508
#> 11 0.03236968 0.7729850 -0.7729850
# (2) the raw residual plots using the object "fit1"
plot(x = fit1, item.loc = 1, type = "icc", ci.method = "wald", ylim.sr.adjust = TRUE)
#> interval point total obs.freq.0 obs.freq.1 obs.prop.0
#> 1 [-0.1218815,0.08512996) -0.02529272 3 3 0 1.0000000
#> 2 [0.08512996,0.2921415) 0.18431014 5 2 3 0.4000000
#> 3 [0.2921415,0.499153) 0.39488272 14 8 6 0.5714286
#> 4 [0.499153,0.7061645) 0.60618911 60 34 26 0.5666667
#> 5 [0.7061645,0.913176) 0.83531169 185 99 86 0.5351351
#> 6 [0.913176,1.120187) 1.04723712 240 115 125 0.4791667
#> 7 [1.120187,1.327199) 1.25232143 349 145 204 0.4154728
#> 8 [1.327199,1.53421) 1.47877397 325 114 211 0.3507692
#> 9 [1.53421,1.741222) 1.63898436 246 82 164 0.3333333
#> 10 [1.741222,1.948233) 1.78810197 377 139 238 0.3687003
#> 11 [1.948233,2.155245] 2.11166019 214 78 136 0.3644860
#> obs.prop.1 exp.prob.0 exp.prob.1 raw.rsd.0 raw.rsd.1 se.0
#> 1 0.0000000 0.7841844 0.2158156 0.21581559 -0.21581559 0.23751437
#> 2 0.6000000 0.7499556 0.2500444 -0.34995561 0.34995561 0.19366063
#> 3 0.4285714 0.7121079 0.2878921 -0.14067932 0.14067932 0.12101070
#> 4 0.4333333 0.6708959 0.3291041 -0.10422928 0.10422928 0.06066226
#> 5 0.4648649 0.6230537 0.3769463 -0.08791853 0.08791853 0.03563007
#> 6 0.5208333 0.5765337 0.4234663 -0.09736699 0.09736699 0.03189453
#> 7 0.5845272 0.5301760 0.4698240 -0.11470327 0.11470327 0.02671560
#> 8 0.6492308 0.4784096 0.5215904 -0.12764036 0.12764036 0.02770914
#> 9 0.6666667 0.4419993 0.5580007 -0.10866594 0.10866594 0.03166362
#> 10 0.6312997 0.4086532 0.5913468 -0.03995295 0.03995295 0.02531791
#> 11 0.6355140 0.3394647 0.6605353 0.02502128 -0.02502128 0.03236968
#> se.1 std.rsd.0 std.rsd.1
#> 1 0.23751437 0.9086423 -0.9086423
#> 2 0.19366063 -1.8070560 1.8070560
#> 3 0.12101070 -1.1625362 1.1625362
#> 4 0.06066226 -1.7181899 1.7181899
#> 5 0.03563007 -2.4675377 2.4675377
#> 6 0.03189453 -3.0527806 3.0527806
#> 7 0.02671560 -4.2934941 4.2934941
#> 8 0.02770914 -4.6064351 4.6064351
#> 9 0.03166362 -3.4318859 3.4318859
#> 10 0.02531791 -1.5780508 1.5780508
#> 11 0.03236968 0.7729850 -0.7729850
# (3) the standardized residual plots using the object "fit1"
plot(x = fit1, item.loc = 113, type = "sr", ci.method = "wald", ylim.sr.adjust = TRUE)
#> interval point total obs.freq.0 obs.freq.1 obs.freq.2
#> 1 [0.3564295,0.5199582) 0.3564295 1 1 0 0
#> 2 [0.5199582,0.6834869) 0.6081321 5 3 2 0
#> 3 [0.6834869,0.8470155) 0.7400138 15 5 10 0
#> 4 [0.8470155,1.010544) 0.8866202 55 5 15 34
#> 5 [1.010544,1.174073) 1.0821064 133 6 40 53
#> 6 [1.174073,1.337602) 1.2832293 260 8 37 153
#> 7 [1.337602,1.50113) 1.4747336 98 0 23 57
#> 8 [1.50113,1.664659) 1.5311735 306 0 7 85
#> 9 [1.664659,1.828188) 1.7632607 418 0 0 145
#> 10 [1.828188,1.991716) 1.8577191 69 0 0 0
#> 11 [1.991716,2.155245] 2.1021956 263 0 0 0
#> obs.freq.3 obs.prop.0 obs.prop.1 obs.prop.2 obs.prop.3 exp.prob.0
#> 1 0 1.00000000 0.00000000 0.0000000 0.00000000 0.196511833
#> 2 0 0.60000000 0.40000000 0.0000000 0.00000000 0.130431315
#> 3 0 0.33333333 0.66666667 0.0000000 0.00000000 0.102631449
#> 4 1 0.09090909 0.27272727 0.6181818 0.01818182 0.077129446
#> 5 34 0.04511278 0.30075188 0.3984962 0.25563910 0.051169395
#> 6 62 0.03076923 0.14230769 0.5884615 0.23846154 0.032494074
#> 7 18 0.00000000 0.23469388 0.5816327 0.18367347 0.020534959
#> 8 214 0.00000000 0.02287582 0.2777778 0.69934641 0.017857642
#> 9 273 0.00000000 0.00000000 0.3468900 0.65311005 0.009866868
#> 10 69 0.00000000 0.00000000 0.0000000 1.00000000 0.007690015
#> 11 263 0.00000000 0.00000000 0.0000000 1.00000000 0.003962699
#> exp.prob.1 exp.prob.2 exp.prob.3 raw.rsd.0 raw.rsd.1 raw.rsd.2
#> 1 0.31299790 0.3472692 0.1432210 0.803488167 -0.312997903 -0.34726922
#> 2 0.27025065 0.3900531 0.2092649 0.469568685 0.129749354 -0.39005312
#> 3 0.24407213 0.4043226 0.2489738 0.230701885 0.422594537 -0.40432265
#> 4 0.21379299 0.4127992 0.2962784 0.013779645 0.058934282 0.20538261
#> 5 0.17398130 0.4120662 0.3627831 -0.006056613 0.126770584 -0.01356995
#> 6 0.13632441 0.3983962 0.4327853 -0.001724843 0.005983284 0.19006531
#> 7 0.10523862 0.3756891 0.4985373 -0.020534959 0.129455259 0.20594357
#> 8 0.09707782 0.3676106 0.5174539 -0.017857642 -0.074201998 -0.08983281
#> 9 0.06836048 0.3299158 0.5918569 -0.009866868 -0.068360484 0.01697418
#> 10 0.05880602 0.3132481 0.6202558 -0.007690015 -0.058806016 -0.31324812
#> 11 0.03912356 0.2690653 0.6878484 -0.003962699 -0.039123555 -0.26906531
#> raw.rsd.3 se.0 se.1 se.2 se.3 std.rsd.0
#> 1 -0.14322104 0.397359953 0.46371351 0.47610220 0.35029812 2.0220663
#> 2 -0.20926492 0.150611412 0.19860274 0.21813376 0.18191928 3.1177497
#> 3 -0.24897378 0.078357401 0.11090564 0.12671381 0.11165000 2.9442258
#> 4 -0.27809653 0.035974863 0.05528201 0.06638675 0.06156999 0.3830354
#> 5 -0.10714402 0.019106171 0.03287157 0.04267975 0.04169091 -0.3169978
#> 6 -0.19432375 0.010996190 0.02128019 0.03036171 0.03072722 -0.1568583
#> 7 -0.31486387 0.014326112 0.03099761 0.04892172 0.05050741 -1.4333937
#> 8 0.18189246 0.007570744 0.01692484 0.02756294 0.02856568 -2.3587698
#> 9 0.06125317 0.004834464 0.01234350 0.02299737 0.02403956 -2.0409436
#> 10 0.37974416 0.010516294 0.02832213 0.05583668 0.05842604 -0.7312476
#> 11 0.31215156 0.003873963 0.01195570 0.02734578 0.02857270 -1.0229057
#> std.rsd.1 std.rsd.2 std.rsd.3
#> 1 -0.6749812 -0.7294006 -0.4088547
#> 2 0.6533110 -1.7881373 -1.1503175
#> 3 3.8103971 -3.1908333 -2.2299488
#> 4 1.0660662 3.0937290 -4.5167547
#> 5 3.8565422 -0.3179482 -2.5699613
#> 6 0.2811669 6.2600333 -6.3241558
#> 7 4.1762987 4.2096551 -6.2340132
#> 8 -4.3842081 -3.2591881 6.3675177
#> 9 -5.5381760 0.7380923 2.5480159
#> 10 -2.0763275 -5.6100775 6.4995706
#> 11 -3.2723764 -9.8393733 10.9248190
# 2. the polytomous item
# (1) both raw and standardized residual plots using the object "fit1"
plot(x = fit1, item.loc = 113, type = "both", ci.method = "wald", ylim.sr.adjust = TRUE)
#> interval point total obs.freq.0 obs.freq.1 obs.freq.2
#> 1 [0.3564295,0.5199582) 0.3564295 1 1 0 0
#> 2 [0.5199582,0.6834869) 0.6081321 5 3 2 0
#> 3 [0.6834869,0.8470155) 0.7400138 15 5 10 0
#> 4 [0.8470155,1.010544) 0.8866202 55 5 15 34
#> 5 [1.010544,1.174073) 1.0821064 133 6 40 53
#> 6 [1.174073,1.337602) 1.2832293 260 8 37 153
#> 7 [1.337602,1.50113) 1.4747336 98 0 23 57
#> 8 [1.50113,1.664659) 1.5311735 306 0 7 85
#> 9 [1.664659,1.828188) 1.7632607 418 0 0 145
#> 10 [1.828188,1.991716) 1.8577191 69 0 0 0
#> 11 [1.991716,2.155245] 2.1021956 263 0 0 0
#> obs.freq.3 obs.prop.0 obs.prop.1 obs.prop.2 obs.prop.3 exp.prob.0
#> 1 0 1.00000000 0.00000000 0.0000000 0.00000000 0.196511833
#> 2 0 0.60000000 0.40000000 0.0000000 0.00000000 0.130431315
#> 3 0 0.33333333 0.66666667 0.0000000 0.00000000 0.102631449
#> 4 1 0.09090909 0.27272727 0.6181818 0.01818182 0.077129446
#> 5 34 0.04511278 0.30075188 0.3984962 0.25563910 0.051169395
#> 6 62 0.03076923 0.14230769 0.5884615 0.23846154 0.032494074
#> 7 18 0.00000000 0.23469388 0.5816327 0.18367347 0.020534959
#> 8 214 0.00000000 0.02287582 0.2777778 0.69934641 0.017857642
#> 9 273 0.00000000 0.00000000 0.3468900 0.65311005 0.009866868
#> 10 69 0.00000000 0.00000000 0.0000000 1.00000000 0.007690015
#> 11 263 0.00000000 0.00000000 0.0000000 1.00000000 0.003962699
#> exp.prob.1 exp.prob.2 exp.prob.3 raw.rsd.0 raw.rsd.1 raw.rsd.2
#> 1 0.31299790 0.3472692 0.1432210 0.803488167 -0.312997903 -0.34726922
#> 2 0.27025065 0.3900531 0.2092649 0.469568685 0.129749354 -0.39005312
#> 3 0.24407213 0.4043226 0.2489738 0.230701885 0.422594537 -0.40432265
#> 4 0.21379299 0.4127992 0.2962784 0.013779645 0.058934282 0.20538261
#> 5 0.17398130 0.4120662 0.3627831 -0.006056613 0.126770584 -0.01356995
#> 6 0.13632441 0.3983962 0.4327853 -0.001724843 0.005983284 0.19006531
#> 7 0.10523862 0.3756891 0.4985373 -0.020534959 0.129455259 0.20594357
#> 8 0.09707782 0.3676106 0.5174539 -0.017857642 -0.074201998 -0.08983281
#> 9 0.06836048 0.3299158 0.5918569 -0.009866868 -0.068360484 0.01697418
#> 10 0.05880602 0.3132481 0.6202558 -0.007690015 -0.058806016 -0.31324812
#> 11 0.03912356 0.2690653 0.6878484 -0.003962699 -0.039123555 -0.26906531
#> raw.rsd.3 se.0 se.1 se.2 se.3 std.rsd.0
#> 1 -0.14322104 0.397359953 0.46371351 0.47610220 0.35029812 2.0220663
#> 2 -0.20926492 0.150611412 0.19860274 0.21813376 0.18191928 3.1177497
#> 3 -0.24897378 0.078357401 0.11090564 0.12671381 0.11165000 2.9442258
#> 4 -0.27809653 0.035974863 0.05528201 0.06638675 0.06156999 0.3830354
#> 5 -0.10714402 0.019106171 0.03287157 0.04267975 0.04169091 -0.3169978
#> 6 -0.19432375 0.010996190 0.02128019 0.03036171 0.03072722 -0.1568583
#> 7 -0.31486387 0.014326112 0.03099761 0.04892172 0.05050741 -1.4333937
#> 8 0.18189246 0.007570744 0.01692484 0.02756294 0.02856568 -2.3587698
#> 9 0.06125317 0.004834464 0.01234350 0.02299737 0.02403956 -2.0409436
#> 10 0.37974416 0.010516294 0.02832213 0.05583668 0.05842604 -0.7312476
#> 11 0.31215156 0.003873963 0.01195570 0.02734578 0.02857270 -1.0229057
#> std.rsd.1 std.rsd.2 std.rsd.3
#> 1 -0.6749812 -0.7294006 -0.4088547
#> 2 0.6533110 -1.7881373 -1.1503175
#> 3 3.8103971 -3.1908333 -2.2299488
#> 4 1.0660662 3.0937290 -4.5167547
#> 5 3.8565422 -0.3179482 -2.5699613
#> 6 0.2811669 6.2600333 -6.3241558
#> 7 4.1762987 4.2096551 -6.2340132
#> 8 -4.3842081 -3.2591881 6.3675177
#> 9 -5.5381760 0.7380923 2.5480159
#> 10 -2.0763275 -5.6100775 6.4995706
#> 11 -3.2723764 -9.8393733 10.9248190
# (2) the raw residual plots using the object "fit1"
plot(x = fit1, item.loc = 113, type = "icc", ci.method = "wald", layout.col = 2, ylim.sr.adjust = TRUE)
#> interval point total obs.freq.0 obs.freq.1 obs.freq.2
#> 1 [0.3564295,0.5199582) 0.3564295 1 1 0 0
#> 2 [0.5199582,0.6834869) 0.6081321 5 3 2 0
#> 3 [0.6834869,0.8470155) 0.7400138 15 5 10 0
#> 4 [0.8470155,1.010544) 0.8866202 55 5 15 34
#> 5 [1.010544,1.174073) 1.0821064 133 6 40 53
#> 6 [1.174073,1.337602) 1.2832293 260 8 37 153
#> 7 [1.337602,1.50113) 1.4747336 98 0 23 57
#> 8 [1.50113,1.664659) 1.5311735 306 0 7 85
#> 9 [1.664659,1.828188) 1.7632607 418 0 0 145
#> 10 [1.828188,1.991716) 1.8577191 69 0 0 0
#> 11 [1.991716,2.155245] 2.1021956 263 0 0 0
#> obs.freq.3 obs.prop.0 obs.prop.1 obs.prop.2 obs.prop.3 exp.prob.0
#> 1 0 1.00000000 0.00000000 0.0000000 0.00000000 0.196511833
#> 2 0 0.60000000 0.40000000 0.0000000 0.00000000 0.130431315
#> 3 0 0.33333333 0.66666667 0.0000000 0.00000000 0.102631449
#> 4 1 0.09090909 0.27272727 0.6181818 0.01818182 0.077129446
#> 5 34 0.04511278 0.30075188 0.3984962 0.25563910 0.051169395
#> 6 62 0.03076923 0.14230769 0.5884615 0.23846154 0.032494074
#> 7 18 0.00000000 0.23469388 0.5816327 0.18367347 0.020534959
#> 8 214 0.00000000 0.02287582 0.2777778 0.69934641 0.017857642
#> 9 273 0.00000000 0.00000000 0.3468900 0.65311005 0.009866868
#> 10 69 0.00000000 0.00000000 0.0000000 1.00000000 0.007690015
#> 11 263 0.00000000 0.00000000 0.0000000 1.00000000 0.003962699
#> exp.prob.1 exp.prob.2 exp.prob.3 raw.rsd.0 raw.rsd.1 raw.rsd.2
#> 1 0.31299790 0.3472692 0.1432210 0.803488167 -0.312997903 -0.34726922
#> 2 0.27025065 0.3900531 0.2092649 0.469568685 0.129749354 -0.39005312
#> 3 0.24407213 0.4043226 0.2489738 0.230701885 0.422594537 -0.40432265
#> 4 0.21379299 0.4127992 0.2962784 0.013779645 0.058934282 0.20538261
#> 5 0.17398130 0.4120662 0.3627831 -0.006056613 0.126770584 -0.01356995
#> 6 0.13632441 0.3983962 0.4327853 -0.001724843 0.005983284 0.19006531
#> 7 0.10523862 0.3756891 0.4985373 -0.020534959 0.129455259 0.20594357
#> 8 0.09707782 0.3676106 0.5174539 -0.017857642 -0.074201998 -0.08983281
#> 9 0.06836048 0.3299158 0.5918569 -0.009866868 -0.068360484 0.01697418
#> 10 0.05880602 0.3132481 0.6202558 -0.007690015 -0.058806016 -0.31324812
#> 11 0.03912356 0.2690653 0.6878484 -0.003962699 -0.039123555 -0.26906531
#> raw.rsd.3 se.0 se.1 se.2 se.3 std.rsd.0
#> 1 -0.14322104 0.397359953 0.46371351 0.47610220 0.35029812 2.0220663
#> 2 -0.20926492 0.150611412 0.19860274 0.21813376 0.18191928 3.1177497
#> 3 -0.24897378 0.078357401 0.11090564 0.12671381 0.11165000 2.9442258
#> 4 -0.27809653 0.035974863 0.05528201 0.06638675 0.06156999 0.3830354
#> 5 -0.10714402 0.019106171 0.03287157 0.04267975 0.04169091 -0.3169978
#> 6 -0.19432375 0.010996190 0.02128019 0.03036171 0.03072722 -0.1568583
#> 7 -0.31486387 0.014326112 0.03099761 0.04892172 0.05050741 -1.4333937
#> 8 0.18189246 0.007570744 0.01692484 0.02756294 0.02856568 -2.3587698
#> 9 0.06125317 0.004834464 0.01234350 0.02299737 0.02403956 -2.0409436
#> 10 0.37974416 0.010516294 0.02832213 0.05583668 0.05842604 -0.7312476
#> 11 0.31215156 0.003873963 0.01195570 0.02734578 0.02857270 -1.0229057
#> std.rsd.1 std.rsd.2 std.rsd.3
#> 1 -0.6749812 -0.7294006 -0.4088547
#> 2 0.6533110 -1.7881373 -1.1503175
#> 3 3.8103971 -3.1908333 -2.2299488
#> 4 1.0660662 3.0937290 -4.5167547
#> 5 3.8565422 -0.3179482 -2.5699613
#> 6 0.2811669 6.2600333 -6.3241558
#> 7 4.1762987 4.2096551 -6.2340132
#> 8 -4.3842081 -3.2591881 6.3675177
#> 9 -5.5381760 0.7380923 2.5480159
#> 10 -2.0763275 -5.6100775 6.4995706
#> 11 -3.2723764 -9.8393733 10.9248190
# (3) the standardized residual plots using the object "fit1"
plot(x = fit1, item.loc = 113, type = "sr", ci.method = "wald", layout.col = 4, ylim.sr.adjust = TRUE)
#> interval point total obs.freq.0 obs.freq.1 obs.freq.2
#> 1 [0.3564295,0.5199582) 0.3564295 1 1 0 0
#> 2 [0.5199582,0.6834869) 0.6081321 5 3 2 0
#> 3 [0.6834869,0.8470155) 0.7400138 15 5 10 0
#> 4 [0.8470155,1.010544) 0.8866202 55 5 15 34
#> 5 [1.010544,1.174073) 1.0821064 133 6 40 53
#> 6 [1.174073,1.337602) 1.2832293 260 8 37 153
#> 7 [1.337602,1.50113) 1.4747336 98 0 23 57
#> 8 [1.50113,1.664659) 1.5311735 306 0 7 85
#> 9 [1.664659,1.828188) 1.7632607 418 0 0 145
#> 10 [1.828188,1.991716) 1.8577191 69 0 0 0
#> 11 [1.991716,2.155245] 2.1021956 263 0 0 0
#> obs.freq.3 obs.prop.0 obs.prop.1 obs.prop.2 obs.prop.3 exp.prob.0
#> 1 0 1.00000000 0.00000000 0.0000000 0.00000000 0.196511833
#> 2 0 0.60000000 0.40000000 0.0000000 0.00000000 0.130431315
#> 3 0 0.33333333 0.66666667 0.0000000 0.00000000 0.102631449
#> 4 1 0.09090909 0.27272727 0.6181818 0.01818182 0.077129446
#> 5 34 0.04511278 0.30075188 0.3984962 0.25563910 0.051169395
#> 6 62 0.03076923 0.14230769 0.5884615 0.23846154 0.032494074
#> 7 18 0.00000000 0.23469388 0.5816327 0.18367347 0.020534959
#> 8 214 0.00000000 0.02287582 0.2777778 0.69934641 0.017857642
#> 9 273 0.00000000 0.00000000 0.3468900 0.65311005 0.009866868
#> 10 69 0.00000000 0.00000000 0.0000000 1.00000000 0.007690015
#> 11 263 0.00000000 0.00000000 0.0000000 1.00000000 0.003962699
#> exp.prob.1 exp.prob.2 exp.prob.3 raw.rsd.0 raw.rsd.1 raw.rsd.2
#> 1 0.31299790 0.3472692 0.1432210 0.803488167 -0.312997903 -0.34726922
#> 2 0.27025065 0.3900531 0.2092649 0.469568685 0.129749354 -0.39005312
#> 3 0.24407213 0.4043226 0.2489738 0.230701885 0.422594537 -0.40432265
#> 4 0.21379299 0.4127992 0.2962784 0.013779645 0.058934282 0.20538261
#> 5 0.17398130 0.4120662 0.3627831 -0.006056613 0.126770584 -0.01356995
#> 6 0.13632441 0.3983962 0.4327853 -0.001724843 0.005983284 0.19006531
#> 7 0.10523862 0.3756891 0.4985373 -0.020534959 0.129455259 0.20594357
#> 8 0.09707782 0.3676106 0.5174539 -0.017857642 -0.074201998 -0.08983281
#> 9 0.06836048 0.3299158 0.5918569 -0.009866868 -0.068360484 0.01697418
#> 10 0.05880602 0.3132481 0.6202558 -0.007690015 -0.058806016 -0.31324812
#> 11 0.03912356 0.2690653 0.6878484 -0.003962699 -0.039123555 -0.26906531
#> raw.rsd.3 se.0 se.1 se.2 se.3 std.rsd.0
#> 1 -0.14322104 0.397359953 0.46371351 0.47610220 0.35029812 2.0220663
#> 2 -0.20926492 0.150611412 0.19860274 0.21813376 0.18191928 3.1177497
#> 3 -0.24897378 0.078357401 0.11090564 0.12671381 0.11165000 2.9442258
#> 4 -0.27809653 0.035974863 0.05528201 0.06638675 0.06156999 0.3830354
#> 5 -0.10714402 0.019106171 0.03287157 0.04267975 0.04169091 -0.3169978
#> 6 -0.19432375 0.010996190 0.02128019 0.03036171 0.03072722 -0.1568583
#> 7 -0.31486387 0.014326112 0.03099761 0.04892172 0.05050741 -1.4333937
#> 8 0.18189246 0.007570744 0.01692484 0.02756294 0.02856568 -2.3587698
#> 9 0.06125317 0.004834464 0.01234350 0.02299737 0.02403956 -2.0409436
#> 10 0.37974416 0.010516294 0.02832213 0.05583668 0.05842604 -0.7312476
#> 11 0.31215156 0.003873963 0.01195570 0.02734578 0.02857270 -1.0229057
#> std.rsd.1 std.rsd.2 std.rsd.3
#> 1 -0.6749812 -0.7294006 -0.4088547
#> 2 0.6533110 -1.7881373 -1.1503175
#> 3 3.8103971 -3.1908333 -2.2299488
#> 4 1.0660662 3.0937290 -4.5167547
#> 5 3.8565422 -0.3179482 -2.5699613
#> 6 0.2811669 6.2600333 -6.3241558
#> 7 4.1762987 4.2096551 -6.2340132
#> 8 -4.3842081 -3.2591881 6.3675177
#> 9 -5.5381760 0.7380923 2.5480159
#> 10 -2.0763275 -5.6100775 6.4995706
#> 11 -3.2723764 -9.8393733 10.9248190