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")
 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 

 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.


1 Answer 1


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.

  • $\begingroup$ Hi rvl, I have used this command 'lsmeans(mm1, pairwise~group, adjust="tukey", mode = "mean.class")' as suggested, but get this message: ''Error in match.arg(mode) : 'arg' should be one of “latent”, “linear.predictor”, “cum.prob”, “prob”" $\endgroup$ Commented Jul 28, 2015 at 7:29
  • 1
    $\begingroup$ You have an old version of lsmeans. Update it. $\endgroup$
    – Russ Lenth
    Commented Jul 28, 2015 at 13:05
  • $\begingroup$ Yeah!!! It works this time after updating. Thank you so so much rvl. You have made my day! $\endgroup$ Commented Jul 29, 2015 at 7:24
  • $\begingroup$ I'm a little late to the party, but my question is very similar regarding mode = "mean.class". My ordinal scale ranges from 1 to 9, but my estimates are way too large i.e. 15.5. Is this due to having repeated measures in my model (4 per subject)? How do I get these estimates to conform to the scale $[1,9]$? $\endgroup$ Commented Dec 3, 2020 at 2:35
  • $\begingroup$ This doesn't seem possible; in any case it shouldn't be. Can you send me (emmeans maintainer) a dataset where this happens, along woth the code you. used? I'd prefer a relatively small example if at all possible, and minimal code without tidyverse stuff and other bells/whistles. $\endgroup$
    – Russ Lenth
    Commented Dec 3, 2020 at 3:54

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.