[R] Log plus one transformation in R

William Dunlap wdunlap at tibco.com
Mon Dec 12 18:29:13 CET 2016


The problem is that 1+x does not give accurate results for small x:
    > (1+1e-17) == 1
   [1] TRUE


Bill Dunlap
TIBCO Software
wdunlap tibco.com

On Mon, Dec 12, 2016 at 9:26 AM, John Sorkin <jsorkin at grecc.umaryland.edu>
wrote:

> David,
>
> I did read the help page. All it says is
>
> log1p(x) computes *log(1+x)* accurately also for *|x| << 1* (and less
> accurately when *x is approximately -1*).
>
> This gives me pause. Does it mean that log(x) does not give accurate
> results? If log1p gives more accurate values than log, why is the log
> function not written to use the more accurate computation performed by
> log1p. I don't believe I can look directly at the code for log and log1p,
> so I need to rely on the kindness of others to explain the differences
> between the computations performed by the functions. I guess the test I
> ran, log1p(0.000001)/log(0.000001+1), did not have enough precision to
> demonstrate a difference between the two functions.
>
> John
>
>
>
>
> John David Sorkin M.D., Ph.D.
> Professor of Medicine
> Chief, Biostatistics and Informatics
> University of Maryland School of Medicine Division of Gerontology and
> Geriatric Medicine
> Baltimore VA Medical Center
> 10 North Greene Street
> GRECC (BT/18/GR)
> Baltimore, MD 21201-1524
> (Phone) 410-605-7119
> (Fax) 410-605-7913 (Please call phone number above prior to faxing)
>
> >>> David Winsemius <dwinsemius at comcast.net> 12/12/16 12:05 PM >>>
>
>
> > On Dec 12, 2016, at 8:53 AM, John Sorkin <jsorkin at grecc.umaryland.edu>
> wrote:
> >
> > At the risk of being flamed . . .
> > What is the difference between log1p(x) and log(x+1)?
> > The two methods appear to give the same results:
> >> log1p(0.000001)/log(0.000001+1)
> > [1] 1
> > John
>
> Read the help page more carefully.
>
> --
> David.
> >
> >
> > John David Sorkin M.D., Ph.D.
> > Professor of Medicine
> > Chief, Biostatistics and Informatics
> > University of Maryland School of Medicine Division of Gerontology and
> > Geriatric Medicine
> > Baltimore VA Medical Center
> > 10 North Greene Street
> > GRECC (BT/18/GR)
> > Baltimore, MD 21201-1524
> > (Phone) 410-605-7119
> > (Fax) 410-605-7913 (Please call phone number above prior to faxing)
> >>>> William Dunlap via R-help <r-help at r-project.org> 12/12/16 11:38 AM
> >>>>
> > log1p(x), in the base package computes log(1+x) accurately for small x
> > (and
> > large).
> >
> > E.g.,
> >> options(digits=16)
> >> base::log1p(1e-14)
> > [1] 9.99999999999995e-15
> >> base::log1p(1e-14) - base::log(1+1e-14)
> > [1] 7.992778373591124e-18
> >> as.numeric(log(Rmpfr::mpfr(1,precBits=1000) + Rmpfr::mpfr(1e-14,
> > precBits=1000))) - log1p(1e-14)
> > [1] 0
> >
> >
> > Bill Dunlap
> > TIBCO Software
> > wdunlap tibco.com
> >
> > On Mon, Dec 12, 2016 at 8:23 AM, Faradj Koliev <faradj.g at gmail.com>
> > wrote:
> >
> >> Hi all,
> >>
> >> How do I perform log(x+1) in R?
> >>
> >> log1p_trans() from the package ”scales" doesn’t seem to work for me.
> >>
> >> Best,
> >> Faradj
> >> ______________________________________________
> >> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> >> https://stat.ethz.ch/mailman/listinfo/r-help
> >> PLEASE do read the posting guide http://www.R-project.org/
> >> posting-guide.html
> >> and provide commented, minimal, self-contained, reproducible code.
> >
> > [[alternative HTML version deleted]]
> >
> > ______________________________________________
> > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide
> > http://www.R-project.org/posting-guide.html
> > and provide commented, minimal, self-contained, reproducible code.
> > Confidentiality Statement:
> > This email message, including any attachments, is for the sole use of
> > the intended recipient(s) and may contain confidential and privileged
> > information. Any unauthorized use, disclosure or distribution is
> > prohibited. If you are not the intended recipient, please contact the
> > sender by reply email and destroy all copies of the original message.
> > ______________________________________________
> > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide http://www.R-project.org/
> posting-guide.html
> > and provide commented, minimal, self-contained, reproducible code.
>
> David Winsemius
> Alameda, CA, USA
>
>
>
> *Confidentiality Statement:*
>
> This email message, including any attachments, is for ...{{dropped:10}}



More information about the R-help mailing list