[R-sig-ME] Log likelihood of a glmer() binomial model .
Ben Bolker
bbo|ker @end|ng |rom gm@||@com
Sat Jan 30 21:54:59 CET 2021
"marginal" is unfortunately a word that has different meanings in
different contexts, I'm still trying to sort it out in my own mind.
GLMMadaptive doesn't do marginal _predictions_ but it does do
marginal _coefficients_.
I put up some example workings at
http://bbolker.github.io/mixedmodels-misc/notes/marginal_ex.html?de49a7770f7
(the hash at the end may be unnecessary for you).
If you average across simulations with newdata= set that should give
you marginal predictions ...
On 1/30/21 9:23 AM, Juho Kristian Ruohonen wrote:
> Sorry to revive the thread after 21 months, but the topic has just
> become highly relevant. My question concerns the following remark by Ben:
>
> As far as what predict() does: depending on the value of re.form, it
> either gives a population-level prediction (R=0) or a conditional
> prediction (R set to its conditional mode). You might be looking for
> *marginal* predictions (which Rizopoulous's GLMMadaptive package can
> do ...)
>
>
> Does "marginal predictions" here mean predictions based exclusively on
> the "population-averaged" fixed-effect estimates that are equivalent to
> onescalculated by *gee()* from the /gee/ library and *geeglm()* from the
> /geepack /library? Or does it mean predictions calculated using the GLMM
> estimates of the fixed effects and then averaged with respect to the
> estimated random-effects distribution? If it means the former, aren't
> those predictions easily obtainable through a standard GLM that ignores
> the clustering? If it means the latter, could someone please point out
> how exactly to calculate such marginal predictions using GLMMadaptive?
> I've been trying to figure out how to manually calculate the marginal
> (latter sense) LL for binomial GLMMs, with no success so far...
>
> Best,
>
> J
>
> la 20. huhtik. 2019 klo 17.51 Ben Bolker (bbolker using gmail.com
> <mailto:bbolker using gmail.com>) kirjoitti:
>
>
> I agree with Juho that there's a typo -- would be something like.
>
> sum((y==1)*log(pred_prob) + (y==0)*log(1-pred_prob))
>
> As far as what predict() does: depending on the value of re.form, it
> either gives a population-level prediction (R=0) or a conditional
> prediction (R set to its conditional mode). You might be looking for
> *marginal* predictions (which Rizopoulous's GLMMadaptive package can
> do ...)
>
>
> On 2019-04-20 3:42 a.m., Juho Kristian Ruohonen wrote:
> > Rolf: Forgive my ignorance, but isn't the relevant log-likelihood
> here
> > the log-likelihood of the observed responses in the validation
> set given
> > the model-predicted probabilities? I.e. sum(dbinom(VS$y, size = VS$n,
> > prob = predict(fit, newdata = VS, type = "response"), log =
> TRUE))? Even
> > this would be somewhat off because dbinom() isn't aware of the
> > random-effects integral business. But it looks to me like your
> current
> > call is calculating the log-sum of the predicted probabilities of
> y = 1
> > in the validation set, not the loglikelihood of the observed
> responses
> > in the validation set.
> >
> > la 20. huhtik. 2019 klo 8.51 Rolf Turner (r.turner using auckland.ac.nz
> <mailto:r.turner using auckland.ac.nz>
> > <mailto:r.turner using auckland.ac.nz
> <mailto:r.turner using auckland.ac.nz>>) kirjoitti:
> >
> >
> > On 20/04/19 12:44 PM, Ben Bolker wrote:
> >
> > > This seems wrong.
> >
> > Yeah, that figures.
> >
> > > The GLMM log-likelihood includes an integral over
> > > the distribution of the random effects.
> >
> > I was aware of this. I guess what I was naïvely expecting
> was that
> > predict.merMod() would handle this. I.e. that this predict
> method
> > (with type = "response") would return, for each observed y_i
> in the
> > (new) data set
> >
> > Pr(Y = y_i) = \int_0 Pr(Y = y_i | R = r) f(r) dr
> >
> > where R is the vector of random effects and f(r) is its
> probability
> > density function (multivariate normal, with mean 0 and some
> covariance
> > matrix, which has been estimated in the fitting process.
> >
> > I guess that this is *not* what predict.merMod() returns ---
> but I
> > don't
> > understand why not. It seems to me that this is what it "should"
> > return.
> >
> > I'm probably misunderstanding something, possibly simple,
> possibly
> > subtle.
> >
> > Apropos of nothing much, what *does* predict.merMod() return?
> > Maybe Pr(Y = y_i | R = 0) ???
> >
> > <SNIP>
> > > Here is an **inefficient** method for computing the
> likelihood
> > >
> > > coefs <- unlist(getME(fit,c("theta","beta"))
> > > newdev <- update(fit, data=VS, devFunOnly=TRUE)
> > > newdev(coefs)
> > >
> > > This is slow because it has to reconstruct all of the
> random-effects
> > > matrices, do permutations to reorder the relevant matrices
> to be as
> > > sparse as possible, etc. etc.
> >
> > Thanks for this. I'll give it a go. I think that the
> slowness may not
> > be an overwhelming drawback. Anyhow I shall try to test it out.
> >
> > Thanks again.
> >
> > cheers,
> >
> > Rolf
> >
> > --
> > Honorary Research Fellow
> > Department of Statistics
> > University of Auckland
> > Phone: +64-9-373-7599 ext. 88276
> >
> > _______________________________________________
> > 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
> <https://stat.ethz.ch/mailman/listinfo/r-sig-mixed-models>
> >
>
More information about the R-sig-mixed-models
mailing list