Ashley put the following comment on Chapter 5 of Introducing Monte Carlo Methods with R”:
I am reading chapter 5. I try to reproduced the result on page 128. The R codes don’t work on my laptop. When I try to run the following codes on page 128
> for (i in 1:(nlm(like,sta)$it)){ + mmu=rbind(mmu,nlm(like,sta,iter=i)$est)}I always get the error message
Error in f(x, …) : unused argument(s) (iter = 1)It seems that the nlm function doesn’t accept the argument iter. I don’t know how to deal with it. I am in US. I guess the nlm version available to US R users is different from the version in EU. Please help.
And indeed with the most recent versions of R, like 2.12.1 on my own machine, calling nlm
> args(nlm) function (f, p, ..., hessian = FALSE, typsize = rep(1, length(p)), fscale = 1, print.level = 0, ndigit = 12, gradtol = 1e-06, stepmax = max(1000 * sqrt(sum((p/typsize)^2)), 1000), steptol = 1e-06, iterlim = 100, check.analyticals = TRUE)
with the abbreviated argument iter instead of iterlim produces the above error message. This means the full syntax iterlim=i should now be used. In addition, the function nlm produces the minimum of the first argument f and like should thus be defined as
> like=function(mu){ + -sum(log((.25*dnorm(da-mu[1])+.75*dnorm(da-mu[2]))))}
to end up with local maxima as on Figure 5.2. (Note: I do not think there are US versus EU versions of R…)
Ashley also pointed out another mistake on that page, namely that we used
> da=rbind(rnorm(10^2),2.5+rnorm(3*10^2))
instead of
> da=c(rnorm(10^2),2.5+rnorm(3*10^2))
to create a sample. Since the two normal samples have different sizes, rbind induces a duplication of the smaller sample, not what we intended!