rvlenth/emmeans

Ordinal logistic regression [GEE]: ordLORgee; mode="prob" - all estimates have same value, joint_tests() fails. What does it mean?

Generalized opened this issue · 4 comments

Hello,

I have a 2-arm study with 3 repeated observation timepoints and ordinal response at each timepoint.
I attach the data on the bottom.

I analyze it via GEE using the multgee and repolr packages.

Let's fit a model

library(multgee)

fitmod <- ordLORgee(formula = ODIPain ~ Visit_nOrd * Arm + Age_centered + Age_centered : Visit_nOrd,
                    data = data, id = PatientId, repeated = as.numeric(Visit_nOrd), LORstr = "uniform")
coef(summary(fitmod))

                                Estimate san.se  san.z Pr(>|san.z|)
beta10                           -1.2882 0.2588 -4.978       0.0000
beta20                           -0.3159 0.2343 -1.348       0.1776
beta30                            1.1004 0.2364  4.654       0.0000
beta40                            2.1376 0.2743  7.794       0.0000
beta50                            3.6202 0.4557  7.944       0.0000
Visit_nOrdMonth 12               -0.4471 0.2660 -1.681       0.0927
Visit_nOrdMonth 20               -0.5431 0.2575 -2.109       0.0349
ArmB                             -0.0502 0.3247 -0.155       0.8771
Age_centered                      0.0139 0.0150  0.929       0.3527
Visit_nOrdMonth 12:ArmB           0.6400 0.3670  1.744       0.0812
Visit_nOrdMonth 20:ArmB           0.8761 0.3510  2.496       0.0126
Visit_nOrdMonth 12:Age_centered   0.0289 0.0151  1.917       0.0552
Visit_nOrdMonth 20:Age_centered   0.0167 0.0127  1.310       0.1902

It converged. Now let's make the grid and emmeans:

> (lord_grid <- qdrg(formula = ODIPain ~ Visit_nOrd * Arm + Age_centered + Age_centered : Visit_nOrd,
+                    data=data, 
+                    coef = fitmod$coefficients, 
+                    vcov = fitmod$robust.variance, 
+                    df = Inf, 
+                    ordinal = list(dim=6),
+                    link = "logit"))

'emmGrid' object with variables:
    Visit_nOrd = Month 6, Month 12, Month 20
    Arm = A, B
    Age_centered = -2.4336e-15
Transformation: “logit” 
> 
> (lord_em <- emmeans(lord_grid, specs = ~Arm * Visit_nOrd , data=data))
 Arm Visit_nOrd emmean    SE  df asymp.LCL asymp.UCL
 A   Month 6    -1.051 0.248 Inf     -1.54    -0.565
 B   Month 6    -1.101 0.521 Inf     -2.12    -0.079
 A   Month 12   -1.498 0.434 Inf     -2.35    -0.647
 B   Month 12   -0.908 0.530 Inf     -1.95     0.131
 A   Month 20   -1.594 0.431 Inf     -2.44    -0.749
 B   Month 20   -0.768 0.522 Inf     -1.79     0.255

Results are given on the logit (not the response) scale. 
Confidence level used: 0.95 

And test some contrasts I was interested in:

> update(contrast(lord_em,
+                 list("Month 6  : A vs. B" = c(-1, 1, 0, 0, 0, 0),
+                      "Month 12 : A vs. B" = c( 0, 0,-1, 1, 0, 0),
+                      "Month 20 : A vs. B" = c( 0, 0, 0, 0,-1, 1))),
+        adjust="none", level = 0.95, infer = c(TRUE, TRUE))
 contrast           estimate    SE  df asymp.LCL asymp.UCL z.ratio p.value
 Month 6  : A vs. B   -0.050 0.325 Inf    -0.687     0.586  -0.155  0.8770
 Month 12 : A vs. B    0.590 0.365 Inf    -0.126     1.305   1.616  0.1060
 Month 20 : A vs. B    0.826 0.350 Inf     0.139     1.513   2.357  0.0180

Results are given on the log odds ratio (not the response) scale. 
Confidence level used: 0.95 

> joint_tests(lord_grid)
 model term     df1 df2 F.ratio Chisq p.value
 Visit_nOrd       2 Inf   0.278  0.56  0.7570
 Arm              1 Inf   2.544  2.54  0.1110
 Visit_nOrd:Arm   2 Inf   3.134  6.27  0.0440

OK. Now let's switch to other modes:

mode = "cum.prob"
emmeans worked, yet joint_tests failed. What could cause that?

