https://github.com/cran/bbmle
Raw File
Tip revision: a30256c01413bbf7af580b5ae24547064a7d055e authored by Ben Bolker on 18 April 2017, 12:04:25 UTC
version 1.0.19
Tip revision: a30256c
parscale.Rout

R version 2.13.0 alpha (2011-03-18 r54865)
Copyright (C) 2011 The R Foundation for Statistical Computing
ISBN 3-900051-07-0
Platform: i686-pc-linux-gnu (32-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

  Natural language support but running in an English locale

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

[Previously saved workspace restored]

> library(bbmle)
Loading required package: stats4
Loading required package: numDeriv
Loading required package: lattice
Loading required package: MASS
> 
> ## source("~/lib/R/pkgs/bbmle/pkg/R/mle.R
> 
> set.seed(1002)
> X <- rexp(1000, rate = 0.0001)
> f <- function(X, rate) {
+   if (rate<0) cat("rate<0: ",rate,"\n")
+   -sum(dexp(X, rate = rate, log = TRUE))
+ }
> if (FALSE) {
+   ## L-BFGS-B violates bounds, and gets stuck at lower bound
+   m <- mle2(minuslogl = f,
+             data = list(X = X),
+             start = list(rate = 0.01),
+             method = "L-BFGS-B",
+             control = list(trace = 1, parscale = 1e-4),
+             lower = list(rate = 1e-9))
+ 
+   profile(m, std.err=0.0001) ## finds new optimum
+ 
+   fsc <- function(X, rate) {
+     -sum(dexp(X, rate = rate*1e-4, log = TRUE))
+   }
+   msc <- mle2(minuslogl = fsc,
+             data = list(X = X),
+             start = list(rate = 100),
+             method = "L-BFGS-B",
+             control = list(trace = 1),
+             lower = list(rate = 1e-5))
+ 
+   ## does it work if we scale by hand?
+   ##   no, identical problem
+ }
> 
> ## works fine with a better starting point
> m <- mle2(minuslogl = f,
+           data = list(X = X),
+           start = list(rate = 0.001),
+           method = "L-BFGS-B",
+           control = list(trace = 1,parscale=1e-4),
+               lower = list(rate = 1e-9))
iter    0 value 12490.509482
final  value 10188.014396 
converged
> vcov(m)
             rate
rate 1.045669e-11
> confint(m)
       2.5 %       97.5 % 
9.605011e-05 1.087274e-04 
> 
> 
> ## works OK despite warnings about 1-dimensional opt. with N-M
> (m0 <- mle2(minuslogl = f,
+           data = list(X = X),
+           start = list(rate = 0.01),
+           method = "Nelder-Mead",
+           control = list(trace = 1, parscale = 1e-4)))
  Nelder-Mead direct search function minimizer
function value for initial parameters = 102397.310635
  Scaled convergence tolerance is 0.00152584
Stepsize computed as 10.000000
BUILD              2 112081.214500 102397.310635
EXTENSION          4 102397.310635 83062.026096
EXTENSION          6 83062.026096 44638.317097
HI-REDUCTION       8 63791.280079 44638.317097
REFLECTION        10 44638.317097 25773.036188
HI-REDUCTION      12 35146.785125 25773.036188
REFLECTION        14 25773.036188 16686.969324
HI-REDUCTION      16 21171.111238 16686.969324
REFLECTION        18 16686.969324 12490.509482
HI-REDUCTION      20 14529.847885 12490.509482
REFLECTION        22 12490.509482 10738.853151
HI-REDUCTION      24 11555.789799 10738.853151
REFLECTION        26 10738.853151 10209.598576
HI-REDUCTION      28 10415.334346 10209.598576
LO-REDUCTION      30 10209.598576 10191.680210
HI-REDUCTION      32 10191.680210 10190.329749
HI-REDUCTION      34 10190.329749 10188.037612
HI-REDUCTION      36 10188.497339 10188.037612
HI-REDUCTION      38 10188.089444 10188.037612
HI-REDUCTION      40 10188.037612 10188.018175
HI-REDUCTION      42 10188.018175 10188.016446
HI-REDUCTION      44 10188.016446 10188.014462
Exiting from Nelder Mead minimizer
    46 function evaluations used

Call:
mle2(minuslogl = f, start = list(rate = 0.01), method = "Nelder-Mead", 
    data = list(X = X), control = list(trace = 1, parscale = 1e-04))

Coefficients:
        rate 
0.0001022949 

Log-likelihood: -10188.01 
Warning message:
In optim(par = 0.01, fn = function (p)  :
  one-diml optimization by Nelder-Mead is unreliable: use optimize
> vcov(m0)
             rate
rate 1.046414e-11
> 
> confint(m0)
       2.5 %       97.5 % 
9.604965e-05 1.087271e-04 
> confint(m0,method="quad")
       2.5 %       97.5 % 
9.595477e-05 1.086351e-04 
> ## very similar (good quadratic surface, not surprising)
> 
> m1 <- mle2(minuslogl = f,
+           data = list(X = X),
+           start = list(rate = 0.01),
+           method = "BFGS",
+           control = list(trace = 1, parscale = 1e-4))
initial  value 102397.310635 
rate<0:  -0.08679214 
rate<0:  -0.009358428 
rate<0:  -0.5831727 
rate<0:  -0.1117319 
rate<0:  -0.01744372 
rate<0:  -0.07719334 
rate<0:  -0.01430754 
rate<0:  -0.001730383 
rate<0:  -0.08426903 
rate<0:  -0.01622577 
rate<0:  -0.002617114 
final  value 10188.014408 
converged
There were 11 warnings (use warnings() to see them)
> 
> 
> ## gets stuck? will have to investigate ...
> m2 <- mle2(minuslogl = f,
+            data = list(X = X),
+            start = list(rate = 0.01),
+            optimizer = "optimize",
+            lower=1e-9,upper=0.1)
> 
> vcov(m2)
             rate
rate 1.407176e-11
> 
> proc.time()
   user  system elapsed 
  0.856   0.196   1.065 
back to top