On 9/4/2008 10:54 AM, Jinsong Zhao wrote:> Hi there,
>
> When I do bootstrap on a maximum likelihood estimation, I try the
> following code, however, I get error:
>
> Error in minuslogl(alpha = 0, beta = 0) : object "x" not found
>
> It seems that mle() only get data from workspace, other than the
> boot.fun().
This is the way R does scoping. Your ll function was defined in the
global environment, so that's where it will look for x, n and r. If you
want it to look at the local variables in boot.fun, then you should
define it in boot.fun.
Duncan Murdoch
> My question is how to pass the data to mle() in my case.
>
> I really appreciated to any suggestions.
>
> Best wishes,
> Jinsong
>
> #-----------code start here---------------
> x <- c(32, 16, 8, 4, 2, 1)
> r <- c(20, 12, 10, 8, 6, 0)
> n <- c(20, 20, 20, 20, 20, 20)
>
> mydata <- data.frame(x = x, r = r, n = n)
> rm(x, r, n) #if not rmed, it will affect the final result.
>
>
> ll <- function(alpha, beta) { #how to pass the data to this function?
> x <- log10(x)
> P <- pnorm(alpha + beta * x)
> P <- pmax(pmin(P,1),0)
> -(sum(r * log(P)) + sum((n - r)* log(1-P)))
> }
>
> boot.fun <- function(data, index) {
> boot.data <- data[index, ]
> # it seems that the following three line dose nothing with the mle()
> x <- boot.data$x
> r <- boot.data$r
> n <- boot.data$n
> fit <- mle(ll, start = list(alpha = 0, beta = 0), method =
"BFGS")
> boot.coef <- coef(fit)
> stats <- -boot.coef[1] / boot.coef[2]
> }
>
> library(stats4)
> library(boot)
>
> myboot <- boot(mydata, boot.fun, R = 199)
> # give the error message:
> # Error in minuslogl(alpha = 0, beta = 0) : object "x" not found
> #-----------code end here---------------
>
> ______________________________________________
> R-help at r-project.org mailing list
> 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.