1

I can run the rlmer model with the object that results from mice, but when I try to pool the results a get the message Error: No tidy method for objects of class rlmerMod. Is there an alternative?

Below there is a reproducible example of my data and models:

set.seed(1)
library(data.table)
library(robustlmm)
library(mice)
library(miceadds)

dt <- data.table(id = rep(1:10, each=3), 
                 group = rep(1:2, each=15),
                 time = rep(1:3, 10),
                 sex = rep(sample(c("F","M"),10,replace=T), each=3),
                 x = rnorm(30),
                 y = rnorm(30))

setDT(dt)[id %in% sample(1:10,4) & time == 2, `:=` (x = NA, y = NA)][
          id %in% sample(1:10,4) & time == 3, `:=` (x = NA, y = NA)]
                        
# Multiple imputation -------------------------------------------------------------------

pm <- make.predictorMatrix(dt)
pm[,c('x','y')] <- 0
pm[c('x','y'), 'id'] <- -2
imp <- mice(dt, pred = pm, meth = "2l.pmm", seed = 1, m = 2, print = FALSE, maxit = 20)

# Modelling -----------------------------------------------------------------------------

m <- with(imp, rlmer(y ~ 1 + time * group + sex + (1 | id), REML=F))
pool.fit <- pool(m)

> pool.fit <- pool(m)
Error: No tidy method for objects of class rlmerMod
In addition: Warning message:
In get.dfcom(object, dfcom) : Infinite sample size assumed. # I don't get this warning using my real data

Thank you!

EDIT:

As commented by @BenBolker, library(broom.mixed) gets pool.fit to run without errors. Hovever, summary(pool.fit,conf.int = TRUE) returns the estimates, but NaN for degrees of freedom, p values and confidence intervals.

library(broom.mixed)

pool.fit <- pool(m)
summary(pool.fit,conf.int = TRUE)

         term    estimate std.error   statistic  df p.value 2.5 % 97.5 %
1 (Intercept) -1.31638288 1.2221584 -1.07709683 NaN     NaN   NaN    NaN
2        time  0.02819273 0.4734632  0.05954578 NaN     NaN   NaN    NaN
3       group  1.49581955 0.8776475  1.70435124 NaN     NaN   NaN    NaN
4        sexM -0.61383469 0.7137998 -0.85995356 NaN     NaN   NaN    NaN
5  time:group -0.25690287 0.3005254 -0.85484573 NaN     NaN   NaN    NaN

I don't know if another parameter is needed (eg., for defining the df method).

For now, I tried tbl_regression(m) but it didn't work either:

> tbl_regression(m)
pool_and_tidy_mice(): Tidying mice model with
`mice::pool(x) %>% mice::tidy(exponentiate = FALSE, conf.int = TRUE, conf.level = 0.95)`
Error in match.call() : ... used in a situation where it does not exist # how to correct this?
In addition: Warning message:
In get.dfcom(object, dfcom) : Infinite sample size assumed. # again, this warning don't occur with my original data

Any tip?

Ben Bolker
  • 211,554
  • 25
  • 370
  • 453
MDSF
  • 123
  • 6
  • Hmm, I'm getting different answers (and not `NaN` values). From `sessionInfo()`, I have `broom.mixed_0.2.8 miceadds_3.11-6 mice_3.14.0 robustlmm_2.4-5 lme4_1.1-27.1 Matrix_1.3-4 data.table_1.14.2` ... – Ben Bolker Dec 07 '21 at 21:55
  • I've updated R and packages and now I get all the information in `summary()`. The estimates are also different from those posted before (surely my mistake with set.seed). For example, now I get `-0.0248` for `(Intercept)` . Thank you @BenBolker – MDSF Dec 08 '21 at 02:11
  • OK, if my answer solves your problem then you are encouraged to click the check-mark to accept it ... – Ben Bolker Dec 08 '21 at 14:07

1 Answers1

1

Just load the broom.mixed package, which has tidiers for rlmerMod objects. (The development version of broom.mixed has a get_methods() function:

remotes::install_github("bbolker/broom.mixed")
library(broom.mixed)
print(get_methods(), n = Inf)
# A tibble: 22 × 4
   class     tidy  glance augment
   <chr>     <lgl> <lgl>  <lgl>  
 1 allFit    TRUE  TRUE   FALSE  
 2 brmsfit   TRUE  TRUE   TRUE   
 3 gamlss    TRUE  TRUE   FALSE  
 4 gamm4     TRUE  TRUE   TRUE   
 5 glmmadmb  TRUE  TRUE   TRUE   
 6 glmmTMB   TRUE  TRUE   TRUE   
 7 gls       TRUE  TRUE   TRUE   
 8 lme       TRUE  TRUE   TRUE   
 9 lmList4   TRUE  FALSE  FALSE  
10 mcmc      TRUE  FALSE  FALSE  
11 mcmc.list TRUE  FALSE  FALSE  
12 MCMCglmm  TRUE  FALSE  FALSE  
13 merMod    TRUE  TRUE   TRUE   
14 MixMod    TRUE  FALSE  FALSE  
15 ranef.mer FALSE FALSE  TRUE   
16 rjags     TRUE  FALSE  FALSE  
17 rlmerMod  TRUE  FALSE  FALSE  
18 stanfit   TRUE  FALSE  FALSE  
19 stanreg   TRUE  TRUE   FALSE  
20 TMB       TRUE  FALSE  FALSE  
21 varComb   TRUE  FALSE  FALSE  
22 varFunc   TRUE  FALSE  FALSE  
Ben Bolker
  • 211,554
  • 25
  • 370
  • 453
  • Thank you @BenBolker! It works indeed, but `summary(pool.fit,conf.int = TRUE)` returns `NaN` for df, p.values and confidence intervals. Do I need to add more parameters to the function? – MDSF Dec 07 '21 at 16:43
  • I'll check ..... – Ben Bolker Dec 07 '21 at 20:00