[R-sig-ME] Using broom.mixed library with lme4
Simon Harmel
@|m@h@rme| @end|ng |rom gm@||@com
Wed Nov 11 01:42:14 CET 2020
Much appreciated Phillip!
On Tue, Nov 10, 2020 at 6:23 PM Phillip Alday <phillip.alday using mpi.nl> wrote:
> As I indicated in my initial response, I'm guessing no because mice
> depends on the model fitting function returning standard errors for
> imputed estimates and lme4 does not do that for random effects. (The
> sampling distribution of the random effects is very skewed, so standard
> errors really don't make much sense as a summary.)
>
> Although I really, really don't recommend it, there are R packages
> implementing standard errors for variance components in lme4. (To show
> my lack of recommendation, I'm not providing links.) With those, you
> could then compute the pooled estimates / implement the necessary
> functions to have mice do it for you.
>
> Phillip
>
> On 11/11/20 12:16 am, Simon Harmel wrote:
> > Sorry guys, I found what the problem was! I didn't use `summary()` after
> > the pool() call! However, it there a way to find out how the estimates
> > of random-effects can be pooled across the imputations?
> >
> > On Tue, Nov 10, 2020 at 5:01 PM Phillip Alday <phillip.alday using mpi.nl
> > <mailto:phillip.alday using mpi.nl>> wrote:
> >
> > I'm a bit confused now and think a point is being missed, although
> I'm
> > not sure where.
> >
> > Zach pointed out that the Rubin Rule is being applied. Both Zach and
> I
> > pointed out that you still get the pooled estimate and that the ubar
> and
> > b columns are uncertainty on the pooled estimate. In some quick tries
> > with example datasets, it seems that you don't get the ubar and b
> > columns for lm() fits, but I'm guessing that this means that it's not
> > possible to break down the variance of t (total variance of estimate)
> > into between and within estimates for non mixed models.
> >
> > In other words, it seems that pool does more for lmer() than it does
> for
> > lm(), not less.
> >
> > Your original question asked about the random effects, and we pointed
> > out that the the pool() table doesn't have the random effects from
> the
> > lmer() fit.
> >
> > This becomes even clearer if you call summary() on the value of
> pool():
> >
> > > summary(pool(fit))
> > term estimate std.error statistic df p.value
> > 1 (Intercept) 4.8932366 0.08966606 54.57178 521.81717 0.000000e+00
> > 2 sex 0.8772664 0.05428838 16.15938 11.17712 4.226618e-09
> >
> > (and that use of summary() is from the documentation Zach linked).
> >
> > Can you try to pose your question a different way if we're
> > misunderstanding?
> >
> > Best,
> > Phillip
> >
> > On 10/11/20 11:26 pm, Simon Harmel wrote:
> > > Thanks. I think a point is being missed. I did have carefully
> > read the
> > > documentation. And pool() is in fact supposed to apply the RUBIN
> RULE
> > > and pool across the estimates from 5 imputed datasets.
> > >
> > > For lm() objects, pool() does what I describe above. But it seems,
> it
> > > doesn't do the same for the lmer() objects.
> > >
> > > That was really the core of my question and l was wondering if a
> > > solution to it might be available?
> > >
> > >
> > > There is no documentation on that.
> > >
> > > On Tue, Nov 10, 2020, 3:28 PM Zach Simpson <zpsimpso using gmail.com
> > <mailto:zpsimpso using gmail.com>
> > > <mailto:zpsimpso using gmail.com <mailto:zpsimpso using gmail.com>>> wrote:
> > >
> > > Just to add to Phillip's answer, the ubar has to do with the
> > multiple
> > > imputation procedure: ubar is the within-imputation variance
> > of the
> > > sex term. You fitted 5 lmer models on 5 'completed' datasets
> whose
> > > NA's were filled using default imputation procedures from mice.
> > > mice::pool() combines these m=5 fits using Rubin's rules.
> There's
> > > uncertainty in model estimates due to the data itself as well
> > as the
> > > imputation uncertainty.
> > >
> > > Stef van Buuren has put online an enormous amount of
> > documentation,
> > > which would pay dividends to read:
> > >
> > > https://amices.org/mice/
> > >
> > > HTH
> > > Zach
> > >
> > > > Why do you think ubar is for the random effects? In my very
> > quick skim
> > > > of the documentation, I didn't see anything indicating that.
> > > Looking at
> > > > the structures in `fit`, I see:
> > > >
> > > > > tidy(fit$analyses[[5]])
> > > > # A tibble: 4 x 6
> > > > effect group term estimate std.error
> statistic
> > > > <chr> <chr> <chr> <dbl> <dbl>
> <dbl>
> > > > 1 fixed NA (Intercept) 4.91 0.0855
> 57.4
> > > > 2 fixed NA sex 0.853 0.0350
> 24.4
> > > > 3 ran_pars school sd__(Intercept) 0.820 NA
> NA
> > > > 4 ran_pars Residual sd__Observation 0.767 NA
> NA
> > > >
> > > > None of the random effects line up with the output of pool().
> > > Moreover,
> > > > the pool() documentation notes that it needs the standard
> > error of
> > > each
> > > > estimate, but lme4 doesn't produce those (for good reason)
> > for random
> > > > effects, so pool() won't produce pooled estimates for the
> random
> > > effects.
> > > >
> > > > The pool() documentation mentions the mipo class, so I
> > looked at ?mipo
> > > > and found this:
> > > >
> > > >
> > > > ‘estimate’ Pooled complete data estimate
> > > > ‘ubar’ Within-imputation variance of ‘estimate’
> > > > ‘b’ Between-imputation variance of ‘estimate’
> > > > ‘t’ Total variance, of ‘estimate’
> > > > ‘dfcom’ Degrees of freedom in complete data
> > > > ‘df’ Degrees of freedom of $t$-statistic
> > > > ‘riv’ Relative increase in variance
> > > > ‘lambda’ Proportion attributable to the missingness
> > > > ‘fmi’ Fraction of missing information
> > > >
> > > >
> > > > So `ubar` and `b` are perhaps random effects, but not in the
> > sense
> > > > you're thinking of, but rather the random effects that go
> into
> > > > imputation procedures (this is a guess on my part). I don't
> > know much
> > > > about imputation, but I suspect this is analogous to the
> > parallels
> > > > between mixed models and meta-analysis
> > > >
> > (http://www.metafor-project.org/doku.php/tips:rma_vs_lm_lme_lmer).
> But
> > > > again, this is rapidly getting out of my area of expertise
> and
> > > into the
> > > > expertise of other members of this list (e.g. Wolfgang
> > Viechtbauer for
> > > > meta analysis).
> > > >
> > > > Phillip
> > > >
> > > > On 10/11/20 7:17 am, Simon Harmel wrote:
> > > > > Dear All,
> > > > >
> > > > > Belwo, I've used library `broom.mixed` and imputed some
> data
> > > with library
> > > > > `mice` to then fit a "random-intercept" `lmer()` model.
> > > > >
> > > > > BUT I wonder why after I `pool()` my analyses, there is an
> > extra
> > > "ubar"
> > > > > (random-effect) for slope (`sex`) which is not even in the
> > model?!
> > > > >
> > > > > library(mice)
> > > > > library(lme4)
> > > > > library(broom.mixed)
> > > > >
> > > > > imp <- mice(popmis, m = 5) # `popmis` is a dataset from
> `mice`
> > > > >
> > > > > fit <- with(data = imp, exp = lme4::lmer(popular ~ sex +
> > > (1|school)))
> > > > >
> > > > > pool(fit)
> > > > >
> > > > > ### `ubar` is the random effect for intercept
> > (0.007524509) BUT
> > > WHY we see
> > > > > a ubar ALSO for `sex` (0.001177781)?
> > > > >
> > > > > Class: mipo m = 5
> > > > > term m estimate ubar b
> > t dfcom
> > > > > df
> > > > > 1 (Intercept) 5 4.9007789 0.007524509 0.0004845564
> > 0.008105977 1996
> > > > > 547.44383
> > > > > 2 sex 5 0.8617941 0.001177781 0.0015867795
> > 0.003081916 1996
> > > > > 10.33653
> > > > > riv lambda fmi
> > > > > 1 0.0772765 0.07173321 0.0751060
> > > > > 2 1.6167147 0.61784141 0.6751515
> > > > >
> > > > > [[alternative HTML version deleted]]
> > > > >
> > > > > _______________________________________________
> > > > > R-sig-mixed-models using r-project.org
> > <mailto:R-sig-mixed-models using r-project.org>
> > > <mailto:R-sig-mixed-models using r-project.org
> > <mailto:R-sig-mixed-models using r-project.org>> mailing list
> > > > > https://stat.ethz.ch/mailman/listinfo/r-sig-mixed-models
> > > > >
> > >
> >
>
[[alternative HTML version deleted]]
More information about the R-sig-mixed-models
mailing list