Estimation of a Unidimensional Factor Model under Full and Partial Measurement Invariance
cfa_meas_inv.Rd
Estimates a unidimensional factor model based on the normal distribution fitting
function under full and partial measurement invariance.
Item loadings and item intercepts are successively freed based on the largest
modification index and a chosen significance level alpha
.
Usage
cfa_meas_inv(dat, group, weights=NULL, alpha=0.01, verbose=FALSE, op=c("~1","=~"))
Arguments
- dat
Data frame containing items
- group
Vector of group identifiers
- weights
Optional vector of sampling weights
- alpha
Significance level
- verbose
Logical indicating whether progress should be shown
- op
Operators (intercepts or loadings) for which estimation should be freed
Value
List with several entries
- pars_mi
Model parameters under full invariance
- pars_pi
Model parameters under partial invariance
- mod_mi
Fitted model under full invariance
- mod_pi
Fitted model under partial invariance
- ...
More output
See also
See also sirt::invariance.alignment
Examples
if (FALSE) {
#############################################################################
# EXAMPLE 1: Factor model under full and partial invariance
#############################################################################
#--- data simulation
set.seed(65)
G <- 3 # number of groups
I <- 5 # number of items
# define lambda and nu parameters
lambda <- matrix(1, nrow=G, ncol=I)
nu <- matrix(0, nrow=G, ncol=I)
err_var <- matrix(1, nrow=G, ncol=I)
# define size of noninvariance
dif <- 1
#- 1st group: N(0,1)
lambda[1,3] <- 1+dif*.4; nu[1,5] <- dif*.5
#- 2nd group: N(0.3,1.5)
gg <- 2 ;
lambda[gg,5] <- 1-.5*dif; nu[gg,1] <- -.5*dif
#- 3nd group: N(.8,1.2)
gg <- 3
lambda[gg,4] <- 1-.7*dif; nu[gg,2] <- -.5*dif
#- define distributions of groups
mu <- c(0,.3,.8)
sigma <- sqrt(c(1,1.5,1.2))
N <- rep(1000,3) # sample sizes per group
#* use simulation function
dat <- sirt::invariance_alignment_simulate(nu, lambda, err_var, mu, sigma, N,
exact=TRUE)
#--- estimate CFA
mod <- sirt::cfa_meas_inv(dat=dat[,-1], group=dat$group, verbose=TRUE, alpha=0.05)
mod$pars_mi
mod$pars_pi
}