# FUP: Estimate the coefficients of a filtered unconstrained... In fungible: Psychometric Functions from the Waller Lab

 FUP R Documentation

## Estimate the coefficients of a filtered unconstrained polynomial IRT model

### Description

Estimate the coefficients of a filtered unconstrained polynomial IRT model.

### Usage

``````FUP(data, thetaInit, item, startvals, k = 0)
``````

### 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. `k` order of monotonic polynomial = 2k+1 (see Liang & Browne, 2015).

### Value

 `b` Vector of polynomial coefficients. `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

``````
## Not run:
NSubjects <- 2000

## generate sample k=1 FMP data
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)

# generate data using the above item parameters
ex1.data<-genFMPData(NSubj = NSubjects, bParams = b, seed = 345)\$data

NItems <- ncol(ex1.data)

# compute (initial) surrogate theta values from
# the normed left singular vector of the centered
# data matrix
thetaInit <- svdNorm(ex1.data)

# Choose model
k <- 1  # order of polynomial = 2k+1

# Initialize matrices to hold output
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<-FUP(data = ex1.data,thetaInit = 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 results
print(bmat)

## End(Not run)

``````

fungible documentation built on March 31, 2023, 5:47 p.m.