Ordinal Data—standardized thresholds

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.

Hi Juan

I haven’t standardised thresholds in a model before and I don’t have access to the article. But I can tell you what the code is doing.

Assuming that expMeanZxxx is the expected mean for the group (i.e. MZ males in cohort 1) and expThresxxx is the threshold for the group:
It looks like you’re subtracting the expected mean from the threshold and increment matrix (that you have fixed to threshold = 0 and increment =1) and then dividing that adjusted threshold and increment by the standard deviation to give the expected threshold.

I’m not sure exactly what the advantage is of doing this. But perhaps that is detailed in the paper. Or perhaps you can explain?

If your goal is to test if the two cohorts and males and females are equivalent, then you could do this in a saturated model (like on day1 and day3). Then you would test if the the unstandardised estimates could be equated across the groups. And if they can be equated, then they can all go in the same model (maybe with a covariate for site/sex on the means or thresholds).

But I might not be understanding what your goal is.

Hi Katrina,

Thank you so much for your response.

My goal is to compare the estimates (A,C and E) from different cohorts. So, (if I am not wrong) if I fix the thresholds for all the cohorts (and sex) then means and variances have to “accommodate” for that thresholds. Then means and variances would be on a different scale for the different cohorts. So, for example if we would like to report standardized but also unstandardized estimates for A,C,E and total variance, by standardizing the thresholds (using information from means and variances freely estimated) we would have our estimates on the same scale. That was my thought but I might be totally confused.

Thank you so much again!

Hi Juan

If you are wanting to compare the thresholds between cohorts or sexes, I think it would be easier to constrain mean=0 and variance=1 and map the liability threshold model onto a standard normal distribution. Then you can easily compare the thresholds across sex and cohort.

If you find that the thresholds can not be equated across sex and cohort, then you can model those covariate effects onto the thresholds and you can still use all your data to decompose the variance into A, C/D, and E while allowing there to be different thresholds for sex and cohort.

Perhaps @Brad has familiarity with the approach that you mentioned.


Thank you so much, Katrina

With all good wishes,