Let us be clear about what the issue seems to be. On i386 Mac (and not on x86_64 Mac)

library(lme4)
y <- (1:20)*pi; x <- (1:20)^2;group <- gl(2,10)
M2. <- lmer (y ~ 1 + x + (1 + x | group))
M2 <- lmer (y ~ x + ( x | group))
identical(fixef(M2), fixef(M2.))

usually fails the first time but if you run it again it is usually true, e.g. following on gave

fixef(M2); fixef(M2.)
(Intercept)           x
 15.2354383   0.1855865
(Intercept)           x
 15.2354486   0.1855864
M2. <- lmer (y ~ 1 + x + (1 + x | group))
fixef(M2.)
(Intercept)           x
 15.2354383   0.1855865

I think 'later version of MacOS' is most likely someone not understanding that x86_64 is the default for 'R' on Snow Leopard. I've just checked this on Leopard and Snow Leopard. *But* it is not repeatable, as sometimes I get TRUE the first run in a session -- and once that happens it seems to keep happening until a reboot or I reinstall lme4.

I ran this under valgrind (on Leopard: there is now experimental valgrind support for SL, but I've not installed it as yet) and saw no reports of problems. However, on one of the times I tried it under valgrind the result was further away:
fixef(M2.)
(Intercept)           x
 15.2381811   0.1856179
and persistent.

For completeness, I also saw this using R's reference BLAS rather than the (default on a CRAN build) Apple 'veclib' BLAS.

So the issue appears to be one of repeating the calculation and getting different answers. That does look like a i386-Mac-specific bug, but whether this is worth not distributing a binary for is something for the lme4 authors to judge -- if not then a platform-specific test opt-out seems the best way forward.


On Sat, 31 Jul 2010, John Maindonald wrote:

Is optimisation of code a possibility, i.e., the same algebraic calculations done in a slightly different way depending on the state of various registers? E.g., (ab)c vs a(bc), but it would almost certainly be more subtle than that. That seems to me the sort of thing that is likely to be Mac-specific.

But the Mac shares a compiler with lots of other platforms, and the gcc optimizer for i386 is pretty much shared across platforms (albeit the Mac gcc is now rather old, but is of similar vintage to that used on Windows for R 2.11.x). In any case, this is not (in my experiments) an issue of numerical accuracy but of repeatability,


John Maindonald             email: john.maindon...@anu.edu.au
phone : +61 2 (6125)3473    fax  : +61 2(6125)5549
Centre for Mathematics & Its Applications, Room 1194,
John Dedman Mathematical Sciences Building (Building 27)
Australian National University, Canberra ACT 0200.
http://www.maths.anu.edu.au/~johnm

On 31/07/2010, at 5:09 AM, Martin Maechler wrote:

On Fri, Jul 30, 2010 at 17:29, Simon Urbanek
<simon.urba...@r-project.org> wrote:

On Jul 29, 2010, at 7:51 PM, Martin Maechler wrote:

"KB" == Ken Beath <k...@kjbeath.com.au>
  on Wed, 28 Jul 2010 01:19:34 -0000 (GMT) writes:

  KB> On Tue, July 27, 2010 11:07 pm, John Maindonald wrote:
Binaries for lme4 are not for the time being available either on
CRAN or on r-forge?


  KB> There was a discussion about this on R-Sig-ME. It fails one of the checks
  KB> on the machine used to build the mac packages. It may pass on machines
  KB> with a later version of MacOS, but there didn't seem to be a consensus of
  KB> whether failing the checks was a problem.

The underlyign issue seems to remain unresolved.
My best guess is still to low-level bugs somewhere in the libraries
used.

However, to help users,
I'm willing to *not* run those tests when *running* on the Mac.

What does
   Sys.info()[["sysname"]]

return on the Mac, i.e., different versions of R running on the
Mac?
From grepping around I'd expect it give  "Darwin"  in all cases.
Is that true?


... why don't you just compare the values with tolerance? That seems to make more sense that to disable the test altogether ...


Doug and I have explained in several occasions (but maybe not on R-SIG-Mac)
that this is *NOT* the point here.
It's not about "basically the same computations" it's about
identical computations, i.e. from identical numerical matrices and so
the use of identical() has been very much on purpose, and is different
from the well justified typical use of
all.equal() which we use in many other places.

And what people where reporting *is* a bit disturbing: The same
computations giving different answers for *exactly* the same
computation, e.g., depending if they had used
library(lme4)  or  require(lme4)  to load the package ...
and the difference was not just the last significant bit, but changes
at about the 7-th significant digit.

Martin


Cheers,
Simon


_______________________________________________
R-SIG-Mac mailing list
R-SIG-Mac@stat.math.ethz.ch
https://stat.ethz.ch/mailman/listinfo/r-sig-mac

_______________________________________________
R-SIG-Mac mailing list
R-SIG-Mac@stat.math.ethz.ch
https://stat.ethz.ch/mailman/listinfo/r-sig-mac


--
Brian D. Ripley,                  rip...@stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

_______________________________________________
R-SIG-Mac mailing list
R-SIG-Mac@stat.math.ethz.ch
https://stat.ethz.ch/mailman/listinfo/r-sig-mac

Reply via email to