Re: [R] loglikelihood and lmer

2006-04-01 Thread Douglas Bates
On 3/31/06, Marco Geraci [EMAIL PROTECTED] wrote:
 Dear R users,
 I am estimating Poisson mixed models using glmmPQL
 (MASS) and lmer (lme4). We know that glmmPQL do not
 provide the correct loglikelihood for such models (it
 gives the loglike of a 'pseudo' or working linear
 mixed model). I would like to know how the loglike is
 calculated by lmer.

Good point.  The person who wrote the documentation (i.e. I) should
have mentioned that.

With lmer, one can fit a generalized linear mixed model using PQL or
by optimizing the Laplacian approximation to the deviance directly. 
Even when you use PQL, which is the default method, the Laplace
approximation is evaluated at the converged parameter estimates.  This
is the value of the loglikelihood that is reported.

I am reconsidering having PQL as the default method for fitting
generalized linear mixed models with lmer. I would appreciate it if
you and others who do fit such models could tell me if it is
noticeably slower or less reliable to do direct optimization of the
Laplace approximaiton.  That is, if you use the combination of
optional arguments method = Laplace and control = list(usePQL =
FALSE) does the fit take substantially longer?

On your example I get

 system.time(fit1.lmer - lmer(z ~ X-1 + (1|id), family=poisson))
[1] 0.48 0.01 0.54 0.00 0.00
 system.time(fit2.lmer - lmer(z ~ X-1 + (1|id), family=poisson, method = 
 Laplace, control = list(usePQL = FALSE)))
[1] 0.61 0.00 0.62 0.00 0.00
 fit1.lmer
Generalized linear mixed model fit using PQL
Formula: z ~ X - 1 + (1 | id)
 Family: poisson(log link)
  AIC  BIClogLik deviance
 922.2406 934.8844 -458.1203 916.2406
Random effects:
 Groups NameVariance Std.Dev.
 id (Intercept) 0.82446  0.908
number of obs: 500, groups: id, 100

Estimated scale (compare to 1)  1.021129

Fixed effects:
   Estimate Std. Error z value  Pr(|z|)
X1 1.003639   0.098373  10.202  2.2e-16 ***
X2 2.075037   0.052099  39.829  2.2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Correlation of Fixed Effects:
   X1
X2 -0.337
 fit2.lmer
Generalized linear mixed model fit using Laplace
Formula: z ~ X - 1 + (1 | id)
 Family: poisson(log link)
 AIC  BIC   logLik deviance
 921.958 934.6019 -457.979  915.958
Random effects:
 Groups NameVariance Std.Dev.
 id (Intercept) 0.8895   0.94313
number of obs: 500, groups: id, 100

Estimated scale (compare to 1)  0.04472136

Fixed effects:
   Estimate Std. Error z value  Pr(|z|)
X1 0.985721   0.101645   9.698  2.2e-16 ***
X2 2.075060   0.052114  39.818  2.2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Correlation of Fixed Effects:
   X1
X2 -0.326

The only unexpected part of that output is the estimated scale which
is wrong (well, it is never calculated in this case and consequently
should not be displayed).

 A minor question is: why do glmmPQL and lmer give
 different degrees-of-freedom for the same estimated
 model? Does glmmPQL consider the scale parameter 'phi'
 as a degree of freedom?

I believe that is the reason.  The class of an object fit by glmmPQL is
 class(fm1)
[1] glmmPQL lme

and the only method I could find for the glmmPQL class is
 methods(class = glmmPQL)
[1] predict.glmmPQL*

   Non-visible functions are asterisked

Generic functions other than predict will choose the method for the
lme class of linear mixed effects models (or, if there isn't an lme
method, the default method).  The lme methods defined in the nlme
package are appropriate for linear mixed effects models (which is what
Jose and I wrote them for) and typically are not appropriate for a
generalized linear mixed model.

 A toy example

 set.seed(100)
 m - 5
 n - 100
 N - n*m
 X - cbind(1,runif(N))
 Z - kronecker(diag(n),rep(1,m))
 z - rpois(N, exp(X%*%matrix(c(1,2)) +
 Z%*%matrix(rnorm(n
 id - rep(1:n,each=m)
 fit.glmm - glmmPQL(z ~ X-1, random = ~1|id,
 family=poisson,verbose=F)
 fit.lmer - lmer(z ~ X-1 + (1|id),
 family=poisson,verbose=F)

  logLik(fit.glmm)
 'log Lik.' -386.4373 (df=4)
  logLik(fit.lmer)
 'log Lik.' -458.1203 (df=3)

 Thanks,
 Marco



  sessionInfo()
 R version 2.2.1, 2005-12-20, i386-pc-mingw32

 attached base packages:
 [1] methods   stats graphics  grDevices
 utils
 [6] datasets  base

 other attached packages:
mvtnormSemiParcluster   lme4lattice
 Matrix
0.7-21.0-1   1.10.4  0.995-2  0.12-11
  0.995-5
   nlme   MASS
 3.1-68.1   7.2-24
 

 __
 R-help@stat.math.ethz.ch mailing list
 https://stat.ethz.ch/mailman/listinfo/r-help
 PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html


__
R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html


[R] loglikelihood and lmer

2006-03-31 Thread Marco Geraci
Dear R users,
I am estimating Poisson mixed models using glmmPQL
(MASS) and lmer (lme4). We know that glmmPQL do not
provide the correct loglikelihood for such models (it
gives the loglike of a 'pseudo' or working linear
mixed model). I would like to know how the loglike is
calculated by lmer.
A minor question is: why do glmmPQL and lmer give
different degrees-of-freedom for the same estimated
model? Does glmmPQL consider the scale parameter 'phi'
as a degree of freedom?

A toy example

set.seed(100)
m - 5
n - 100
N - n*m
X - cbind(1,runif(N))
Z - kronecker(diag(n),rep(1,m))
z - rpois(N, exp(X%*%matrix(c(1,2)) +
Z%*%matrix(rnorm(n
id - rep(1:n,each=m)
fit.glmm - glmmPQL(z ~ X-1, random = ~1|id,
family=poisson,verbose=F)
fit.lmer - lmer(z ~ X-1 + (1|id),
family=poisson,verbose=F)

 logLik(fit.glmm)
'log Lik.' -386.4373 (df=4)
 logLik(fit.lmer)
'log Lik.' -458.1203 (df=3)

Thanks,
Marco


 
 sessionInfo()
R version 2.2.1, 2005-12-20, i386-pc-mingw32 

attached base packages:
[1] methods   stats graphics  grDevices
utils
[6] datasets  base 

other attached packages:
   mvtnormSemiParcluster   lme4lattice
Matrix 
   0.7-21.0-1   1.10.4  0.995-2  0.12-11
 0.995-5 
  nlme   MASS 
3.1-68.1   7.2-24 


__
R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html