gratia icon indicating copy to clipboard operation
gratia copied to clipboard

`draw` forgets order of ordered factor

Open mhpob opened this issue 1 month ago • 0 comments

Everything evaluates fine, but the terms are not ordered after parametric_effects and plotted in alphabetical order.

The factor and its ordering look to become purposefully uncoupled into row order, an "ordered" type, and an unordered character representation of the levels in parametric_effects. The row ordering is not passed on to the base plotting step of draw_parametric_effect.

> library(mgcv)
Loading required package: nlme
This is mgcv 1.9-1. For overview type 'help("mgcv-package")'.
> library(gratia)
> 
> df <- data_sim("eg1", seed = 42)
> df$month <- factor(
+   rep(month.abb[1:10], times = 40),
+   levels = month.abb[1:10],
+   ordered = T
+ )
> 
> class(df$month)
[1] "ordered" "factor" 
> levels(df$month)
 [1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct"
> 
> m <- gam(y ~ month + s(x0) + s(x1) + s(x2) + s(x3), data = df, method = "REML")
> summary(m)

Family: gaussian 
Link function: identity 

Formula:
y ~ month + s(x0) + s(x1) + s(x2) + s(x3)

Parametric coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  7.49514    0.10571  70.901   <2e-16 ***
month.L     -0.10830    0.33948  -0.319    0.750    
month.Q      0.37636    0.34039   1.106    0.270    
month.C      0.42859    0.33954   1.262    0.208    
month^4     -0.17750    0.34422  -0.516    0.606    
month^5      0.33674    0.34115   0.987    0.324    
month^6      0.12809    0.34837   0.368    0.713    
month^7     -0.07840    0.33997  -0.231    0.818    
month^8     -0.09706    0.33962  -0.286    0.775    
month^9      0.03407    0.34168   0.100    0.921    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Approximate significance of smooth terms:
        edf Ref.df      F  p-value    
s(x0) 3.358  4.165  8.438 1.73e-06 ***
s(x1) 3.112  3.871 66.289  < 2e-16 ***
s(x2) 7.889  8.676 66.775  < 2e-16 ***
s(x3) 1.902  2.382  2.810    0.054 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

R-sq.(adj) =  0.682   Deviance explained = 70.2%
-REML = 886.14  Scale est. = 4.47      n = 400
> 
> parametric_effects(m, terms ='month')
# A tibble: 10 × 5
   term  type    .level .partial   .se
   <chr> <chr>   <chr>     <dbl> <dbl>
 1 month ordered Jan    -0.0591  0.322
 2 month ordered Feb     0.352   0.326
 3 month ordered Mar     0.251   0.325
 4 month ordered Apr    -0.00511 0.324
 5 month ordered May    -0.312   0.322
 6 month ordered Jun    -0.200   0.329
 7 month ordered Jul    -0.0499  0.324
 8 month ordered Aug    -0.176   0.326
 9 month ordered Sep    -0.159   0.321
10 month ordered Oct     0.359   0.322
> 
> parametric_effects(m, terms ='month') |> 
+   draw()

image

mhpob avatar May 06 '24 19:05 mhpob