Learn R Programming

sirt (version 4.1-15)

mle.pcm.group: Maximum Likelihood Estimation of Person or Group Parameters in the Generalized Partial Credit Model

Description

This function estimates person or group parameters in the partial credit model (see Details).

Usage

mle.pcm.group(dat, b, a=rep(1, ncol(dat)), group=NULL,
    pid=NULL, adj_eps=0.3, conv=1e-04, maxiter=30)

Value

A list with following entries:

person

Data frame with person or group parameters

data_adjeps

Modified dataset according to the \(\varepsilon\) adjustment.

Arguments

dat

A numeric \(N \times I\) matrix

b

Matrix with item thresholds

a

Vector of item slopes

group

Vector of group identifiers

pid

Vector of person identifiers

adj_eps

Numeric value which is used in \(\varepsilon\) adjustment of the likelihood. A value of zero (or a very small \(\varepsilon>0\)) corresponds to the usual maximum likelihood estimate.

conv

Convergence criterion

maxiter

Maximum number of iterations

Details

It is assumed that the generalized partial credit model holds. In case one estimates a person parameter \(\theta_p\), the log-likelihood is maximized and the following estimating equation results: (see Penfield & Bergeron, 2005): $$ 0=( \log L )'=\sum_i a_i \cdot [ \tilde{x}_{pi} - E(X_{pi} | \theta_p ) ] $$ where \(E(X_{pi} | \theta_p )\) denotes the expected item response conditionally on \(\theta_p\).

With the method of \(\varepsilon\)-adjustment (Bertoli-Barsotti & Punzo, 2012; Bertoli-Barsotti, Lando & Punzo, 2014), the observed item responses \(x_{pi}\) are transformed such that no perfect scores arise and bias is reduced. If \(S_p\) is the sum score of person \(p\) and \(M_p\) the maximum score of this person, then the transformed sum scores \(\tilde{S}_p\) are $$ \tilde{S}_p=\varepsilon + \frac{M_p - 2 \varepsilon}{M_p} S_p$$ However, the adjustment is directly conducted on item responses to also handle the case of the generalized partial credit model with item slope parameters different from 1.

In case one estimates a group parameter \(\theta_g\), the following estimating equation is used: $$ 0=(\log L )'=\sum_p \sum_i a_i \cdot [ \tilde{x}_{pgi} - E(X_{pgi} | \theta_g ) ] $$ where persons \(p\) are nested within a group \(g\). The \(\varepsilon\)-adjustment is then performed at the group level, not at the individual level.

References

Bertoli-Barsotti, L., & Punzo, A. (2012). Comparison of two bias reduction techniques for the Rasch model. Electronic Journal of Applied Statistical Analysis, 5, 360-366.

Bertoli-Barsotti, L., Lando, T., & Punzo, A. (2014). Estimating a Rasch Model via fuzzy empirical probability functions. In D. Vicari, A. Okada, G. Ragozini & C. Weihs (Eds.). Analysis and Modeling of Complex Data in Behavioral and Social Sciences, Springer.

Penfield, R. D., & Bergeron, J. M. (2005). Applying a weighted maximum likelihood latent trait estimator to the generalized partial credit model. Applied Psychological Measurement, 29, 218-233.

Examples

Run this code
if (FALSE) {
#############################################################################
# EXAMPLE 1: Estimation of a group parameter for only one item per group
#############################################################################

data(data.si01)
dat <- data.si01
# item parameter estimation (partial credit model) in TAM
library(TAM)
mod <- TAM::tam.mml( dat[,2:3], irtmodel="PCM")
# extract item difficulties
b <- matrix( mod$xsi$xsi, nrow=2, byrow=TRUE )
# groupwise estimation
res1 <- sirt::mle.pcm.group( dat[,2:3], b=b, group=dat$idgroup )
# individual estimation
res2 <- sirt::mle.pcm.group( dat[,2:3], b=b  )

#############################################################################
# EXAMPLE 2: Data Reading data.read
#############################################################################

data(data.read)
# estimate Rasch model
mod <- sirt::rasch.mml2( data.read )
score <- rowSums( data.read )
data.read <- data.read[ order(score), ]
score <- score[ order(score) ]
# compare different epsilon-adjustments
res30 <- sirt::mle.pcm.group( data.read, b=matrix( mod$item$b, 12, 1 ),
               adj_eps=.3 )$person
res10 <- sirt::mle.pcm.group( data.read, b=matrix( mod$item$b, 12, 1 ),
             adj_eps=.1 )$person
res05 <- sirt::mle.pcm.group( data.read, b=matrix( mod$item$b, 12, 1 ),
              adj_eps=.05 )$person
# plot different scorings
plot( score, res05$theta, type="l", xlab="Raw score", ylab=expression(theta[epsilon]),
         main="Scoring with different epsilon-adjustments")
lines( score, res10$theta, col=2, lty=2 )
lines( score, res30$theta, col=4, lty=3 )
}

Run the code above in your browser using DataLab