> 
> (lord_grid <- qdrg(formula = ODIPain ~ Visit_nOrd * Arm + Age_centered + Age_centered : Visit_nOrd,
+                    data=data, 
+                    coef = fitmod$coefficients, 
+                    vcov = fitmod$robust.variance, 
+                    df = Inf, 
+                    ordinal = list(dim=6, mode="cum.prob")))
'emmGrid' object with variables:
    Visit_nOrd = Month 6, Month 12, Month 20
    Arm = A, B
    Age_centered = -2.4336e-15
    cut = multivariate response levels: 1|2, 2|3, 3|4, 4|5, 5|6
> 
> (lord_em <- emmeans(lord_grid, specs = ~Arm * Visit_nOrd , data=data))
 Arm Visit_nOrd emmean    SE  df asymp.LCL asymp.UCL
 A   Month 6     1.051 0.248 Inf     0.565      1.54
 B   Month 6     1.101 0.521 Inf     0.079      2.12
 A   Month 12    1.498 0.434 Inf     0.647      2.35
 B   Month 12    0.908 0.530 Inf    -0.131      1.95
 A   Month 20    1.594 0.431 Inf     0.749      2.44
 B   Month 20    0.768 0.522 Inf    -0.255      1.79

Results are averaged over the levels of: cut 
Confidence level used: 0.95 
> 
> update(contrast(lord_em,
+                 list("Month 6  : A vs. B" = c(-1, 1, 0, 0, 0, 0),
+                      "Month 12 : A vs. B" = c( 0, 0,-1, 1, 0, 0),
+                      "Month 20 : A vs. B" = c( 0, 0, 0, 0,-1, 1))),
+        adjust="none", level = 0.95, infer = c(TRUE, TRUE))
 contrast           estimate    SE  df asymp.LCL asymp.UCL z.ratio p.value
 Month 6  : A vs. B    0.050 0.325 Inf    -0.586     0.687   0.155  0.8770
 Month 12 : A vs. B   -0.590 0.365 Inf    -1.305     0.126  -1.616  0.1060
 Month 20 : A vs. B   -0.826 0.350 Inf    -1.513    -0.139  -2.357  0.0180

Results are averaged over the levels of: cut 
Confidence level used: 0.95 

> joint_tests(lord_grid)
Error in solve.default(zcov, z) : 
  system is computationally singular: reciprocal condition number = 2.87943e-19
Error in solve.default(zcov, z) : 
  system is computationally singular: reciprocal condition number = 1.65641e-18
Error in rbind(deparse.level, ...) : 
  numbers of columns of arguments do not match

This time joint_tests() failed.

mode = "prob"

> (lord_grid <- qdrg(formula = ODIPain ~ Visit_nOrd * Arm + Age_centered + Age_centered : Visit_nOrd,
+                    data=data, 
+                    coef = fitmod$coefficients, 
+                    vcov = fitmod$robust.variance, 
+                    df = Inf, 
+                    ordinal = list(dim=6, mode="prob")))
'emmGrid' object with variables:
    Visit_nOrd = Month 6, Month 12, Month 20
    Arm = A, B
    Age_centered = -2.4336e-15
    ODIPain = multivariate response levels: 1, 2, 3, 4, 5, 6
> 
> (lord_em <- emmeans(lord_grid, specs = ~Arm * Visit_nOrd , data=data))
 Arm Visit_nOrd  prob SE  df asymp.LCL asymp.UCL
 A   Month 6    0.167  0 Inf     0.167     0.167
 B   Month 6    0.167  0 Inf     0.167     0.167
 A   Month 12   0.167  0 Inf     0.167     0.167
 B   Month 12   0.167  0 Inf     0.167     0.167
 A   Month 20   0.167  0 Inf     0.167     0.167
 B   Month 20   0.167  0 Inf     0.167     0.167

Results are averaged over the levels of: ODIPain 
Confidence level used: 0.95 
> 
> update(contrast(lord_em,
+                 list("Month 6  : A vs. B" = c(-1, 1, 0, 0, 0, 0),
+                      "Month 12 : A vs. B" = c( 0, 0,-1, 1, 0, 0),
+                      "Month 20 : A vs. B" = c( 0, 0, 0, 0,-1, 1))),
+        adjust="none", level = 0.95, infer = c(TRUE, TRUE))
 contrast           estimate SE  df asymp.LCL asymp.UCL z.ratio p.value
 Month 6  : A vs. B        0  0 Inf         0         0     NaN     NaN
 Month 12 : A vs. B        0  0 Inf         0         0     NaN     NaN
 Month 20 : A vs. B        0  0 Inf         0         0     NaN     NaN

