The data I have are censored at a value that is constant across all subjects. So y is Normal except that all values at or above 15 were coded as 15. I've created a simple LCA in OpenMx that works (treats the censored data as if it were simply Normal) but the censored data affect the detection of clusters. I'd like to model the data as truncated. I'm familiar with thresholds for ordinal data but it's not clear to me if OpenMx can handle truncated Normal data where y* = y if y <= 15 and y* = 15 if y > 15.

Several possibilities come to mind. I'm assuming you have more observed variables than y in your model.

Model a single latent variable which causes, with path=1, two variables, one is ordinal and one is continuous. For those individuals with censored scores, they are missing (NA) on the continuous variable, and vice-versa for those with the continuous variable scored (<15) - they are marked as missing on the ordinal variable. I think this is simplest but tbh I've never tried it.

Separate out into two groups the data - in one group the uncensored cases, and in the other the censored ones (all scored 1 on an ordinal variable after mxFactor()'d into 0:1). You will have to be careful with constraints in this case, as the covariance of y with anything else in the censored group will be undefined unless this is equated to that of the uncensored group. Basically, the same expected covariances & means should be used for the two groups.

Do something explicit with omxMnor() to evaluate the likelihood for cases with censored data. Probably more difficult than either 1 or 2, but perhaps of more general utility for complex selection/censoring mechanisms.

HTH

Thanks, I will try to implement your first method. Before I saw your reply, I was planning on just using 5 or 6 fixed tresholds for y. I would lose some information, but hopefully avoid the tendency for the threshold values to form their own cluster.

OK, I've set up the censored data. For the ordinal variable, I will a column of NA's and 1's. For the continuous variable I'll have the uncensored value and NA's when the value was censored. I'll have a threshold for the ordinal variable but it seems a bit strange to me because I will have only 1's and NA's and no zeroes. I should know if this works shortly.

I didn't mean truncated - I meant censored.