# FMP: Estimate the coefficients of a filtered monotonic polynomial... In fungible: Psychometric Functions from the Waller Lab

## Description

Estimate the coefficients of a filtered monotonic polynomial IRT model.

## Usage

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

## Arguments

 `data` N(subjects)-by-p(items) matrix of 0/1 item response data. `thetaInit` Initial 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.

## 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(θ), of degree 2k + 1. When k = 0, m(θ) = b_0 + b_1 θ (the slope intercept form of the 2PL). When k = 1, 2k + 1 equals 3 resulting in m(θ) = b_0 + b_1 θ + b_2 θ^2 + b_3 θ^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).

## 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.

Niels Waller

## 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

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88``` ```## 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) ```

fungible documentation built on Sept. 29, 2021, 1:06 a.m.