Results are averaged over the levels of: ODIPain 
Confidence level used: 0.95 

> joint_tests(lord_grid)
Error in solve.default(zcov, z) : 
  system is computationally singular: reciprocal condition number = 2.87897e-17
Error in solve.default(zcov, z) : 
  system is computationally singular: reciprocal condition number = 1.89748e-17
Error in solve.default(zcov, z) : 
  system is computationally singular: reciprocal condition number = 1.73311e-17
Error in solve.default(zcov, z) : 
  system is computationally singular: reciprocal condition number = 3.28385e-19
Error in rbind(deparse.level, ...) : 
  numbers of columns of arguments do not match

What does it mean to have all estimated equal to same value 0.167 here? joint_tests() failed as well.
The behaviour of both tested packages is the same here.

The data:

> dput(data)
structure(list(PatientId = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 
3L, 3L, 3L, 4L, 4L, 4L, 5L, 5L, 5L, 6L, 6L, 6L, 7L, 7L, 7L, 8L, 
8L, 8L, 9L, 9L, 9L, 10L, 10L, 10L, 11L, 11L, 11L, 12L, 12L, 12L, 
13L, 13L, 13L, 14L, 14L, 14L, 15L, 15L, 15L, 16L, 16L, 16L, 17L, 
17L, 17L, 18L, 18L, 18L, 19L, 19L, 19L, 20L, 20L, 20L, 21L, 21L, 
21L, 22L, 22L, 22L, 23L, 23L, 23L, 24L, 24L, 24L, 25L, 25L, 25L, 
26L, 26L, 26L, 27L, 27L, 27L, 28L, 28L, 28L, 29L, 29L, 29L, 30L, 
30L, 30L, 31L, 31L, 31L, 32L, 32L, 32L, 33L, 33L, 33L, 34L, 34L, 
34L, 35L, 35L, 35L, 36L, 36L, 36L, 37L, 37L, 37L, 38L, 38L, 38L, 
39L, 39L, 39L, 40L, 40L, 40L, 41L, 41L, 41L, 42L, 42L, 42L, 43L, 
43L, 43L, 44L, 44L, 44L, 45L, 45L, 45L, 46L, 46L, 46L, 47L, 47L, 
47L, 48L, 48L, 48L, 49L, 49L, 49L, 50L, 50L, 50L, 51L, 51L, 51L, 
52L, 52L, 52L, 53L, 53L, 53L, 54L, 54L, 54L, 55L, 55L, 55L, 56L, 
56L, 56L, 57L, 57L, 57L, 58L, 58L, 58L, 59L, 59L, 59L, 60L, 60L, 
60L, 61L, 61L, 61L, 62L, 62L, 62L, 63L, 63L, 63L, 64L, 64L, 64L, 
65L, 65L, 65L, 66L, 66L, 66L, 67L, 67L, 67L, 68L, 68L, 68L, 69L, 
69L, 69L, 70L, 70L, 70L, 71L, 71L, 71L, 72L, 72L, 72L, 73L, 73L, 
73L, 74L, 74L, 74L, 75L, 75L, 75L, 76L, 76L, 76L, 77L, 77L, 77L, 
78L, 78L, 78L, 79L, 79L, 79L, 80L, 80L, 80L, 81L, 81L, 81L, 82L, 
82L, 82L, 83L, 83L, 83L, 84L, 84L, 84L, 85L, 85L, 85L, 86L, 86L, 
86L, 87L, 87L, 87L, 88L, 88L, 88L, 89L, 89L, 89L, 90L, 90L, 90L, 
91L, 91L, 91L, 92L, 92L, 92L, 93L, 93L, 93L, 94L, 94L, 94L, 95L, 
95L, 95L, 96L, 96L, 96L, 97L, 97L, 97L, 98L, 98L, 98L, 99L, 99L, 
99L, 100L, 100L, 100L, 101L, 101L, 101L, 102L, 102L, 102L, 103L, 
103L, 103L, 104L, 104L, 104L, 105L, 105L, 105L, 106L, 106L, 106L, 
107L, 107L, 107L, 108L, 108L, 108L, 109L, 109L, 109L, 110L, 110L, 
110L, 111L, 111L, 111L), levels = c("4x9x110004", "4x9x110007", 
"4x9x110008", "4x9x110010", "4x9x110012", "4x9x110014", "4x9x110017", 
"4x9x110018", "4x9x110019", "4x9x110021", "4x9x110023", "4x9x110024", 
"4x9x110029", "4x9x110030", "4x9x110031", "4x9x110033", "4x9x110034", 
"4x9x110036", "4x9x110037", "4x9x110038", "4x9x110041", "4x9x110042", 
"4x9x110043", "4x9x110044", "4x9x110045", "4x9x110047", "4x9x110048", 
"4x9x110049", "4x9x110050", "4x9x110051", "4x9x110052", "4x9x110054", 
"4x9x110055", "4x9x110056", "4x9x110057", "4x9x110058", "4x9x110059", 
"4x9x110061", "4x9x110062", "4x9x110063", "4x9x110064", "4x9x110066", 
"4x9x110068", "4x9x110069", "4x9x110070", "4x9x110071", "4x9x110072", 
"4x9x110073", "4x9x110074", "4x9x110075", "4x9x110076", "4x9x110077", 
"4x9x120001", "4x9x120003", "4x9x120005", "4x9x120009", "4x9x120014", 
"4x9x120015", "4x9x120017", "4x9x120020", "4x9x120021", "4x9x120022", 
"4x9x120026", "4x9x120027", "4x9x120028", "4x9x120029", "4x9x120030", 
"4x9x120031", "4x9x120032", "4x9x120033", "4x9x120034", "4x9x120035", 
"4x9x120036", "4x9x120037", "4x9x120038", "4x9x120039", "4x9x120040", 
"4x9x120041", "4x9x120042", "4x9x120043", "4x9x120045", "4x9x120047", 
"4x9x120048", "4x9x120049", "4x9x120050", "4x9x120051", "4x9x120052", 
"4x9x130001", "4x9x130004", "4x9x130005", "4x9x130006", "4x9x130009", 
"4x9x130012", "4x9x130013", "4x9x130014", "4x9x130015", "4x9x130016", 
"4x9x130017", "4x9x130018", "4x9x130019", "4x9x130020", "4x9x130022", 
"4x9x130023", "4x9x130024", "4x9x130025", "4x9x130026", "4x9x130027", 
"4x9x130028", "4x9x130030", "4x9x130031", "4x9x130032"), class = "factor"), 
    ODIPain = structure(c(3L, 2L, 2L, 1L, 1L, 3L, 2L, 4L, 1L, 
    3L, 1L, 1L, 4L, 3L, 4L, 3L, 2L, 3L, 4L, 4L, 4L, 2L, 3L, 2L, 
    3L, 3L, 4L, 5L, 3L, 4L, 2L, 1L, 1L, 5L, 4L, 4L, 5L, 3L, 2L, 
    6L, 2L, 3L, 2L, 3L, 3L, 3L, 3L, 4L, 1L, 5L, 4L, 2L, 2L, 2L, 
    3L, 6L, 4L, 3L, 3L, 2L, 1L, 1L, 1L, 3L, 4L, 5L, 3L, 3L, 4L, 
    3L, 5L, 6L, 2L, 5L, 4L, 5L, 5L, 5L, 5L, 2L, 3L, 2L, 3L, 4L, 
    5L, 3L, 3L, 3L, 3L, 3L, 5L, 1L, 3L, 1L, 4L, 4L, 3L, 3L, 4L, 
    3L, 3L, 1L, 3L, 3L, 3L, 1L, 1L, 2L, 5L, 4L, 5L, 3L, 4L, 4L, 
    5L, 4L, 4L, 1L, 2L, 3L, 1L, 2L, 1L, 2L, 3L, 5L, 1L, 1L, 1L, 
    2L, 1L, 1L, 3L, 3L, 3L, 2L, 2L, 3L, 3L, 2L, 4L, 1L, 3L, 1L, 
    2L, 2L, 1L, 1L, 1L, 1L, 2L, 3L, 1L, 4L, 1L, 1L, 6L, 6L, 6L, 
    4L, 4L, 3L, 3L, 5L, 3L, 3L, 2L, 1L, 3L, 1L, 1L, 3L, 1L, 1L, 
    1L, 4L, 2L, 4L, 5L, 6L, 5L, 4L, 3L, 4L, 5L, 5L, 3L, 3L, 1L, 
    3L, 4L, 3L, 1L, 1L, 3L, 3L, 2L, 2L, 1L, 1L, 2L, 4L, 6L, 4L, 
    3L, 3L, 2L, 3L, 3L, 4L, 2L, 3L, 3L, 3L, 4L, 4L, 3L, 3L, 5L, 
    3L, 3L, 4L, 3L, 1L, 3L, 3L, 5L, 4L, 2L, 1L, 1L, 2L, 2L, 2L, 
    1L, 2L, 4L, 2L, 1L, 2L, 2L, 2L, 2L, 1L, 3L, 1L, 3L, 3L, 3L, 
    4L, 5L, 3L, 4L, 3L, 3L, 3L, 3L, 1L, 2L, 1L, 3L, 2L, 1L, 2L, 
    2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 3L, 1L, 3L, 4L, 1L, 1L, 1L, 
    3L, 2L, 2L, 1L, 1L, 1L, 3L, 3L, 2L, 1L, 1L, 1L, 3L, 4L, 3L, 
    4L, 6L, 6L, 4L, 4L, 3L, 3L, 5L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 
    2L, 2L, 3L, 3L, 2L, 3L, 3L, 5L, 4L, 3L, 5L, 3L, 3L, 3L, 3L, 
    5L, 5L, 4L, 2L, 3L, 2L, 2L, 1L, 2L), levels = c("0", "1", 
    "2", "3", "4", "5"), class = c("ordered", "factor")), Arm = structure(c(2L, 
    2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 
    2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 
    1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 
    2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 
    2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 
    1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 
    1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 
    1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 
    2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 
    2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 
    2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 
    2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 
    2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 
    1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 
    1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L), levels = c("A", "B"), class = "factor"), Age_centered = c(-6.15315315315316, 
    -6.15315315315316, -6.15315315315316, 12.8468468468468, 12.8468468468468, 
    12.8468468468468, -9.15315315315316, -9.15315315315316, -9.15315315315316, 
    14.8468468468468, 14.8468468468468, 14.8468468468468, 12.8468468468468, 
    12.8468468468468, 12.8468468468468, 2.84684684684684, 2.84684684684684, 
    2.84684684684684, -10.1531531531532, -10.1531531531532, -10.1531531531532, 
    -18.1531531531532, -18.1531531531532, -18.1531531531532, 
    -1.15315315315316, -1.15315315315316, -1.15315315315316, 
    8.84684684684684, 8.84684684684684, 8.84684684684684, -17.1531531531532, 
    -17.1531531531532, -17.1531531531532, 13.8468468468468, 13.8468468468468, 
    13.8468468468468, 9.84684684684684, 9.84684684684684, 9.84684684684684, 
    17.8468468468468, 17.8468468468468, 17.8468468468468, -19.1531531531532, 
    -19.1531531531532, -19.1531531531532, -7.15315315315316, 
    -7.15315315315316, -7.15315315315316, -10.1531531531532, 
    -10.1531531531532, -10.1531531531532, -19.1531531531532, 
    -19.1531531531532, -19.1531531531532, -7.15315315315316, 
    -7.15315315315316, -7.15315315315316, 0.846846846846844, 
    0.846846846846844, 0.846846846846844, -17.1531531531532, 
    -17.1531531531532, -17.1531531531532, 5.84684684684684, 5.84684684684684, 
    5.84684684684684, -25.1531531531532, -25.1531531531532, -25.1531531531532, 
    -1.15315315315316, -1.15315315315316, -1.15315315315316, 
    -15.1531531531532, -15.1531531531532, -15.1531531531532, 
    4.84684684684684, 4.84684684684684, 4.84684684684684, 1.84684684684684, 
    1.84684684684684, 1.84684684684684, 12.8468468468468, 12.8468468468468, 
    12.8468468468468, -11.1531531531532, -11.1531531531532, -11.1531531531532, 
    5.84684684684684, 5.84684684684684, 5.84684684684684, -6.15315315315316, 
    -6.15315315315316, -6.15315315315316, -0.153153153153156, 
    -0.153153153153156, -0.153153153153156, 20.8468468468468, 
    20.8468468468468, 20.8468468468468, 5.84684684684684, 5.84684684684684, 
    5.84684684684684, -0.153153153153156, -0.153153153153156, 
    -0.153153153153156, 12.8468468468468, 12.8468468468468, 12.8468468468468, 
    -19.1531531531532, -19.1531531531532, -19.1531531531532, 
    -11.1531531531532, -11.1531531531532, -11.1531531531532, 
    1.84684684684684, 1.84684684684684, 1.84684684684684, 0.846846846846844, 
    0.846846846846844, 0.846846846846844, -21.1531531531532, 
    -21.1531531531532, -21.1531531531532, 9.84684684684684, 9.84684684684684, 
    9.84684684684684, 15.8468468468468, 15.8468468468468, 15.8468468468468, 
    14.8468468468468, 14.8468468468468, 14.8468468468468, -12.1531531531532, 
    -12.1531531531532, -12.1531531531532, -11.1531531531532, 
    -11.1531531531532, -11.1531531531532, -9.15315315315316, 
    -9.15315315315316, -9.15315315315316, 5.84684684684684, 5.84684684684684, 
    5.84684684684684, -4.15315315315316, -4.15315315315316, -4.15315315315316, 
    12.8468468468468, 12.8468468468468, 12.8468468468468, 1.84684684684684, 
    1.84684684684684, 1.84684684684684, -7.15315315315316, -7.15315315315316, 
    -7.15315315315316, -3.15315315315316, -3.15315315315316, 
    -3.15315315315316, 7.84684684684684, 7.84684684684684, 7.84684684684684, 
    0.846846846846844, 0.846846846846844, 0.846846846846844, 
    -4.15315315315316, -4.15315315315316, -4.15315315315316, 
    5.84684684684684, 5.84684684684684, 5.84684684684684, -0.153153153153156, 
    -0.153153153153156, -0.153153153153156, 1.84684684684684, 
    1.84684684684684, 1.84684684684684, -7.15315315315316, -7.15315315315316, 
    -7.15315315315316, 1.84684684684684, 1.84684684684684, 1.84684684684684, 
    -9.15315315315316, -9.15315315315316, -9.15315315315316, 
    6.84684684684684, 6.84684684684684, 6.84684684684684, 9.84684684684684, 
    9.84684684684684, 9.84684684684684, 17.8468468468468, 17.8468468468468, 
    17.8468468468468, 5.84684684684684, 5.84684684684684, 5.84684684684684, 
    9.84684684684684, 9.84684684684684, 9.84684684684684, -10.1531531531532, 
    -10.1531531531532, -10.1531531531532, -5.15315315315316, 
    -5.15315315315316, -5.15315315315316, 18.8468468468468, 18.8468468468468, 
    18.8468468468468, 21.8468468468468, 21.8468468468468, 21.8468468468468, 
    -0.153153153153156, -0.153153153153156, -0.153153153153156, 
    2.84684684684684, 2.84684684684684, 2.84684684684684, -8.15315315315316, 
    -8.15315315315316, -8.15315315315316, -5.15315315315316, 
    -5.15315315315316, -5.15315315315316, 5.84684684684684, 5.84684684684684, 
    5.84684684684684, 2.84684684684684, 2.84684684684684, 2.84684684684684, 
    -15.1531531531532, -15.1531531531532, -15.1531531531532, 
    2.84684684684684, 2.84684684684684, 2.84684684684684, 25.8468468468468, 
    25.8468468468468, 25.8468468468468, -11.1531531531532, -11.1531531531532, 
    -11.1531531531532, 27.8468468468468, 27.8468468468468, 27.8468468468468, 
    2.84684684684684, 2.84684684684684, 2.84684684684684, 20.8468468468468, 
    20.8468468468468, 20.8468468468468, -0.153153153153156, -0.153153153153156, 
    -0.153153153153156, -2.15315315315316, -2.15315315315316, 
    -2.15315315315316, 12.8468468468468, 12.8468468468468, 12.8468468468468, 
    -0.153153153153156, -0.153153153153156, -0.153153153153156, 
    0.846846846846844, 0.846846846846844, 0.846846846846844, 
    11.8468468468468, 11.8468468468468, 11.8468468468468, -8.15315315315316, 
    -8.15315315315316, -8.15315315315316, 3.84684684684684, 3.84684684684684, 
    3.84684684684684, 22.8468468468468, 22.8468468468468, 22.8468468468468, 
    5.84684684684684, 5.84684684684684, 5.84684684684684, 12.8468468468468, 
    12.8468468468468, 12.8468468468468, 4.84684684684684, 4.84684684684684, 
    4.84684684684684, 11.8468468468468, 11.8468468468468, 11.8468468468468, 
    -5.15315315315316, -5.15315315315316, -5.15315315315316, 
    -17.1531531531532, -17.1531531531532, -17.1531531531532, 
    -7.15315315315316, -7.15315315315316, -7.15315315315316, 
    -16.1531531531532, -16.1531531531532, -16.1531531531532, 
    0.846846846846844, 0.846846846846844, 0.846846846846844, 
    -13.1531531531532, -13.1531531531532, -13.1531531531532, 
    -13.1531531531532, -13.1531531531532, -13.1531531531532, 
    -19.1531531531532, -19.1531531531532, -19.1531531531532, 
    -15.1531531531532, -15.1531531531532, -15.1531531531532, 
    -11.1531531531532, -11.1531531531532, -11.1531531531532, 
    -4.15315315315316, -4.15315315315316, -4.15315315315316, 
    -0.153153153153156, -0.153153153153156, -0.153153153153156, 
    -4.15315315315316, -4.15315315315316, -4.15315315315316, 
    -7.15315315315316, -7.15315315315316, -7.15315315315316), 
    Visit_nOrd = structure(c(1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 
    3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 
    3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 
    3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 
    3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 
    3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 
    3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 
    3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 
    3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 
    3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 
    3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 
    3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 
    3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 
    3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 
    3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 
    3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 
    3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 
    3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 
    3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 
    3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 
    3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 
    3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 
    3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L), levels = c("Month 6", 
    "Month 12", "Month 20"), class = "factor"), ODIPain_n = c(3, 
    2, 2, 1, 1, 3, 2, 4, 1, 3, 1, 1, 4, 3, 4, 3, 2, 3, 4, 4, 
    4, 2, 3, 2, 3, 3, 4, 5, 3, 4, 2, 1, 1, 5, 4, 4, 5, 3, 2, 
    6, 2, 3, 2, 3, 3, 3, 3, 4, 1, 5, 4, 2, 2, 2, 3, 6, 4, 3, 
    3, 2, 1, 1, 1, 3, 4, 5, 3, 3, 4, 3, 5, 6, 2, 5, 4, 5, 5, 
    5, 5, 2, 3, 2, 3, 4, 5, 3, 3, 3, 3, 3, 5, 1, 3, 1, 4, 4, 
    3, 3, 4, 3, 3, 1, 3, 3, 3, 1, 1, 2, 5, 4, 5, 3, 4, 4, 5, 
    4, 4, 1, 2, 3, 1, 2, 1, 2, 3, 5, 1, 1, 1, 2, 1, 1, 3, 3, 
    3, 2, 2, 3, 3, 2, 4, 1, 3, 1, 2, 2, 1, 1, 1, 1, 2, 3, 1, 
    4, 1, 1, 6, 6, 6, 4, 4, 3, 3, 5, 3, 3, 2, 1, 3, 1, 1, 3, 
    1, 1, 1, 4, 2, 4, 5, 6, 5, 4, 3, 4, 5, 5, 3, 3, 1, 3, 4, 
    3, 1, 1, 3, 3, 2, 2, 1, 1, 2, 4, 6, 4, 3, 3, 2, 3, 3, 4, 
    2, 3, 3, 3, 4, 4, 3, 3, 5, 3, 3, 4, 3, 1, 3, 3, 5, 4, 2, 
    1, 1, 2, 2, 2, 1, 2, 4, 2, 1, 2, 2, 2, 2, 1, 3, 1, 3, 3, 
    3, 4, 5, 3, 4, 3, 3, 3, 3, 1, 2, 1, 3, 2, 1, 2, 2, 2, 1, 
    2, 2, 2, 2, 2, 3, 1, 3, 4, 1, 1, 1, 3, 2, 2, 1, 1, 1, 3, 
    3, 2, 1, 1, 1, 3, 4, 3, 4, 6, 6, 4, 4, 3, 3, 5, 3, 3, 3, 
    3, 1, 1, 1, 2, 2, 3, 3, 2, 3, 3, 5, 4, 3, 5, 3, 3, 3, 3, 
    5, 5, 4, 2, 3, 2, 2, 1, 2)), row.names = c(56L, 167L, 278L, 
57L, 168L, 279L, 1L, 112L, 223L, 58L, 169L, 280L, 2L, 113L, 224L, 
59L, 170L, 281L, 3L, 114L, 225L, 60L, 171L, 282L, 61L, 172L, 
283L, 62L, 173L, 284L, 4L, 115L, 226L, 5L, 116L, 227L, 6L, 117L, 
228L, 63L, 174L, 285L, 64L, 175L, 286L, 7L, 118L, 229L, 8L, 119L, 
230L, 65L, 176L, 287L, 9L, 120L, 231L, 66L, 177L, 288L, 67L, 
178L, 289L, 10L, 121L, 232L, 68L, 179L, 290L, 11L, 122L, 233L, 
12L, 123L, 234L, 69L, 180L, 291L, 13L, 124L, 235L, 14L, 125L, 
236L, 70L, 181L, 292L, 71L, 182L, 293L, 72L, 183L, 294L, 15L, 
126L, 237L, 16L, 127L, 238L, 17L, 128L, 239L, 73L, 184L, 295L, 
18L, 129L, 240L, 19L, 130L, 241L, 74L, 185L, 296L, 20L, 131L, 
242L, 75L, 186L, 297L, 76L, 187L, 298L, 77L, 188L, 299L, 21L, 
132L, 243L, 22L, 133L, 244L, 78L, 189L, 300L, 23L, 134L, 245L, 
24L, 135L, 246L, 79L, 190L, 301L, 25L, 136L, 247L, 80L, 191L, 
302L, 26L, 137L, 248L, 81L, 192L, 303L, 27L, 138L, 249L, 82L, 
193L, 304L, 28L, 139L, 250L, 83L, 194L, 305L, 29L, 140L, 251L, 
84L, 195L, 306L, 85L, 196L, 307L, 86L, 197L, 308L, 87L, 198L, 
309L, 30L, 141L, 252L, 88L, 199L, 310L, 89L, 200L, 311L, 31L, 
142L, 253L, 32L, 143L, 254L, 33L, 144L, 255L, 90L, 201L, 312L, 
91L, 202L, 313L, 92L, 203L, 314L, 34L, 145L, 256L, 35L, 146L, 
257L, 36L, 147L, 258L, 37L, 148L, 259L, 38L, 149L, 260L, 93L, 
204L, 315L, 94L, 205L, 316L, 95L, 206L, 317L, 39L, 150L, 261L, 
96L, 207L, 318L, 97L, 208L, 319L, 40L, 151L, 262L, 98L, 209L, 
320L, 41L, 152L, 263L, 42L, 153L, 264L, 99L, 210L, 321L, 43L, 
154L, 265L, 100L, 211L, 322L, 44L, 155L, 266L, 45L, 156L, 267L, 
101L, 212L, 323L, 46L, 157L, 268L, 102L, 213L, 324L, 47L, 158L, 
269L, 48L, 159L, 270L, 103L, 214L, 325L, 49L, 160L, 271L, 104L, 
215L, 326L, 50L, 161L, 272L, 105L, 216L, 327L, 51L, 162L, 273L, 
52L, 163L, 274L, 106L, 217L, 328L, 107L, 218L, 329L, 53L, 164L, 
275L, 54L, 165L, 276L, 108L, 219L, 330L, 55L, 166L, 277L, 109L, 
220L, 331L, 110L, 221L, 332L, 111L, 222L, 333L), class = "data.frame")

