| Pfit | R Documentation |
Compute the person fit statistics lz, lz*, infit and outfit for the 1-PL, 2-PL, 3-PL, 4-PL model, the GPCM and mixed tests, at the person estimates of PP_4pl(), PP_gpcm() or PPall().
Pfit(pp, fitindices = c("lz", "lzstar", "infit", "outfit"), SE = FALSE)
## S3 method for class 'ppeo'
Pfit(pp, fitindices = c("lz", "lzstar", "infit", "outfit"), SE = FALSE)
## Default S3 method:
Pfit(pp, fitindices = c("lz", "lzstar", "infit", "outfit"), SE = FALSE)
## S3 method for class 'PPfit'
print(x, digits = 4, ...)
## S3 method for class 'PPfit'
summary(object, alpha = 0.05, digits = 4, ...)
pp |
An estimation object, the result of |
fitindices |
Character vector of the desired person fit statistics, any of |
SE |
Logical: if |
x, object |
An object of class |
digits |
Number of significant digits to print. |
... |
Further arguments, passed to |
alpha |
Significance level: persons with |
All statistics are computed at the estimate \hat\theta of each person, over the items the person answered (missing responses are left out of every sum). With the observed response x_i, the expected score E_i, its variance V_i and fourth central moment C_i of item i, the residual is Y_i = x_i - E_i, and for the n answered items:
infit (weighted mean square, Wright & Masters, 1982): \sum Y_i^2 / \sum V_i, with variance q^2 = \sum (C_i - V_i^2) / (\sum V_i)^2.
outfit (unweighted mean square): \sum (Y_i^2 / V_i) / n, with variance q^2 = \sum (C_i / V_i^2) / n^2 - 1/n.
Both mean squares MS are standardised by the Wilson-Hilferty transformation t = (MS^{1/3} - 1) (3/q) + q/3. chisq is \sum Y_i^2 / V_i with df = n - 1 and the p-value of the \chi^2 distribution.
lz (Drasgow, Levine & Williams, 1985): the log-likelihood l_0 = \sum \log P_i(x_i), standardised by its expectation and variance under the model, (l_0 - \sum E \log P_i) / \sqrt{\sum Var \log P_i}. lz_unst is l_0 / n.
lz* (Snijders, 2001) corrects lz for the estimated \theta: with the item information I, c_n = \sum Cov(\log P_i, s_i) / I (s_i the score of item i) and the term r_0 of the estimating equation (mle: 0, wle: J / (2I), map: (\mu - \theta) / \sigma^2), lz* = (l_0 - \sum E \log P_i + c_n r_0) / \sqrt{\sum Var \log P_i - c_n^2 I}. For dichotomous items this is Snijders' lz*, for polytomous items and mixed tests the generalisation of Sinharay (2016).
Person fit needs an estimate of type "mle", "wle" or "map". Persons without an estimate (status other than "ok" in pp$estimates, e.g. an extreme score with mle) get NA. With a single answered dichotomous item lz* is not defined (the corrected variance is 0) and the \chi^2 p-value has no degree of freedom; both are NA.
With SE = TRUE every statistic gets a jackknife standard error: for each answered item j, \theta is estimated without item j (the leave-one-out estimates of JKpp()) and the statistic f_{(-j)} is computed on the remaining items. With L answered items and m leave-one-out samples with a finite estimate, SE = (L - 1) \sqrt{\sum_j (f_{(-j)} - \bar f)^2 / (m (m - 1))}, which is \sqrt{(L-1)/L \sum_j (f_{(-j)} - \bar f)^2} when no sample is left out (Efron & Stein, 1981).
Up to version 0.6.4, lz* summed over all items also for persons with missing responses, the GPCM infit and outfit used the observed instead of the possible categories and ignored the slopes, mixed tests were not supported, the jackknife standard error of lz used the prior SD as variance, and all results were rounded. The responses were passed again as first argument respm; since 1.0.0 they are taken from pp, and respm is gone: call Pfit(res) instead of Pfit(respm = X, pp = res).
An object of class PPfit: a list with one matrix per statistic (persons in rows, in the order of the response matrix):
lz: lz, lz_unst
lzstar: lzstar
infit: infit (mean square), in_t, in_chisq, in_df, in_pv
outfit: outfit (mean square), ou_t, ou_chisq, ou_df, ou_pv
with SE = TRUE also lz_se, lzs_se, in_se, ou_se.
summary() gives, per statistic, the number of persons, mean, SD, range and the number of persons flagged at level alpha.
Jan Steinfeld, Manuel Reif
Armstrong, R. D., Stoumbos, Z. G., Kung, M. T. & Shi, M. (2007). On the performance of the lz person-fit statistic. Practical Assessment, Research & Evaluation, 12(16).
De La Torre, J., & Deng, W. (2008). Improving Person-Fit Assessment by Correcting the Ability Estimate and Its Reference Distribution. Journal of Educational Measurement, 45(2), 159-177.
Drasgow, F., Levine, M. V. & Williams, E. A. (1985) Appropriateness measurement with polychotomous item response models and standardized indices. British Journal of Mathematical and Statistical Psychology, 38(1), 67–86.
Efron, B., & Stein, C. (1981). The jackknife estimate of variance. The Annals of Statistics, 9(3), 586-596.
Karabatsos, G. (2003) Comparing the Aberrant Response Detection Performance of Thirty-Six Person-Fit Statistics. Applied Measurement In Education, 16(4), 277–298.
Magis, D., Raiche, G. & Beland, S. (2012) A didactic presentation of Snijders's lz* index of person fit with emphasis on response model selection and ability estimation. Journal of Educational and Behavioral Statistics, 37(1), 57–81.
Meijer, R. R. & Sijtsma, K. (2001) Methodology review: Evaluating person fit. Applied Psychological Measurement, 25(2), 107–135.
Molenaar, I. W. & Hoijtink, H. (1990) The many null distributions of person fit indices. Psychometrika, 55(1), 75–106.
Reise, S. P. (1990). A comparison of item-and person-fit methods of assessing model-data fit in IRT. Applied Psychological Measurement, 14(2), 127-137.
Sinharay, S. (2016). Asymptotically correct standardization of person-fit statistics beyond dichotomous items. Psychometrika, 81(4), 992–1013.
Snijders, T. A. B. (2001) Asymptotic null distribution of person fit statistics with estimated person parameter. Psychometrika, 66(3), 331–342.
Wright, B. D. & Masters, G. N. (1990). Computation of OUTFIT and INFIT Statistics. Rasch Measurement Transactions, 3:4, 84-85.
Wright, B. D., & Masters, G. N. (1982). Rating Scale Analysis. Rasch Measurement. MESA Press, 5835 S. Kimbark Avenue, Chicago, IL 60637.
PPall, PP_4pl, PP_gpcm, PPass, JKpp
## dichotomous items
set.seed(1337)
diffpar <- seq(-3, 3, length = 15)
sl <- round(runif(15, 0.5, 1.5), 2)
la <- round(runif(15, 0, 0.25), 2)
awm <- sim_4pl(beta = diffpar, alpha = sl, lowerA = la, upperA = rep(1, 15),
theta = rnorm(100))
# 3PL, WLE
res3plwle <- PP_4pl(respm = awm, thres = diffpar, slopes = sl, lowerA = la, type = "wle")
# the responses are taken from the estimation object
fit3pl <- Pfit(res3plwle, fitindices = c("lz", "lzstar", "infit", "outfit"))
head(fit3pl$lzstar)
summary(fit3pl)
# with missing responses and jackknife standard errors
awm_na <- awm
awm_na[sample(length(awm), 300)] <- NA
res3plna <- PP_4pl(respm = awm_na, thres = diffpar, slopes = sl, lowerA = la, type = "wle")
head(Pfit(res3plna, fitindices = c("lz", "infit"), SE = TRUE)$lz)
## GPCM
thres <- rbind(0, c(-1, -0.5, 0), c(0.5, 0.8, 1), c(1.5, 2, 2.5))
slg <- c(0.8, 1.2, 1)
respg <- sim_gpcm(thres = thres, alpha = slg, theta = rnorm(50))
resgwle <- PP_gpcm(respm = respg, thres = thres, slopes = slg, type = "wle")
summary(Pfit(resgwle))
## GPCM and 4PL mixed
THRESx <- matrix(c(-2, -1.23, 1.11, 3.48, 1, 2, -1, -0.2, 0.5, 1.3, -0.8, 1.5), nrow = 2)
THRESx[2, 1:3] <- NA
slm <- c(0.5, 1, 1.5, 1.1, 1, 0.98)
lam <- c(0.02, 0.1, 0, 0, 0, 0)
uam <- c(0.97, 0.91, 1, 1, 1, 1)
awmatrix <- matrix(c(1, 0, 1, 0, 1, 1, 1, 0, 0, 1,
2, 0, 0, 0, 0, 0, 0, 0, 0, 1,
1, 2, 2, 1, 1, 1, 1, 0, 0, 1), byrow = TRUE, nrow = 5)
resmixed <- PPall(respm = awmatrix, thres = THRESx, slopes = slm, lowerA = lam,
upperA = uam, type = "wle")
Pfit(resmixed, fitindices = c("lz", "lzstar"))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.