Description Usage Arguments Details Value Author(s) References See Also Examples

This command returns the value of the Kullback-Leibler (KL) or posterior Kullback-Leibler (KLP) for a given item, an item bank and a set of previously administered items.

1 2 3 4 |

`itemBank` |
numeric: a suitable matrix of item parameters. See |

`item` |
numeric: the item (referred to as its rank in the item bank) for which the KL or KLP must be computed. |

`x` |
numeric: a vector of item responses, coded as 0 or 1 only (for dichotomous items) or from 0 to the number of response categories minus one (for polytomous items). |

`it.given` |
numeric: a matrix with one row per item and four columns, with the values of the discrimination, the difficulty, the pseudo-guessing and the inattention parameters (in this order). The number of rows of |

`model` |
either |

`theta` |
either a numeric value for provisional ability estimate or |

`lower` |
numeric: the lower bound for numercal integration (default is -4). |

`upper` |
numeric: the upper bound for numercal integration (default is 4). |

`nqp` |
numeric: the number of quadrature points (default is 33). |

`type` |
character: the type of information to be computed. Possible values are |

`priorDist` |
character: the prior ability distribution. Possible values are |

`priorPar` |
numeric: a vector of two components with the prior parameters. If |

`D` |
numeric: the metric constant. Default is |

`X` |
either a vector of numeric values or |

`lik` |
either a vector of numeric values or |

Kullback-Leibler information can be used as a rule for selecting the next item in the CAT process (Barrada, Olea, Ponsoda and Abad, 2010; Chang and Ying, 1996), both with dichotomous and polytomous IRT models. This command serves as a subroutine for the `nextItem`

function.

Dichotomous IRT models are considered whenever `model`

is set to `NULL`

(default value). In this case, `itemBank`

must be a matrix with one row per item and four columns, with the values of the discrimination, the difficulty, the pseudo-guessing and the inattention parameters (in this order). These are the parameters of the four-parameter logistic (4PL) model (Barton and Lord, 1981).

Polytomous IRT models are specified by their respective acronym: `"GRM"`

for Graded Response Model, `"MGRM"`

for Modified Graded Response Model, `"PCM"`

for Partical Credit Model, `"GPCM"`

for Generalized Partial Credit Model, `"RSM"`

for Rating Scale Model and `"NRM"`

for Nominal Response Model. The `itemBank`

still holds one row per item, end the number of columns and their content depends on the model. See `genPolyMatrix`

for further information and illustrative examples of suitable polytomous item banks.

Under polytomous IRT models, let *k* be the number of administered items, and set *x_1, ..., x_k* as the provisional response pattern (where each response *x_l* takes values in *\{0, 1, ..., g_l\}*). Set *\hat{θ}_k* as the provisional ability estimate (with the first *k* responses) and let *j* be the item of interest (not previously administered). Set also *L(θ | x_1, ..., x_k) * as the likelihood function of the first *k* items and evaluated at *θ*. Set finally *P_{jt}(θ)* as the probability of answering response category *t* to item *j* for a given ability level *θ*. Then, Kullack-Leibler (KL) information is defined as

*KL_j(θ || \hat{θ}_k) = ∑_{t=0}^{g_j} \,P_{jt}(\hat{θ}_k) \,\log ≤ft( \frac{P_{jt}(\hat{θ}_k)}{P_{jt}(θ)}\right).*

In case of dichotomous IRT models, all *g_l* values reduce to 1, so that item responses *x_l* equal either 0 or 1. Set simply *P_j(θ)* as the probability of answering item *j* correctly for a given ability level *θ*. Then, KL information reduces to

*KL_j(θ || \hat{θ}) = P_j(\hat{θ}) \,\log ≤ft( \frac{P_j(\hat{θ}_k)}{P_j(θ)}\right) + [1-P_j(\hat{θ}_k)] \,\log ≤ft( \frac{1-P_j(\hat{θ}_k)}{1-P_j(θ)}\right).*

The quantity that is returned by this `KL`

function is either: the likelihood function weighted by Kullback-Leibler information (the KL value):

*KL_j(\hat{θ}_k) = \int KL_j(θ || \hat{θ}_k) \, L(θ | x_1, ..., x_k) \,dθ*

or the posterior function weighted by Kullback-Leibler information (the KLP value):