It means that ODIPain is the response variable, which has 6 levels. Since for each combination of other factors, the estimates in prob mode must sum to 1, then the average is always 1/6.

I suggest not averaging over ODIPain . Similarly, in other modes where cut is a generated factor, it is fairly meaningless to average over cut. If you want to filter-out the ordinal categories in your estimates, you should use mode = "latent" or mode = "mean.class".

Ah! Got it, it was simple yet I couldn't get it until you showed me that, thank you.

Regarding the joint_tests()

> update(contrast(lord_em,
+                 list("Month 6  : A vs. B" = c(-1, 1, 0, 0, 0, 0),
+                      "Month 12 : A vs. B" = c( 0, 0,-1, 1, 0, 0),
+                      "Month 20 : A vs. B" = c( 0, 0, 0, 0,-1, 1))),
+        adjust="none", level = 0.95, infer = c(TRUE, TRUE))
 contrast           estimate    SE  df asymp.LCL asymp.UCL z.ratio p.value
 Month 6  : A vs. B    0.050 0.325 Inf    -0.586     0.687   0.155  0.8770
 Month 12 : A vs. B   -0.590 0.365 Inf    -1.305     0.126  -1.616  0.1060
 Month 20 : A vs. B   -0.826 0.350 Inf    -1.513    -0.139  -2.357  0.0180

Results are averaged over the levels of: cut 
Confidence level used: 0.95 

> joint_tests(lord_grid)
Error in solve.default(zcov, z) : 
  system is computationally singular: reciprocal condition number = 2.87943e-19
Error in solve.default(zcov, z) : 
  system is computationally singular: reciprocal condition number = 1.65641e-18
Error in rbind(deparse.level, ...) : 
  numbers of columns of arguments do not match

I'm wondering what caused this, since the contrasts estimates showed reasonable values...

Same answer. You averaged over cut. It creates linear dependence.

Right, system is computationally singular: reciprocal condition number = 1.65641e-18. Thank you very much.