mle.pcm.group.Rd
This function estimates person or group parameters in the partial credit model (see Details).
mle.pcm.group(dat, b, a=rep(1, ncol(dat)), group=NULL, pid=NULL, adj_eps=0.3, conv=1e-04, maxiter=30)
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 |
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.
A list with following entries:
Data frame with person or group parameters
Modified dataset according to the \(\varepsilon\) adjustment.
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.
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 ) }