Delta parameterization of ordinal veriables
ordinal variable’s scale and location. The two most common seem to be *delta* parameterization (fixing total means and total variances to 0 and 1) and *theta* parameterization (fixing residual means and residual variances to 0 and 1).
Theta parameterization, if my understanding is correct, is fairly easy to implement. It is only a matter of fixing residual means and variances of the indicators to 0 and 1, respectively, as [described in the documentation](https://vipbg.vcu.edu/vipbg/OpenMx2/docs//OpenMx/latest/Ordinal_Path.html). However, it is unclear to me how I would create an mxAlgebra with delta parameterization according to these equations in OpenMx. Some code examples would be appreciated.
Total variance set to equal 1
$$
\theta_{ii} = \sigma_{i}^{2\*} - \Lambda_{i} \Psi^{\*} \Lambda_{i}^{T} \bigg\rvert_{\sigma_i^{2\*}=1} = 1 - \Lambda_{i} \Psi^{\*} \Lambda_{i}^{T}
$$
Total means set to 0?
$$
\mu_{ij}^{\*} = v_{ij} + \Lambda_i\alpha_j^{\*}\bigg\rvert_{\mu_{ij}^{\*}=0}
$$
where ν_ij is the intercept for variable i in row j, Λ_i is the row vector of Λ for variable i, and Θ_ii is the diagonal element of Θ that estimates the residual variance of variable i.
Attached
The big picture is you will generally use nonlinear constraints (
mxConstraint()
) to make the total mean and variance zero and one, respectively. To do this without writing the algebra for the model-implied means and covariances yourself, you can refer to the model-implied (i.e., expected) means and covariance as outlined below.thetaMod2 <- mxModel(thetaMod,
# Create 'empty' matrices to refer to means and covs
mxMatrix('Full', nrow=1, ncol=length(mv), name='emean'),
mxMatrix('Symm', nrow=length(mv), ncol=length(mv), name='ecov'),
# Refer to the 'empty' matrices in expectattion
mxExpectationRAM(A='A', S='S', F='F', M='M', thresholds='Thresholds',
expectedMean='emean', expectedCovariance='ecov'),
# Create matrices for constrained values
mxMatrix(type='Zero', nrow=1, ncol=length(mv), name='Z'),
mxMatrix(type='Unit', nrow=length(mv), ncol=1, name='I'),
# Constrain means and variances
mxConstraint(emean == Z, name='mcon'),
mxConstraint(diag2vec(ecov) == I, name='vcon'),
# Add data
mxData(type='raw', ds),
# Add fit function
mxFitFunctionML())
Hopefully, this helps!
Log in or register to post comments