[R] log(0) problem in max likelihood estimation

Prof Brian Ripley ripley at stats.ox.ac.uk
Tue Jan 9 17:57:19 CET 2001


On Tue, 9 Jan 2001, Bill Simpson wrote:

> This practical problem in maximum likelihood estimation must be
> encountered quite a bit. What do you do when a data point has a
> probability that comes out in numerical evaluation to zero? In calculating
> the log likelihood you then have a log(0) problem.
>
> Here is a simple example (probit) which illustrates the problem:
>
> x<-c(1,2,3,4,100)
> ntrials<-100
> yes<-round(ntrials*pnorm((x-3)/1)) #points fall on normal CDF mean=3, sd=1
> no<-ntrials-yes
> pyes<-yes/ntrials
> py<-function(b,x) pnorm((x-b[1])/b[2])
> loglike<-function(b) -sum( yes*log(py(b,x)) + no*log(1-py(b,x)) )
> out<-nlm(loglike,p=c(3,1),hessian=TRUE)
>
> In this example the right-most point gives a p(yes) of 1; 1-1=0; log(0)
> gives "NA/Inf replaced by maximum positive value"
>
> Please tell me how to deal with this problem.  Thanks very much for any
> help.

Calculate your log-likelihood correctly!   0*log(0) is 0, not NaN.
It is an example of good S programming on page 94 of V&R3.

More generally, I think you should be using the full 5-arg form of pnorm,
since

pnorm(x, 3, 1, FALSE, TRUE)

is a lot more accurate than your calculation.

-- 
Brian D. Ripley,                  ripley at 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 272860 (secr)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._



More information about the R-help mailing list