*KLP_j(\hat{θ}) = \int KL_j(θ || \hat{θ}_k) \, π(θ) \,L(θ | x_1, ..., x_k) \,dθ*

where *π(θ)* is the prior distribution of the ability level.

These integrals are approximated by the `integrate.catR`

function. The range of integration is set up
by the arguments `lower`

, `upper`

and `nqp`

, giving respectively the lower bound, the upper bound and the number of quadrature points. The default range goes from -4 to 4 with length 33 (that is, by steps of 0.25).

To speed up the computation, both the range of integration of values *θ* and the values of the likelihood function *L(θ)* can be directly provided to the function through the arguments `X`

and `lik`

. If `X`

is set to `NULL`

(default), the sequence of ability values for integration is determined by the arguments `lower`

, `upper`

and `nqp`

as explained above. If `lik`

is `NULL`

(default), it is also internally computed from an implementation of the likelihood function.

The provisional response pattern and the related item parameters are provided by the arguments `x`

and `it.given`

respectively. The target item (for which the KL information is computed) is given by its rank number in the item bank, through the `item`

argument.

An ability level estimate must be provided to compute KL and KLP information values. Either the value is specified through the `theta`

argument, or it is left equal to `NULL`

(default). In this case, ability estimate is computed internally by maximum likelihood, using the `thetaEst`

function with arguments `it.given`

and `x`

.

Note that the provisional response pattern `x`

can also be set to `NULL`

(which is useful when the number `nrItems`

of starting items is set to zero). In this case, `it.given`

must be a matrix with zero rows, such as e.g., `itemBank[NULL,]`

. In this very specific configuration, the likelihood function *L(θ | x_1, ..., x_k)* reduces to the constant value 1 on the whole *θ* range (that is, a uniform likelihood).

The argument `type`

defines the type of KL information to be computed. The default value, `"KL"`

, computes the usual Kullback-Leibler information, while the posterior Kullback-Leibler value is obtained with `type="KLP"`

. For the latter, the `priorDist`

and `priorPar`

arguments fix the prior ability distribution. The normal distribution is set up by `priorDist="norm"`

and then, `priorPar`

contains the mean and the standard deviation of the normal distribution. If `priorDist`

is `"unif"`

, then the uniform distribution is considered, and `priorPar`

fixes the lower and upper bounds of that uniform distribution. By default, the standard normal prior distribution is assumed. These arguments are ignored whenever `method`

is `"KL"`

.

The required KL or KLP value for the selected item.

David Magis

[email protected]

Juan Ramon Barrada

Department of Psychology and Sociology, Universidad Zaragoza, Spain

[email protected]

Barrada, J. R., Olea, J., Ponsoda, V., and Abad, F. J. (2010). A method for the comparison of item selection rules in computerized adaptive testing. *Applied Psychological Measurement*, *20*, 213-229. doi: 10.1177/0146621610370152

Barton, M.A., and Lord, F.M. (1981). *An upper asymptote for the three-parameter logistic item-response model*.
Research Bulletin 81-20. Princeton, NJ: Educational Testing Service.

Chang, H.-H., and Ying, Z. (1996). A global information approach to computerized adaptive testing. *Applied Psychological Measurement, 34*, 438-452. doi: 10.1177/014662169602000303

Haley, D.C. (1952). *Estimation of the dosage mortality relationship when the dose is subject to error*. Technical report no 15. Palo Alto, CA: Applied Mathematics and Statistics Laboratory, Stanford University.

Magis, D. and Barrada, J. R. (2017). Computerized Adaptive Testing with R: Recent Updates of the Package *catR*. *Journal of Statistical Software*, *Code Snippets*, *76(1)*, 1-18. doi: 10.18637/jss.v076.c01

Magis, D., and Raiche, G. (2012). Random Generation of Response Patterns under Computerized Adaptive Testing with the R Package *catR*. *Journal of Statistical Software*, *48 (8)*, 1-31. doi: 10.18637/jss.v048.i08

`integrate.catR`

, `nextItem`

