[R] Optimization failed in fitting mixture 3-parameter Weibull distri bution using fitdistr()

Prof Brian Ripley ripley at stats.ox.ac.uk
Mon Jul 28 17:21:40 CEST 2003


I don't think that is the right density: haven't you forgotten I(x > a)?
So you need a constraint on a in the optimization, or at least to return 
density 0 if a >= min(x_i) (but I suspect the mle may well occur at the 
boundary).

Without that constraint you don't have a valid optimization problem.

On Mon, 28 Jul 2003, Yang, Richard wrote:

> Dear All;
> 
> 	I tried to use fitdistr() in the MASS library to fit a mixture
> distribution of the 3-parameter Weibull, but the optimization failed.
> Looking at the source code, it seems to indicate the error occurs at 
>                 if (res$convergence > 0) 
>         stop("optimization failed").
> 
>             The procedures I tested are as following:
> 
> >w3den <- function(x, a,b,c) {c/b*((x -a)/b)^(c-1)*exp(-((x-a)/b)^c)}    #
> define 3-parameter Weibull density
> >w3den <- function(x, a,b,c) {c/b*((x -a)/b)^(c-1)*exp(-((x-a)/b)^c)}
> >set.seed(123)
> > x3 <- rweibull(100, shape = 4, scale = 100)                             #
> Distribution 1
> > fitdistr(x3, w3den, start= list(a = 8.8, b = 90.77, c = 3.678))      #
> Fitting 3-parameter
> 
>        a            b            c     
>    8.9487415   90.6667712    3.6722124 
>  (15.1462445) (16.0657103) ( 0.7582376)
> Warning messages: 
> 1: NaNs produced in: log(x) 
> 2: NaNs produced in: log(x)
> >      x4 <- rweibull(50, shape = 3, scale = 90)                           #
> Distribution 2
> > fitdistr(x4, w3den, start=list(a = 5.0, b = 90, c = 3))
>        a            b            c     
>   -67.572244   159.020786     5.835588 
>  (105.975870) (107.842846) (  4.288019)
> Warning messages: 
> 1: NaNs produced in: log(x) 
> 2: NaNs produced in: log(x) 
> 
> > mweib <- function(x, p, a,b,c,a1, b1, c1) {p*(c/b*((x -
> a)/b)^(c-1)*exp(-((x-a)/b)^c))+
> +             +(1-p)*(c1/b1*((x -a1)/b1)^(c1-1)*exp(-((x-a1)/b1)^c1))}
> # define mixture distribution
> > x5 <- c(x3, x4)
> > fitdistr(x5, mweib, start=list(p = 0.7, a = 8.9, b=90.77, c = 3.68, a1 =
> -67.57, b1 = 159.02, c1 = 5.83))
> Error in fitdistr(x5, mweib, start = list(p = 0.7, a = 8.9, b = 90.77,  : 
>         optimization failed
> In addition: There were 14 warnings (use warnings() to see them).
> 
> 	I tested the same procedures with a mixture 2-parameter Weibull
> distribution without problems. With a limited experience with the
> fitdistr(), it seems to me, similar to all nonlinear or optimization
> procedures,  the starting values are critical for convergence. Any
> suggestions for solving the optimization problem?
> 
> 	TIA
> 
> Richard Yang
> 
> 
> Northern Forestry Centre   /	Centre de foresterie du Nord
> Canadian Forest Service	   /	Service canadien des forêts
> Natural Resources Canada   /	Ressources naturelles Canada
> 5320-122 Street     	   /	5320, rue 122
> 
> Edmonton (Alberta) Canada
> T6H 3S5
> 
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://www.stat.math.ethz.ch/mailman/listinfo/r-help
> 
> 

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595




More information about the R-help mailing list