Search code examples
pythonrstatisticsmathematical-optimizationstata

How to set multiple starting values in constrOptim()


I am trying to estimate few parameters using the constained maximum likelihood in R and more specifically the constrOptim() from the stata package in R. I am programming in Python and using R via the RPy2.

In my model, I am assuming that the data follow the Beta-distribution, so I created a simulated dataset by using prespecified values for the parameters and now I am trying to estimate these parameters in order to verify that my estimation program works fine.

What I have observed is that my estimation is quite sensitive to the initial parameters. For example I have 11 parameters to estimate (let's call the parameters as pam1..pam11) and their true value is:

pam1=0.2  pam2=0.3  pam3=0.4  pam4=0.7 pam5=0.55  pam6=0.45  pam7=0.1  pam8=0.01 pam9=0.01 pam10=45 pam11=45

In the constrOptim() I am setting the starting parameters as:

start_param=FloatVector((pam1,pam2,pam3,pam4,pam5,pam6,pam7,pam8,pam9,pam10,pam,11))

where I set the starting values. I have observed that when I am using different sets of starting values the results change. For example when I am using the set

start_param=FloatVector((0.2,0.3,0.4,0.6,0.7,0.8,0.3,0.011,0.011,15,15))

and I obtain the following estimates

$par

 [1]  0.20851065  0.30348571  0.43616932  0.73695654  0.58287221 
0.45541506

 [7]  0.11191879  0.02233908  0.01988878 46.57249043 45.48544918

$value

[1] -215.9711

$convergence

[1] 0

but when I am using another set as for example:

start_param=FloatVector((0.2,0.3,0.4,0.75,0.55,0.45,0.3,0.05,0.05,59,59))

the results change and it seems that I am losing convergence

$par

[1]  0.17218738  0.27165359  0.48458978  0.80295773  0.62618983  0.43254786

[7]  0.12426385  0.02991442  0.01853252 57.78269692 59.35376216

$value

[1] -146.9858

$convergence

[1] 1

My question is the following: I have seen that in Stata, there is an option that searches for better starting values for the numerical optimization algorithm. I tried to set multiple starting values by setting a matrix but this did not work. Is there an option in constrOptim that will allow me to do something like this?

Many thanks in advance.

For additional information, the specification I use for the constrOptim() is:

res=statsr.constrOptim(start_param,Rmaxlikelihood,grad='NULL',ui=ui,ci=ci,method="Nelder-Mead",control=list("maxit=3000,trace=F"))

Solution

  • I came across a function in R which does exactly what I was looking for. The package ‘Rsolnp’ has the function "gosolnp" which is described to perform Random Initialization and Multiple Restarts of the solnp solver.

    It is quite efficient and the documentation provides examples on how to use it.

    More: http://cran.r-project.org/web/packages/Rsolnp/Rsolnp.pdf