Delta parameterization of ordinal veriables

Posted on
Picture of user. pehkawn Joined: 05/24/2020
There are several model parameters available for an ordinal variable that can set the
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.

Replied on Fri, 06/03/2022 - 14:09
Picture of user. mhunter Joined: 07/31/2009

I've attached a full script that uses the "theta" "parameterization". (I use quotes around these because they are both nonsense terms with no intrinsic meaning for the given context). The key bit is copied below.

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!

File attachments