Skip to contents

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)

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.

Value

A list with following entries:

person

Data frame with person or group parameters

data_adjeps

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

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

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 )
}