Hello all,

I have a question about ordinal data analysis. I would like to fit a univariate model (1 ordinal variable with 3 categories) in two cohorts (cohort 1 and cohort 2) allowing for sex differences. If I am not wrong (as Brad’s explained in the videos), for model identification we need to fix the variance and the mean or we can fix the first two thresholds (in this example all the thresholds), for example 0 and 1. Then we would have free means and variances.

I guess that by fixing the thresholds we can compare the standardized estimates across sex and cohorts. However, I am not sure if we can compare the unstandardized estimates. Would it be correct to use information from means and variances to standardize the thresholds as done in this paper Squeezing interval change from ordinal panel data: latent growth curves with ordinal outcomes - PubMed by Mehta and Neale? If I do that, would the thresholds, means and variances be on the same scale?

I have tried to check this question with real data and I get similar standardized values in both models (standardized thresholds and not standardized thresholds) but obviously different estimates for unstandardized variance components and means.

Here is the code that I am using to fix and standardize the thresholds:

Thres ← mxMatrix( type=“Full”, nrow=nth, ncol=ntv, free=c(F,F,F,F), values=c(0,1,0,1), labels=c(“t1”,“t2”, “t1”,“t2”), name=“Th” )

MatU ← mxMatrix( type=“Unit”, nrow=nth, ncol=nv, name=“U”)

MatU2 ← mxMatrix( type=“Unit”, nrow=1, ncol=2, name=“U2”)

Thresm1 ← mxAlgebra( expression= (Th - U %x% expMeanZmONE)/ (U2 %x% (sqrt(diag2vec(expCovMZmONE)))), name=“expThresm1”)

Thresf1 ← mxAlgebra( expression= (Th - U %x% expMeanZfONE) /(U2 %x% (sqrt(diag2vec(expCovMZfONE)))), name=“expThresf1”)

Thresmf1 ← mxAlgebra( expression= (Th - U %x% expMeanZoONE) / (U2 %x% (sqrt(diag2vec(expCovDZoONE)))), name=“expThresmf1”)

Thresm1DZ ← mxAlgebra( expression= (Th - U %x% expMeanZmONE)/ (U2 %x% (sqrt(diag2vec(expCovDZmONE)))), name=“expThresm1DZ”)

Thresf1DZ ← mxAlgebra( expression= (Th - U %x% expMeanZfONE) /(U2 %x% (sqrt(diag2vec(expCovDZfONE)))), name=“expThresf1DZ”)

Thresm2 ← mxAlgebra( expression= (Th - U %x% expMeanZmTWO) / (U2 %x% (sqrt(diag2vec(expCovMZmTWO)))), name=“expThresm2”)

Thresf2 ← mxAlgebra( expression= (Th - U %x% expMeanZfTWO) / (U2 %x% (sqrt(diag2vec(expCovMZfTWO)))), name=“expThresf2”)

Thresmf2 ← mxAlgebra( expression= (Th - U %x% expMeanZoTWO) / (U2 %x% (sqrt(diag2vec(expCovDZoTWO)))), name=“expThresmf2”)

Thresm2DZ ← mxAlgebra( expression= (Th - U %x% expMeanZmTWO) / (U2 %x% (sqrt(diag2vec(expCovDZmTWO)))), name=“expThresm2DZ”)

Thresf2DZ ← mxAlgebra( expression= (Th - U %x% expMeanZfTWO) / (U2 %x% (sqrt(diag2vec(expCovDZfTWO)))), name=“expThresf2DZ”)

I think the model fit is the same using standardized thresholds or not but the total variances change. I just wanted to be sure that this approach is correct.

Thank you so much in advance.