rm.facets.Rd
This function estimates the unidimensional rater facets model (Lincare, 1994) and an extension to slopes (see Details; Robitzsch & Steinfeld, 2018). The estimation is conducted by an EM algorithm employing marginal maximum likelihood.
rm.facets(dat, pid=NULL, rater=NULL, Qmatrix=NULL, theta.k=seq(-9, 9, len=30), est.b.rater=TRUE, est.a.item=FALSE, est.a.rater=FALSE, rater_item_int=FALSE, est.mean=FALSE, tau.item.fixed=NULL, a.item.fixed=NULL, b.rater.fixed=NULL, a.rater.fixed=NULL, b.rater.center=2, a.rater.center=2, a.item.center=2, a_lower=.05, a_upper=10, reference_rater=NULL, max.b.increment=1, numdiff.parm=0.00001, maxdevchange=0.1, globconv=0.001, maxiter=1000, msteps=4, mstepconv=0.001, PEM=FALSE, PEM_itermax=maxiter) # S3 method for rm.facets summary(object, file=NULL, ...) # S3 method for rm.facets anova(object,...) # S3 method for rm.facets logLik(object,...) # S3 method for rm.facets IRT.irfprob(object,...) # S3 method for rm.facets IRT.factor.scores(object, type="EAP", ...) # S3 method for rm.facets IRT.likelihood(object,...) # S3 method for rm.facets IRT.posterior(object,...) # S3 method for rm.facets IRT.modelfit(object,...) # S3 method for IRT.modelfit.rm.facets summary(object, ...) ## function for processing data rm_proc_data( dat, pid, rater, rater_item_int=FALSE, reference_rater=NULL )
dat | Original data frame. Ratings on variables must be in rows, i.e. every row corresponds to a person-rater combination. |
---|---|
pid | Person identifier. |
rater | Rater identifier |
Qmatrix | An optional Q-matrix. If this matrix is not provided, then by default the ordinary scoring of categories (from 0 to the maximum score of \(K\)) is used. |
theta.k | A grid of theta values for the ability distribution. |
est.b.rater | Should the rater severities \(b_r\) be estimated? |
est.a.item | Should the item slopes \(a_i\) be estimated? |
est.a.rater | Should the rater slopes \(a_r\) be estimated? |
rater_item_int | Logical indicating whether rater-item-interactions should be modeled. |
est.mean | Optional logical indicating whether the mean of the trait distribution should be estimated. |
tau.item.fixed | Matrix with fixed \(\tau\) parameters. Non-fixed
parameters must be declared by |
a.item.fixed | Vector with fixed item discriminations |
b.rater.fixed | Vector with fixed rater intercept parameters |
a.rater.fixed | Vector with fixed rater discrimination parameters |
b.rater.center | Centering method for rater intercept parameters. The
value |
a.rater.center | Centering method for rater discrimination parameters. The
value |
a.item.center | Centering method for item discrimination parameters. The
value |
a_lower | Lower bound for \(a\) parameters |
a_upper | Upper bound for \(a\) parameters |
reference_rater | Identifier for rater as a reference rater for which a fixed rater mean of 0 and a fixed rater slope of 1 is assumed. |
max.b.increment | Maximum increment of item parameters during estimation |
numdiff.parm | Numerical differentiation step width |
maxdevchange | Maximum relative deviance change as a convergence criterion |
globconv | Maximum parameter change |
maxiter | Maximum number of iterations |
msteps | Maximum number of iterations during an M step |
mstepconv | Convergence criterion in an M step |
PEM | Logical indicating whether the P-EM acceleration should be applied (Berlinet & Roland, 2012). |
PEM_itermax | Number of iterations in which the P-EM method should be applied. |
object | Object of class |
file | Optional file name in which summary should be written. |
type | Factor score estimation method. Factor score types
|
... | Further arguments to be passed |
This function models ratings \(X_{pri}\) for person \(p\), rater \(r\) and item \(i\) and category \(k\) (see also Robitzsch & Steinfeld, 2018; Uto & Ueno, 2010; Wu, 2017) $$P( X_{pri}=k | \theta_p ) \propto \exp( a_i a_r q_{ik} \theta_p - q_{ik} b_r - \tau_{ik} ) \quad, \quad \theta_p \sim N( 0, \sigma^2 )$$ By default, the scores in the \(Q\) matrix are \(q_{ik}=k\). Item slopes \(a_i\) and rater slopes \(a_r\) are standardized such that their product equals one, i.e. \( \prod_i a_i=\prod_r a_r=1\).
A list with following entries:
Deviance
Information criteria and number of parameters
Data frame with item parameters
Data frame with rater parameters
Data frame with person parameters: EAP and corresponding standard errors
EAP reliability
Mean of the trait distribution
Standard deviation of the trait distribution
Grid of theta values
Fitted distribution at theta.k
values
Item parameters \(\tau_{ik}\)
Standard error of item parameters \(\tau_{ik}\)
Item slopes \(a_i\)
Standard error of item slopes \(a_i\)
Delta item parameter. See
pcm.conversion
.
Rater severity parameter \(b_r\)
Standard error of rater severity parameter \(b_r\)
Rater slope parameter \(a_r\)
Standard error of rater slope parameter \(a_r\)
Individual likelihood
Individual posterior distribution
Item probabilities at grid theta.k
Expected counts
Maximum number of categories
Processed data
Number of iterations
Item parameters for expanded dataset dat2
Further values
Berlinet, A. F., & Roland, C. (2012). Acceleration of the EM algorithm: P-EM versus epsilon algorithm. Computational Statistics & Data Analysis, 56(12), 4122-4137.
Linacre, J. M. (1994). Many-Facet Rasch Measurement. Chicago: MESA Press.
Robitzsch, A., & Steinfeld, J. (2018). Item response models for human ratings: Overview, estimation methods, and implementation in R. Psychological Test and Assessment Modeling, 60(1), 101-139.
Uto, M., & Ueno, M. (2016). Item response theory for peer assessment. IEEE Transactions on Learning Technologies, 9(2), 157-170.
Wu, M. (2017). Some IRT-based analyses for interpreting rater effects. Psychological Test and Assessment Modeling, 59(4), 453-470.
If the trait standard deviation sigma
strongly
differs from 1, then a user should investigate the sensitivity
of results using different theta integration points theta.k
.
See also the TAM package for the estimation of more complicated facet models.
See rm.sdt
for estimating a hierarchical rater model.
############################################################################# # EXAMPLE 1: Partial Credit Model and Generalized partial credit model # 5 items and 1 rater ############################################################################# data(data.ratings1) dat <- data.ratings1 # select rater db01 dat <- dat[ paste(dat$rater)=="db01", ] #**** Model 1: Partial Credit Model mod1 <- sirt::rm.facets( dat[, paste0( "k",1:5) ], pid=dat$idstud ) #**** Model 2: Generalized Partial Credit Model mod2 <- sirt::rm.facets( dat[, paste0( "k",1:5) ], pid=dat$idstud, est.a.item=TRUE) summary(mod1) summary(mod2) if (FALSE) { ############################################################################# # EXAMPLE 2: Facets Model: 5 items, 7 raters ############################################################################# data(data.ratings1) dat <- data.ratings1 #**** Model 1: Partial Credit Model: no rater effects mod1 <- sirt::rm.facets( dat[, paste0( "k",1:5) ], rater=dat$rater, pid=dat$idstud, est.b.rater=FALSE ) #**** Model 2: Partial Credit Model: intercept rater effects mod2 <- sirt::rm.facets( dat[, paste0( "k",1:5) ], rater=dat$rater, pid=dat$idstud) # extract individual likelihood lmod1 <- IRT.likelihood(mod1) str(lmod1) # likelihood value logLik(mod1) # extract item response functions pmod1 <- IRT.irfprob(mod1) str(pmod1) # model comparison anova(mod1,mod2) # absolute and relative model fit smod1 <- IRT.modelfit(mod1) summary(smod1) smod2 <- IRT.modelfit(mod2) summary(smod2) IRT.compareModels( smod1, smod2 ) # extract factor scores (EAP is the default) IRT.factor.scores(mod2) # extract WLEs IRT.factor.scores(mod2, type="WLE") #**** Model 2a: compare results with TAM package # Results should be similar to Model 2 library(TAM) mod2a <- TAM::tam.mml.mfr( resp=dat[, paste0( "k",1:5) ], facets=dat[, "rater", drop=FALSE], pid=dat$pid, formulaA=~ item*step + rater ) #**** Model 2b: Partial Credit Model: some fixed parameters # fix rater parameters for raters 1, 4 and 5 b.rater.fixed <- rep(NA,7) b.rater.fixed[ c(1,4,5) ] <- c(1,-.8,0) # fixed parameters # fix item parameters of first and second item tau.item.fixed <- round( mod2$tau.item, 1 ) # use parameters from mod2 tau.item.fixed[ 3:5, ] <- NA # free item parameters of items 3, 4 and 5 mod2b <- sirt::rm.facets( dat[, paste0( "k",1:5) ], rater=dat$rater, b.rater.fixed=b.rater.fixed, tau.item.fixed=tau.item.fixed, est.mean=TRUE, pid=dat$idstud) summary(mod2b) #**** Model 3: estimated rater slopes mod3 <- sirt::rm.facets( dat[, paste0( "k",1:5) ], rater=dat$rater, est.a.rater=TRUE) #**** Model 4: estimated item slopes mod4 <- sirt::rm.facets( dat[, paste0( "k",1:5) ], rater=dat$rater, pid=dat$idstud, est.a.item=TRUE) #**** Model 5: estimated rater and item slopes mod5 <- sirt::rm.facets( dat[, paste0( "k",1:5) ], rater=dat$rater, pid=dat$idstud, est.a.rater=TRUE, est.a.item=TRUE) summary(mod1) summary(mod2) summary(mod2a) summary(mod3) summary(mod4) summary(mod5) #**** Model 5a: Some fixed parameters in Model 5 # fix rater b parameters for raters 1, 4 and 5 b.rater.fixed <- rep(NA,7) b.rater.fixed[ c(1,4,5) ] <- c(1,-.8,0) # fix rater a parameters for first four raters a.rater.fixed <- rep(NA,7) a.rater.fixed[ c(1,2,3,4) ] <- c(1.1,0.9,.85,1) # fix item b parameters of first item tau.item.fixed <- matrix( NA, nrow=5, ncol=3 ) tau.item.fixed[ 1, ] <- c(-2,-1.5, 1 ) # fix item a parameters a.item.fixed <- rep(NA,5) a.item.fixed[ 1:4 ] <- 1 # estimate model mod5a <- sirt::rm.facets( dat[, paste0( "k",1:5) ], rater=dat$rater, pid=dat$idstud, est.a.rater=TRUE, est.a.item=TRUE, tau.item.fixed=tau.item.fixed, b.rater.fixed=b.rater.fixed, a.rater.fixed=a.rater.fixed, a.item.fixed=a.item.fixed, est.mean=TRUE) summary(mod5a) #**** Model 6: Estimate rater model with reference rater 'db03' mod6 <- sirt::rm.facets( dat[, paste0( "k",1:5) ], rater=dat$rater, est.a.item=TRUE, est.a.rater=TRUE, pid=dat$idstud, reference_rater="db03" ) summary(mod6) #**** Model 7: Modelling rater-item-interactions mod7 <- sirt::rm.facets( dat[, paste0( "k",1:5) ], rater=dat$rater, est.a.item=FALSE, est.a.rater=TRUE, pid=dat$idstud, reference_rater="db03", rater_item_int=TRUE) summary(mod7) }