[R] mle() and with()

Ben Bolker bolker at zoo.ufl.edu
Mon Jan 10 23:52:43 CET 2005


   I'm trying to figure out the best way of fitting the same negative 
log-likelihood function to more than one set of data, using mle() from the 
stats4 package.

Here's what I would have thought would work:

--------------
library(stats4)

## simulate values
r = rnorm(1000,mean=2)

## very basic neg. log likelihood function
mll <- function(mu,logsigma) {
   -sum(dnorm(r,mean=mu,sd=exp(logsigma),log=TRUE))
}


mle(minuslogl=mll,start=list(mu=1,logsigma=0))

r2 = rnorm(1000,mean=3) ## second "data set"
with(list(r=r2),
      mle(minuslogl=mll,start=list(mu=1,logsigma=0))
    )
-------------

but this doesn't work -- it fits to the original data set, not the new one 
--- presumably because mll() picks up its definition of r when it is 
*defined* -- so using with() at this point doesn't help.

   If I rm(r) then I get an 'Object "r" not found' error.


I can do something like the following, defining the negative 
log-likelihood function within the mle() call ...

lf = function(data) {
   mle(minuslogl=function(mu,logsigma) {
     -sum(dnorm(data,mean=mu,sd=exp(logsigma),log=TRUE))
   },start=list(mu=1,logsigma=0))
}

lf(r)
lf(r2)

-------

  ... and in this case there's no point using with().
  can someone help me understand this behavior and to find a clean way to 
use mle() on a predefined likelihood function that allows substitution of 
an arbitrary data set?

   R 2.0.0 on Gentoo (trying to stick with the package management system so 
haven't installed 2.0.1 yet)


  thanks,
    Ben Bolker

-- 
620B Bartram Hall                            bolker at zoo.ufl.edu
Zoology Department, University of Florida    http://www.zoo.ufl.edu/bolker
Box 118525                                   (ph)  352-392-5697
Gainesville, FL 32611-8525                   (fax) 352-392-3704




More information about the R-help mailing list