This function uses a jackknife approach to compute person parameters. The jackknife ability measure is based on primarily estimated models (PP_4pl()
, PP_gpcm()
or PPall()
) - so the function is applied on the estimation objects, and jackknifed ability measures are returned.
JKpp(estobj, ...) # S3 method for fourpl JKpp( estobj, cmeth = "mean", maxsteps = 500, exac = 0.001, fullmat = FALSE, ctrl = list(), ... ) # S3 method for gpcm JKpp( estobj, cmeth = "mean", maxsteps = 500, exac = 0.001, fullmat = FALSE, ctrl = list(), ... ) # S3 method for gpcm4pl JKpp( estobj, cmeth = "mean", maxsteps = 500, exac = 0.001, fullmat = FALSE, ctrl = list(), ... ) # S3 method for jk print(x, ...) # S3 method for jk summary(object, nrowmax = 15, ...)
estobj | An object which originates from using |
---|---|
... | More input. |
cmeth | Choose the centering method, to summarize the n jackknife results to one single ability estimate. There are three valid entries: "mean", "median" and "AMT" (see Details for further description). |
maxsteps | The maximum number of steps the NR Algorithm will take. |
exac | How accurate are the estimates supposed to be? Default is 0.001. |
fullmat | Default = FALSE. If TRUE, the function returns the whole jackknife matrix, which is the basis for the jackknife estimator. |
ctrl | More controls |
x | an object of class |
object | An object of class |
nrowmax | When printing the matrix of estimates - how many rows should be shown? Default = 15. |
Please use the Jackknife Standard-Error output with caution! It is implemented as suggested in Wainer and Wright (1980), but the results seem a bit strange, because the JK-SE is supposed to overestimate the SE compared to the MLE-SE. Actually, in all examples an underestimation of the SE was observed compared to the MLE/WLE-SE!
AMT-robustified jackknife: When choosing cmeth = AMT
, the jackknife ability subsample estimates and the original supplied ability estimate are combined to a single jackknife-ability value by the Sine M-estimator. The AMT (or Sine M-estimator) is one of the winners in the Princeton Robustness Study of 1972. To get a better idea how the estimation process works, take a closer look to the paper which is mentioned below (Wainer & Wright, 1980).
Wainer, H., & Wright, B. D. (1980). Robust estimation of ability in the Rasch model. Psychometrika, 45(3), 373-391.
Manuel Reif
################# Jackknife ################################################### ### 4 PL model ###### ### data creation ########## set.seed(1623) # intercepts diffpar <- seq(-3,3,length=12) # slope parameters sl <- round(runif(12,0.5,1.5),2) la <- round(runif(12,0,0.25),2) ua <- round(runif(12,0.8,1),2) # response matrix abpar <- rnorm(10,0,1.7) awm <- sim_4pl(beta = diffpar,alpha = sl,lowerA = la,upperA=ua,theta = abpar) ## 1PL model ##### # MLE res1plmle <- PP_4pl(respm = awm,thres = diffpar,type = "mle")#> Estimating: 1pl model ... #> type = mle #> Estimation finished!#> Estimating: 1pl model ... #> type = wle #> Estimation finished!#> Warning: all mu's are set to 0!#> Warning: all sigma2's are set to 1!#> Estimating: 1pl model ... #> type = map #> Estimation finished!#> Warning: all mu's are set to 0!#> Warning: all sigma2's are set to 1!#> Estimating: 1pl model ... #> type = eap #> Estimation finished!#> Estimating: 1pl model ... #> type = robust #> Estimation finished!## centering method = mean res_jk1 <- JKpp(res1plmle) res_jk2 <- JKpp(res1plwle) res_jk3 <- JKpp(res1plmap) res_jk4 <- JKpp(res1plrob) res_jk5 <- JKpp(res1pleap) summary(res_jk1)#> PP Version: 0.6.3.11 #> #> Call: JKpp.fourpl(estobj = res1plmle) #> - job started @ Mon May 24 13:27:51 2021 #> #> Estimation type: Jackknife --> mle #> #> ------------------------------------- #> estimate SE #> [1,] 1.7363 0.1015 #> [2,] -1.2290 0.1072 #> [3,] 0.5319 0.1016 #> [4,] 2.3532 0.1173 #> [5,] -1.1482 0.1024 #> [6,] 0.0000 0.0913 #> [7,] -0.6334 0.1133 #> [8,] -1.8278 0.0858 #> [9,] -1.6833 0.0982 #> [10,] -0.0644 0.1186## centering method = median res_jk1a <- JKpp(res1plmle,cmeth = "median") res_jk2a <- JKpp(res1plwle,cmeth = "median") res_jk3a <- JKpp(res1plmap,cmeth = "median") summary(res_jk2a)#> PP Version: 0.6.3.11 #> #> Call: JKpp.fourpl(estobj = res1plwle, cmeth = "median") #> - job started @ Mon May 24 13:27:51 2021 #> #> Estimation type: Jackknife --> wle #> #> ------------------------------------- #> estimate SE #> [1,] 1.9587 0.1029 #> [2,] -1.7012 0.1933 #> [3,] 0.8853 0.1336 #> [4,] 2.6364 0.0908 #> [5,] -1.3424 0.1125 #> [6,] 0.0000 0.0894 #> [7,] -0.8377 0.1377 #> [8,] -2.0417 0.1129 #> [9,] -1.9587 0.0916 #> [10,] -0.0843 0.1191## centering method = AMT res_jk1b <- JKpp(res1plmle,cmeth = "AMT") res_jk2b <- JKpp(res1plwle,cmeth = "AMT") res_jk3b <- JKpp(res1plmap,cmeth = "AMT") summary(res_jk3b)#> PP Version: 0.6.3.11 #> #> Call: JKpp.fourpl(estobj = res1plmap, cmeth = "AMT") #> - job started @ Mon May 24 13:27:51 2021 #> #> Estimation type: Jackknife --> map #> #> ------------------------------------- #> estimate SE #> [1,] 0.7226 0.1201 #> [2,] -0.6483 0.0678 #> [3,] 0.0910 0.1009 #> [4,] 0.7104 0.2275 #> [5,] -0.7071 0.0584 #> [6,] 0.0000 0.0560 #> [7,] -0.6097 0.1025 #> [8,] -1.2173 0.0637 #> [9,] -0.7433 0.1107 #> [10,] 0.0204 0.0718#> Estimating: 2pl model ... #> type = mle #> Estimation finished!#> Estimating: 2pl model ... #> type = wle #> Estimation finished!#> Warning: all mu's are set to 0!#> Warning: all sigma2's are set to 1!#> Estimating: 2pl model ... #> type = map #> Estimation finished!#> Warning: all mu's are set to 0!#> Warning: all sigma2's are set to 1!#> Estimating: 2pl model ... #> type = eap #> Estimation finished!#> Estimating: 2pl model ... #> type = robust #> Estimation finished!res_jk6 <- JKpp(res2plmle) res_jk7 <- JKpp(res2plwle) res_jk8 <- JKpp(res2plmap) res_jk9 <- JKpp(res2pleap) res_jk10 <- JKpp(res2plrob) ### GPCM model ###### # some threshold parameters THRES <- matrix(c(-2,-1.23,1.11,3.48,1 ,2,-1,-0.2,0.5,1.3,-0.8,1.5),nrow=2) # slopes sl <- c(0.5,1,1.5,1.1,1,0.98) awmatrix <- matrix(c(1,0,2,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) ### PCM model ###### # MLE respcmlmle <- PP_gpcm(respm = awmatrix,thres = THRES, slopes = rep(1,ncol(THRES)),type = "mle")#> Estimating: GPCM ... #> type = mle #> Estimation finished!# WLE respcmwle <- PP_gpcm(respm = awmatrix,thres = THRES, slopes = rep(1,ncol(THRES)),type = "wle")#> Estimating: GPCM ... #> type = wle #> Estimation finished!# MAP estimation respcmmap <- PP_gpcm(respm = awmatrix,thres = THRES, slopes = rep(1,ncol(THRES)),type = "map")#> Warning: all mu's are set to 0!#> Warning: all sigma2's are set to 1!#> Estimating: GPCM ... #> type = map #> Estimation finished!res_jk11 <- JKpp(respcmlmle) res_jk12 <- JKpp(respcmwle) res_jk13 <- JKpp(respcmmap) ### GPCM/4-PL mixed model ###### THRES <- matrix(c(-2,-1.23,1.11,3.48,1 ,2,-1,-0.2,0.5,1.3,-0.8,1.5),nrow=2) sl <- c(0.5,1,1.5,1.1,1,0.98) THRESx <- THRES THRESx[2,1:3] <- NA # for the 4PL item the estimated parameters are submitted, # for the GPCM items the lower asymptote = 0 # and the upper asymptote = 1. la <- c(0.02,0.1,0,0,0,0) ua <- 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,1,0,0,0,0,1 ,0,2,2,1,1,1,1,0,0,1),byrow=TRUE,nrow=5) # create model2est # this function tries to help finding the appropriate # model by inspecting the THRESx. model2est <- findmodel(THRESx) # MLE estimation respmixed_mle <- PPall(respm = awmatrix, thres = THRESx, slopes = sl, lowerA = la, upperA=ua, type = "mle", model2est=model2est)#> Estimating: mixed 4PL, GPCM ... #> type = mle #> Estimation finished!# WLE estimation respmixed_wle <- PPall(respm = awmatrix, thres = THRESx, slopes = sl, lowerA = la, upperA=ua, type = "wle", model2est=model2est)#> Estimating: mixed 4PL, GPCM ... #> type = wle #> Estimation finished!res_jk114 <- JKpp(respmixed_mle) res_jk115 <- JKpp(respmixed_wle)