tidymodels / multilevelmod

Parsnip wrappers for mixed-level and hierarchical models
https://multilevelmod.tidymodels.org/
Other
74 stars 3 forks source link

Can I use lme()? #17

Closed RaymondBalise closed 2 years ago

RaymondBalise commented 2 years ago

I am super happy to see this package coming to life! Is there a way to interface with lme() or is it in the pipeline somewhere? I think I need it to accommodate heterogeneous error variance (which I think lmer() cannot do).

topepo commented 2 years ago

Can you give us an an example of what cannot be done? I thought that lmer() could do that.

RaymondBalise commented 2 years ago

The issue is with fitting models with heterogeneous error variance structures. For example, see the R (lme) code for Chapter 3 from Linear Mixed Models: A Practical Guide Using Statistical Software (Second Edition):

http://www-personal.umich.edu/~bwest/chapter3_R_final.R

topepo commented 2 years ago

My understanding is that you can (if the design supports it). We use the heterogeneous covariance structure in tidyposterior.

Here's an example from ?lmer:

library(lme4)
#> Loading required package: Matrix

data(Orthodont, package = "nlme")

Orthodont$nsex <- as.numeric(Orthodont$Sex == "Male")
Orthodont$nsexage <- with(Orthodont, nsex * age)

lmer(distance ~ 
       age + 
       (age | Subject) + 
       (0 + nsex | Subject) + 
       (0 + nsexage | Subject),
     data = Orthodont)
#> boundary (singular) fit: see ?isSingular
#> Linear mixed model fit by REML ['lmerMod']
#> Formula: distance ~ age + (age | Subject) + (0 + nsex | Subject) + (0 +  
#>     nsexage | Subject)
#>    Data: Orthodont
#> REML criterion at convergence: 442.6367
#> Random effects:
#>  Groups    Name        Std.Dev.  Corr 
#>  Subject   (Intercept) 2.3268096      
#>            age         0.2264158 -0.61
#>  Subject.1 nsex        0.0001559      
#>  Subject.2 nsexage     0.0000000      
#>  Residual              1.3100560      
#> Number of obs: 108, groups:  Subject, 27
#> Fixed Effects:
#> (Intercept)          age  
#>     16.7611       0.6602  
#> optimizer (nloptwrap) convergence code: 0 (OK) ; 0 optimizer warnings; 1 lme4 warnings

Created on 2021-11-29 by the reprex package (v2.0.0)

Does this type of formula cover your use-case?

RaymondBalise commented 2 years ago

Sorry but no, this is not what I'm talking about. I'm talking about heterogeneous error variance. That is, the residual errors arise from distributions with different variance (as in the case of the Rat Pup example was included above).

github-actions[bot] commented 2 years ago

This issue has been automatically locked. If you believe you have found a related problem, please file a new issue (with a reprex: https://reprex.tidyverse.org) and link to this issue.