Learn R Programming

FMP (version 1.4)

FMP: Estimate the coefficients of a filtered monotonic polynomial IRT model

Description

Estimate the coefficients of a filtered monotonic polynomial IRT model.

Usage

FMP(data, thetaInit, item, startvals, k, eps = 1e-06)

Arguments

data
N(subjects)-by-p(items) matrix of 0/1 item response data.
thetaInit
Initial theta ($\theta$) surrogates (e.g., calculated by svdNorm).
item
Item number for coefficient estimation.
startvals
Start values for function minimization. Start values are in the gamma metric (see Liang & Browne, 2015)
k
Order of monotonic polynomial = 2k+1 (see Liang & Browne, 2015). k can equal 0, 1, 2, or 3.
eps
Step size for gradient approximation, default = 1e-6. If a convergence failure occurs during function optimization reducing the value of eps will often produce a converged solution.

Value

b
Vector of polynomial coefficients.
gamma
Polynomial coefficients in gamma metric (see Liang & Browne, 2015).
FHAT
Function value at convergence.
counts
Number of function evaluations during minimization (see optim documentation for further details).
AIC
Pseudo scaled Akaike Information Criterion (AIC). Candidate models that produce the smallest AIC suggest the optimal number of parameters given the sample size. Scaling is accomplished by dividing the non-scaled AIC by sample size.
BIC
Pseudo scaled Bayesian Information Criterion (BIC). Candidate models that produce the smallest BIC suggest the optimal number of parameters given the sample size. Scaling is accomplished by dividing the non-scaled BIC by sample size.
convergence
Convergence = 0 indicates that the optimization algorithm converged; convergence=1 indicates that the optimization failed to converge.

Details

As described by Liang and Browne (2015), the filtered polynomial model (FMP) is a quasi-parametric IRT model in which the IRF is a composition of a logistic function and a polynomial function, $m(\theta)$, of degree 2k + 1. When k = 0, $m(\theta) = b_0 + b_1 \theta$ (the slope intercept form of the 2PL). When k = 1, 2k + 1 equals 3 resulting in $m(\theta) = b_0 + b_1 \theta + b_2 \theta^2 + b_3 \theta^3$. Acceptable values of k = 0,1,2,3. According to Liang and Browne, the "FMP IRF may be used to approximate any IRF with a continuous derivative arbitrarily closely by increasing the number of parameters in the monotonic polynomial" (2015, p. 2) The FMP model assumes that the IRF is monotonically increasing, bounded by 0 and 1, and everywhere differentiable with respect to theta (the latent trait).

References

Liang, L. & Browne, M. W. (2015). A quasi-parametric method for fitting flexible item response functions. Journal of Educational and Behavioral Statistics, 40, 5--34.

Examples

Run this code

## Not run: 
# ## In this example we will generate 2000 item response vectors 
# ## for a k = 1 order filtered polynomial model and then recover 
# ## the estimated item parameters with the FMP function.  
# 
# k <- 1  # order of polynomial
# 
# NSubjects <- 2000
# 
# 
# ## generate a sample of 2000 item response vectors 
# ## for a k = 1 FMP model using the following
# ## coefficients
# b <- matrix(c(
#    #b0     b1      b2     b3   b4  b5  b6  b7  k
#   1.675, 1.974, -0.068, 0.053,  0,  0,  0,  0, 1,
#   1.550, 1.805, -0.230, 0.032,  0,  0,  0,  0, 1,
#   1.282, 1.063, -0.103, 0.003,  0,  0,  0,  0, 1,
#   0.704, 1.376, -0.107, 0.040,  0,  0,  0,  0, 1,
#   1.417, 1.413,  0.021, 0.000,  0,  0,  0,  0, 1,
#  -0.008, 1.349, -0.195, 0.144,  0,  0,  0,  0, 1,
#   0.512, 1.538, -0.089, 0.082,  0,  0,  0,  0, 1,
#   0.122, 0.601, -0.082, 0.119,  0,  0,  0,  0, 1,
#   1.801, 1.211,  0.015, 0.000,  0,  0,  0,  0, 1,
#  -0.207, 1.191,  0.066, 0.033,  0,  0,  0,  0, 1,
#  -0.215, 1.291, -0.087, 0.029,  0,  0,  0,  0, 1,
#   0.259, 0.875,  0.177, 0.072,  0,  0,  0,  0, 1,
#  -0.423, 0.942,  0.064, 0.094,  0,  0,  0,  0, 1,
#   0.113, 0.795,  0.124, 0.110,  0,  0,  0,  0, 1,
#   1.030, 1.525,  0.200, 0.076,  0,  0,  0,  0, 1,
#   0.140, 1.209,  0.082, 0.148,  0,  0,  0,  0, 1,
#   0.429, 1.480, -0.008, 0.061,  0,  0,  0,  0, 1,
#   0.089, 0.785, -0.065, 0.018,  0,  0,  0,  0, 1,
#  -0.516, 1.013,  0.016, 0.023,  0,  0,  0,  0, 1,
#   0.143, 1.315, -0.011, 0.136,  0,  0,  0,  0, 1,
#   0.347, 0.733, -0.121, 0.041,  0,  0,  0,  0, 1,
#  -0.074, 0.869,  0.013, 0.026,  0,  0,  0,  0, 1,
#   0.630, 1.484, -0.001, 0.000,  0,  0,  0,  0, 1), 
#   nrow=23, ncol=9, byrow=TRUE)  
#   
# ex1.data<-genFMPData(NSubj = NSubjects, bParams = b, seed = 345)$data
# 
# ## number of items in the data matrix
# NItems <- ncol(ex1.data)
# 
# # compute (initial) surrogate theta values from 
# # the normed left singular vector of the centered 
# # data matrix
# thetaInit <- svdNorm(ex1.data)
# 
# 
# ## earlier we defined k = 1
#   if(k == 0) {
#             startVals <- c(1.5, 1.5)
#             bmat <- matrix(0, NItems, 6)
#             colnames(bmat) <- c(paste("b", 0:1, sep = ""),"FHAT", "AIC", "BIC", "convergence") 
#   }
#   if(k == 1) {
#            startVals <- c(1.5, 1.5, .10, .10)
#            bmat <- matrix(0, NItems, 8)
#            colnames(bmat) <- c(paste("b", 0:3, sep = ""),"FHAT", "AIC", "BIC", "convergence") 
#   }
#   if(k == 2) {
#            startVals <- c(1.5, 1.5, .10, .10, .10, .10)
#            bmat <- matrix(0, NItems, 10)
#            colnames(bmat) <- c(paste("b", 0:5, sep = ""),"FHAT", "AIC", "BIC", "convergence") 
#   }
#   if(k == 3) {
#            startVals <- c(1.5, 1.5, .10, .10, .10, .10, .10, .10)
#            bmat <- matrix(0, NItems, 12)
#            colnames(bmat) <- c(paste("b", 0:7, sep = ""),"FHAT", "AIC", "BIC", "convergence") 
#   }         
#   
# # estimate item parameters and fit statistics  
#   for(i in 1:NItems){
#     out <- FMP(data = ex1.data, thetaInit, item = i, startvals = startVals, k = k)
#     Nb <- length(out$b)
#     bmat[i,1:Nb] <- out$b
#     bmat[i,Nb+1] <- out$FHAT
#     bmat[i,Nb+2] <- out$AIC
#     bmat[i,Nb+3] <- out$BIC
#     bmat[i,Nb+4] <- out$convergence
#   }
# 
# # print output 
# print(bmat)
# ## End(Not run)

Run the code above in your browser using DataLab