[R] R 3.1.2 mle2() function on Windows 7 Error and multiple optimal solutions
Ben Bolker
bbolker at gmail.com
Wed Jan 14 15:06:01 CET 2015
Mosab Alqurashi <malqurashi <at> KSU.EDU.SA> writes:
>
> ?Hello,
> I want to get the Maximum Likelihood Estimate (MLE) for an Extended
> weibull with three parameters. I have two problems. First, some
> times if I change the starting point for one of the parameters I got
> an error message. Second, sometime when I change the starting point
> for one of the parameters the solution changes. I don't know what
> I'm doing wrong or if there is a better way to get the MLE for a
> distribution.
I haven't had a chance to look closely at this, but some possibilities
are:
* there are actually multiple optima for this function (test: if
you start at or near one of the optima, do you stay/return to the
same optimum?)
* some of your starting values might be very far away from the
true values, in which case the likelihood surface could be very flat
* some of your parameters could be very strongly correlated,
in which case the likelihood surface is very flat in some directions
* if the parameters are on very different scales you might try
adjusting the "parscale" option (see ?optim)
* it might be worth experimenting with other optimizers (although
L-BFGS-B is the only optimizer in base R that allows constraints)
* you might try fitting your parameters on the log scale, to
avoid needing the constraints
* you could try AD Model Builder
* you could try visualizing the likelihood surface to see what's
going on
> Here is my Example and the Error message.
>
> Problem 1:
>
> y=c(5,11,21,31,46,75,98,122,145,165,195,224,245,293,321,330,350,420)
> #My data set
>
> Nweibull <-
> function(x,lambda,alpha,beta){
lambda*beta*(x/alpha)^(beta-1)*exp(1)^((x/alpha)^beta+
lambda*alpha*(1-exp(1)^((x/alpha)^beta)))}
> # The PDF
>
> LL <- function(lambda,alpha,beta) {
> R = Nweibull(y,lambda,alpha,beta)
>
> -sum(log(R))
> } # defining the Likelihood Function
>
> g=mle2(LL, start = list(lambda=.01,alpha=325,beta=.8),
> data = list(y),method =
> "L-BFGS-B",lower=c(.00001,.00001,.00001),upper = c(Inf, Inf,Inf))
> summary(g)
>
> #### Out Put###
>
> Maximum likelihood estimation
> Call:
> mle2(minuslogl = LL, start = list(lambda = 0.01, alpha = 325,
> beta = 0.8), method = "L-BFGS-B", data = list(y), lower = c(1e-05,
> 1e-05, 1e-05), upper = c(Inf, Inf, Inf))
> Coefficients:
> Estimate Std. Error z value Pr(z)
> lambda 3.6926e-03 8.9662e-04 4.1183e+00 3.817e-05 ***
> alpha 3.2500e+02 1.1953e-04 2.7191e+06 < 2.2e-16 ***
> beta 9.3856e-01 2.0186e-01 4.6496e+00 3.326e-06 ***
> ---
> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
> -2 log L: 218.7464
>
> Now If I change the starting point for theta to be 0.7
> I got the following error message:
> g=mle2(LL, start = list(lambda=.01,alpha=340,beta=.7),data = list(y),method =
> "L-BFGS-B",lower=c(.00001,.00001,.00001),upper = c(Inf, Inf,Inf))
>
> Error in optim(par = c(0.01, 325, 0.7), fn = function (p) :
> L-BFGS-B needs finite values of 'fn'
>
> Problem 2:
> If I change the starting point for alpha to be
> 340 the optimal solution will change too:
> g=mle2(LL, start = list(lambda=.01,alpha=340,beta=.8),data = list(y),method =
> "L-BFGS-B",lower=c(.00001,.00001,.00001),upper = c(Inf, Inf,Inf))
> summary(g)
>
> Maximum likelihood estimation
>
> Call:
> mle2(minuslogl = LL, start = list(lambda = 0.01, alpha = 340,
> beta = 0.8), method = "L-BFGS-B", data = list(y), lower = c(1e-05,
> 1e-05, 1e-05), upper = c(Inf, Inf, Inf))
>
> Coefficients:
> Estimate Std. Error z value Pr(z)
> lambda 3.7938e-03 9.3580e-04 4.0541e+00 5.034e-05 ***
> alpha 3.4000e+02 1.2039e-04 2.8243e+06 < 2.2e-16 ***
> beta 9.6164e-01 2.0766e-01 4.6309e+00 3.642e-06 ***
> ---
> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
>
> -2 log L: 218.7979
>
> Thanks,
> Mosab
>
More information about the R-help
mailing list