, `genPolyMatrix`

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | ```
## Dichotomous models ##
# Loading the 'tcals' parameters
data(tcals)
# Selecting item parameters only
bank <- as.matrix(tcals[,1:4])
# Selection of two arbitrary items (15 and 20) of the
# 'tcals' data set
it.given <- bank[c(15, 20),]
# Creation of a response pattern
x <- c(0, 1)
# KL for item 1, ML estimate of ability computed
KL(bank, 1, x, it.given)
# Current (ML) ability estimate
theta <- thetaEst(it.given, x, method = "ML")
KL(bank, 1, x, it.given, theta = theta)
# WL ability estimate instead
theta <- thetaEst(it.given, x, method = "WL")
KL(bank, 1, x, it.given, theta = theta)
# KLP for item 1
KL(bank, 1, x, it.given, theta = theta, type = "KLP")
# KLP for item 1, different integration range
KL(bank, 1, x, it.given, theta = theta, type = "KLP", lower = -2, upper = 2, nqp = 20)
# KL for item 1, uniform prior distribution on the range [-2,2]
KL(bank, 1, x, it.given, theta = theta, type = "KLP", priorDist = "unif",
priorPar = c(-2, 2))
# Computation of likelihood function beforehand
L <- function(th, r, param)
prod(Pi(th, param)$Pi^r * (1 - Pi(th,param)$Pi)^(1 - r))
xx <- seq(from = -4, to = 4, length = 33)
y <- sapply(xx, L, x, it.given)
KL(bank, 1, x, it.given, theta = theta, X = xx, lik = y)
## Polytomous models ##
# Generation of an item bank under GRM with 100 items and at most 4 categories
m.GRM <- genPolyMatrix(100, 4, "GRM")
m.GRM <- as.matrix(m.GRM)
# Selection of two arbitrary items (15 and 20)
it.given <- m.GRM[c(15, 20),]
# Generation of a response pattern (true ability level 0)
x <- genPattern(0, it.given, model = "GRM")
# KL for item 1, ML estimate of ability computed
KL(m.GRM, 1, x, it.given, model = "GRM")
# Current (ML) ability estimate
theta <- thetaEst(it.given, x, method = "ML", model = "GRM")
KL(m.GRM, 1, x, it.given, theta = theta, model = "GRM")
# WL ability estimate instead
theta <- thetaEst(it.given, x, method = "WL", model = "GRM")
KL(m.GRM, 1, x, it.given, theta = theta, model = "GRM")
# KLP for item 1
KL(m.GRM, 1, x, it.given, theta = theta, model = "GRM", type = "KLP")
# KLP for item 1, different integration range
KL(m.GRM, 1, x, it.given, theta = theta, model = "GRM", type = "KLP", lower = -2,
upper = 2, nqp = 20)
# KL for item 1, uniform prior distribution on the range [-2,2]
KL(m.GRM, 1, x, it.given, theta = theta, model = "GRM", type = "KLP",
priorDist = "unif", priorPar = c(-2, 2))
# Loading the cat_pav data
data(cat_pav)
cat_pav <- as.matrix(cat_pav)
# Selection of two arbitrary items (15 and 20)
it.given <- cat_pav[c(15, 20),]
# Generation of a response pattern (true ability level 0)
x <- genPattern(0, it.given, model = "GPCM")
# KL for item 1, ML estimate of ability computed
KL(cat_pav, 1, x, it.given, model = "GPCM")
# Current (ML) ability estimate
theta <- thetaEst(it.given, x, method = "ML", model = "GPCM")
KL(cat_pav, 1, x, it.given, theta = theta, model = "GPCM")
# WL ability estimate instead
theta <- thetaEst(it.given, x, method = "WL", model = "GPCM")
KL(cat_pav, 1, x, it.given, theta = theta, model = "GPCM")
# KLP for item 1
KL(cat_pav, 1, x, it.given, theta = theta, model = "GPCM", type = "KLP")
# KLP for item 1, different integration range
KL(cat_pav, 1, x, it.given, theta = theta, model = "GPCM", type = "KLP", lower = -2,
upper = 2, nqp = 20)
# KL for item 1, uniform prior distribution on the range [-2,2]
KL(cat_pav, 1, x, it.given, theta = theta, model = "GPCM", type = "KLP",
priorDist = "unif", priorPar = c(-2, 2))
``` |

catR documentation built on July 28, 2018, 5:01 p.m.

Embedding an R snippet on your website

Add the following code to your website.

For more information on customizing the embed code, read Embedding Snippets.