You are here

Delta parameterization of ordinal veriables

2 posts / 0 new
Last post
pehkawn's picture
Offline
Joined: 05/24/2020 - 19:45
Delta parameterization of ordinal veriables

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. 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.

mhunter's picture
Offline
Joined: 07/31/2009 - 15:26
Attached

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: