[R] extracting p-values from lmer outputs

Lngmyers lngmyers at ccu.edu.tw
Sat Mar 4 03:45:55 CET 2006

Thanks to Martin Maechler for the helpful information below.

I guess I didn't make myself clear enough. I had already discovered all
them slots in lmer objects, but these are apparently mostly input things
or things created in the course of the analysis, not the output itself
-- that is, it still takes work to derive from them the text printed on
the screen when lmer is used. I am a mere mortal, not a statistician.

The output of anova(lmerout) (where "lmerout" is a lmer object) is an
ordinary list, so the lines it prints are easy to access, but this is
not true of lmerout itself. I didn't want anova(lmerout) because, as MM
said, certain key values have been suppressed to avoid controversial.

However, the version of lmer currently available on CRAN (lme4 0.995-2
2006-01-17 and Matrix 0.995-5 2006-02-07) still gives p-values for GLMM.
I assumed that they weren't banned there because they're calculated
using z values, making DF irrelevant. The datasets I'll be using always
have over 600 observations, so z values should work fine.

So two questions:

(1) Are the fixed-effects p-values produced by lmer for GLMM still
considered to be valid, or were they left in the last revision by
mistake? Should I give up on these p-values and test for significance of
each fixed effect by using anova(full-model,

(2) Assuming the p-values given by lmer for GLMM are valid, is there any
easy way to derive them from a lmer object? Thanks to MM's tip, I looked
more closely and found the estimates for the fixed effects, but I don't
see standard errors or z values. They must be readily calculable from
what's in the lmer object, but I'm too ignorant to figure it out myself.

James Myers
Graduate Institute of Linguistics
National Chung Cheng University
168 University Road, Min-Hsiung
Chia-Yi 62102
Email:  Lngmyers at ccu.edu.tw
Web:    http://www.ccunix.ccu.edu.tw/~lngmyers/
Phone:  886-5-242-8251
Fax:    886-5-272-1654

Martin Maechler wrote:
> >>>>> "lngmyers" == lngmyers  <lngmyers at ccu.edu.tw>
> >>>>>     on Fri, 3 Mar 2006 21:54:52 +0800 (CST) writes:
>     lngmyers> I would like to write a function that runs GLMM using lmer
>     lngmyers> on a user-input model containing interactions, but if the
>     lngmyers> model doesn't produce significant results for the interaction,
>     lngmyers> a reduced model will be run without the interaction.
>     lngmyers> Doing this seems to require getting the p-values out of an
>     lngmyers> lmer object, but I don't know how to do this. (The grand
>     lngmyers> DF debate seems to be irrelevant since the number of observations
>     lngmyers> for what I want to do with this will always be over 600 or so.)
>     lngmyers> The problem is that the output of lmer is a list of length 0.
>     lngmyers> My "brilliant" idea, shown below, is to divert the display to
>     lngmyers> a file, then read the file as a string. I guess it's useful
>     lngmyers> to save the full summary somewhere, but is there really
>     lngmyers> no more elegant way to do this?
> I'm not answering your question directly,
> just the (implicit)
>        ``how can I extract parts from an 'lmer' object ? ''
> If you used    str(lmerout)
> to inspect the STRucture of the lmerout object,
> you'd seen something like
> > str(lmerout)
> Formal class 'lmer' [package "Matrix"] with 35 slots
>   ..@ assign  : int(0)
>   ..@ frame   :`data.frame':    180 obs. of  3 variables:
>   .. ..$ Reaction: num [1:180] 250 259 251 321 357 ...
>   .. ..$ Days    : num [1:180] 0 1 2 3 4 5 6 7 8 9 ...
>   .. ..$ Subject : Factor w/ 18 levels "308","309","310",..: 1 1 1 1 1 1 1 1 1 1 ...
>   ............
>   ............
> which tells you two things (and more) :
> 1) you have an object of a *formal* class,
>    ``i.e.'' an S4 object
> 2) you can (and typically will) use  " lmerout @ <slotname> "
>    to extract the slots of your lmerout result object.
> Note that the above is a low-level / technical approach and you
> should rather work with the official documentation:
>  ?lmer             points you to "lmer-class" and
>  class ? lmer   or
>  ?lmer-class    {that one is needed for ESS}
> contains a description of the "lmer" object and its (most
> important) slots.
> Note BTW that in the most uptodate versions of  'lme4'/'Matrix'
> you won't get any P-values anymore directly
> {just because of the never-ending "DF war"}.
> Martin Maechler, ETH Zurich
>     lngmyers> - James Myers
>     lngmyers> National Chung Cheng University
>     lngmyers> Minhsiung Chiayi 621 Taiwan
>     lngmyers> lmerout = lmer(Y ~ X1 * X2 + (1|Subj), data = dat, family = "binomial")
>     lngmyers> sink("lmerout.txt")
>     lngmyers> lmerout
>     lngmyers> sink()
>     lngmyers> lmerout.string = readChar("lmerout.txt",20000)
>     lngmyers> splitstring = strsplit(lmerout.string,"\r\n")
>     lngmyers> # If I counted right, the line with the interaction is [19]:
>     lngmyers> interstring = strsplit(splitstring[[1]][19]," ")
>     lngmyers> # Lines contain TABs, so the p-value is the eighth element along:
>     lngmyers> pvalue = as.numeric(interstring[[1]][8])
>     lngmyers> if(pvalue < .05) print("The interaction is significant!")
>     lngmyers> ______________________________________________
>     lngmyers> R-help at stat.math.ethz.ch mailing list
>     lngmyers> https://stat.ethz.ch/mailman/listinfo/r-help
>     lngmyers> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html

More information about the R-help mailing list