Duncan Murdoch
2021-Aug-03 18:53 UTC
[R] What are the pros and cons of the log.p parameter in (p|q)norm and similar?
On 03/08/2021 12:20 p.m., Michael Dewey wrote:> Short version > > Apart from the ability to work with values of p too small to be of much > practical use what are the advantages and disadvantages of setting this > to TRUE? > > Longer version > > I am contemplating upgrading various functions in one of my packages to > use this and as far as I can see it would only have the advantage of > allowing people to use very small p-values but before I go ahead have I > missed anything? I am most concerned with negatives but if there is any > other advantage I would mention that in the vignette. I am not concerned > about speed or the extra effort in coding and expanding the documentation. >These are often needed in likelihood problems. In just about any problem where the normal density shows up in the likelihood, you're better off working with the log likelihood and setting log = TRUE in dnorm, because sometimes you want to evaluate the likelihood very far from its mode. The same sort of thing happens with pnorm for similar reasons. Some likelihoods involve normal integrals and will need it. I can't think of an example for qnorm off the top of my head, but I imagine there are some: maybe involving simulation way out in the tails. The main negative about using logs is that they aren't always needed. Duncan Murdoch
Bill Dunlap
2021-Aug-03 20:24 UTC
[R] What are the pros and cons of the log.p parameter in (p|q)norm and similar?
In maximum likelihood problems, even when the individual density values are fairly far from zero, their product may underflow to zero. Optimizers have problems when there is a large flat area. > q <- runif(n=1000, -0.1, +0.1) > prod(dnorm(q)) [1] 0 > sum(dnorm(q, log=TRUE)) [1] -920.6556 A more minor advantage for some probability-related functions is speed. E.g., dnorm(log=TRUE,...) does not need to evaluate exp(). > q <- runif(1e6, -10, 10) > system.time(for(i in 1:100)dnorm(q, log=FALSE)) user system elapsed 9.13 0.11 9.23 > system.time(for(i in 1:100)dnorm(q, log=TRUE)) user system elapsed 4.60 0.19 4.78 -Bill On Tue, Aug 3, 2021 at 11:53 AM Duncan Murdoch <murdoch.duncan at gmail.com> wrote:> On 03/08/2021 12:20 p.m., Michael Dewey wrote: > > Short version > > > > Apart from the ability to work with values of p too small to be of much > > practical use what are the advantages and disadvantages of setting this > > to TRUE? > > > > Longer version > > > > I am contemplating upgrading various functions in one of my packages to > > use this and as far as I can see it would only have the advantage of > > allowing people to use very small p-values but before I go ahead have I > > missed anything? I am most concerned with negatives but if there is any > > other advantage I would mention that in the vignette. I am not concerned > > about speed or the extra effort in coding and expanding the > documentation. > > > > These are often needed in likelihood problems. In just about any > problem where the normal density shows up in the likelihood, you're > better off working with the log likelihood and setting log = TRUE in > dnorm, because sometimes you want to evaluate the likelihood very far > from its mode. > > The same sort of thing happens with pnorm for similar reasons. Some > likelihoods involve normal integrals and will need it. > > I can't think of an example for qnorm off the top of my head, but I > imagine there are some: maybe involving simulation way out in the tails. > > The main negative about using logs is that they aren't always needed. > > Duncan Murdoch > > ______________________________________________ > 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]]