Uniqueness prior to assist in item factor analysis

Share:

Description

To prevent Heywood cases, Bock, Gibbons, & Muraki (1988) suggested a beta prior on the uniqueness (Equations 43-46). The analytic gradient and Hessian are included for quick optimization using Newton-Raphson.

Usage

1
uniquenessPrior(model, numFactors, strength = 0.1, name = "uniquenessPrior")

Arguments

model

an mxModel

numFactors

the number of factors. All items are assumed to have the same number of factors.

strength

the strength of the prior

name

the name of the mxModel that is returned

Details

To reproduce these derivatives in maxima for the case of 2 slopes (c and d), use the following code:

f(c,d) := -p*log(1-(c^2 / (c^2+d^2+1) + (d^2 / (c^2+d^2+1))));

diff(f(c,d), d),radcan;

diff(diff(f(c,d), d),d),radcan;

The general pattern is given in Bock, Gibbons, & Muraki.

Value

an mxModel that evaluates to the prior density in deviance units

References

Bock, R. D., Gibbons, R., & Muraki, E. (1988). Full-information item factor analysis. Applied Psychological Measurement, 12(3), 261-280.

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
numItems <- 6
spec <- list()
spec[1:numItems] <- rpf.drm(factors=2)
names(spec) <- paste0("i", 1:numItems)
item <- mxMatrix(name="item", free=TRUE,
                 values=mxSimplify2Array(lapply(spec, rpf.rparam)))
item$labels[1:2,] <- paste0('p',1:(numItems * 2))
data <- rpf.sample(500, spec, item$values)
m1 <- mxModel(model="m1", item,
              mxData(observed=data, type="raw"),
              mxExpectationBA81(spec),
              mxFitFunctionML())
up <- uniquenessPrior(m1, 2)
container <- mxModel("container", m1, up,
                     mxFitFunctionMultigroup(c("m1", "uniquenessPrior")),
                     mxComputeSequence(list(
                       mxComputeOnce('fitfunction', c('fit','gradient')),
                       mxComputeReportDeriv())))
container <- mxRun(container)
container$output$fit
container$output$gradient