Solved – Why CLMM function for ordinal mixed logistic regression changes the means

lsmeansmixed modelordered-logit

I am using CLMM to run the ordinal mixed logistic regression model as the DV is ordinal number from 1 to 9 (rating scale). First I read the file and change the DV into ordinal using these commands:

> data1.frame <- read.delim("happy.txt", fileEncoding="UTF-16")
> data1.frame$response <- ordered(data1.frame$response)

Then I run CLMM function:

> mm1 <- clmm (response ~ group + (1|listeners),data=data1.frame)

And because I have three groups and I would like to see all pair contrasts, I run Tukey's pairwise comparison:

> lsmeans(mm1, pairwise~group, adjust="tukey")
$lsmeans
 group        lsmean        SE df asymp.LCL asymp.UCL
 english -0.63348352 0.4555165 NA -1.526388 0.2594206
 L2      -0.01566743 0.4424304 NA -0.882920 0.8515852
 thai    -0.39563590 0.4546666 NA -1.286874 0.4956022

Confidence level used: 0.95 

$contrasts
 contrast         estimate        SE df   z.ratio p.value
 english - L2   -0.6178161 0.1564433 NA -3.949137  0.0002
 english - thai -0.2378476 0.1873555 NA -1.269499  0.4125
 L2 - thai       0.3799685 0.1538963 NA  2.468991  0.0362

P value adjustment: tukey method for a family of 3 means 

However, as you can see, in the 'lsmean' column, the mean of each group change into minus zero instead of something from 1 to 9. My question is: is this common when I change the DV from 1 to 9 into ordinal numbers?

If yes, it seems like when plotting the graph, I have to use the actual means of each group, rather than relying on the means provided by this pairwise comparison.

Best Answer

The default output from lsmeans is on the latent-variable scale -- a bit hard to explain but one way to think of it is that the common model involves a linear predictor for the logit of the cumulative probabilities, and the latent value is the average of that linear prediction of each grid value across cut points.

If you want the predicted average class number on the 1-9 scale, it's easy to get:

lsmeans(..., mode = "mean.class")

For more details, see ? models with lsmeans loaded.