[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