[R] - round() strange behaviour
mark at wardle.org
Sun Aug 5 10:05:00 CEST 2007
I use round() to prepare numbers for display in Sweave documents.
While I had appreciated the "round to even" issue before, I had not
given it much thought when automatically writing my output
On 04/08/07, Ted Harding <ted.harding at nessie.mcc.ac.uk> wrote:
> On 04-Aug-07 21:57:28, John Logsdon wrote:
> > I must admit I had never realised this so thanks to Monica for
> > raising it.
> > Round-to-even is used for statistical reasons and there is some
> > point as it obviously reduces bias. But why should the decision
> > be to round to the nearest even number? rounding to the nearest
> > odd number would be equally valid. (signif(x,0) is the same as
> > round(). )
> A fair point! But see below.
> > There is a debate and sometimes you need symmetric rounding.
> > Perhaps there should be an option in round that defaults to
> > round-to-even for compatibility but includes the various other
> > rounding approaches as seen for example in
> > http://en.wikipedia.org/wiki/Rounding
> As wikipedia says: "Round-to-even is used rather than round-to-odd
> as the latter rule would prevent rounding to a result of zero."
> And there's also stochastic rounding -- toss a penny. But you wouldn't
> get the same answer next time.
> And I can recall -- man years ago -- being in an environment where
> the practice was to round alternately up and down. (These were
> John's comparisons between FORTRAN, octave and (implicitly) R
> are interesting.
> As a general reflection: any method of rounding involves throwing
> away some of the information in the data, and this will have
> consequences. So the question is: what consequences are you
> happiest with?
> One consequence of rounding to nearest even (or nearest odd) is
> that this can give the worst possible outcome in terms of
> (rounded X - rounded Y) compared with (unrounded X - unrounded Y).
> For example, rounding to even integer X =1.5 --> 2.0 and
> Y = 0.5 --> 0.0 gives
> X - Y = 1.0 , rounded X - rounded Y = 2.0
> whereas the difference is 1.0 if you always round up, or always down,
> and this is also exactly the difference between the unrounded values..
> Rounding to nearest odd would give X = 1.5 --> 1.0, Y = 0.5 --> 1.0
> thus difference 0.0 in this case, but again difference 2.0 for
> X = 2.5 --> 3.0, Y = 1.5 --> 1.0
> And alternate rounding would give either 2.0 or 0.0 depending
> on the phase of X and Y.
> Thus "always up" or "always down" means that the difference between
> rounded numbers is always the same as between the unrounded numbers
> which for other methods the differences can differ by 2.0.
> This may or may not matter, but it is something to think about
> when choosing a rounding method.
> > [...]
> Best wishes to all,
> E-Mail: (Ted Harding) <ted.harding at nessie.mcc.ac.uk>
> Fax-to-email: +44 (0)870 094 0861
> Date: 04-Aug-07 Time: 23:53:50
> ------------------------------ XFMail ------------------------------
> R-help at stat.math.ethz.ch mailing list
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
> This email has been scanned by the MessageLabs Email Security System.
> For more information please visit http://www.messagelabs.com/email
Dr. Mark Wardle
Clinical research fellow and specialist registrar, Neurology
More information about the R-help