We are using Minuit2 in a fitting routine. After several months of struggle (to say the least), we managed to have it converged properly using Migrad and setting a tolerance of 90 (not 0.1). It resulted in a value of edm of 0.05 (<0.09=90 x 0.001 x 1). Interesting enough, when it fails (edm above max) the Fmin value is the same as for the edm of 0.05.
Questions:
is there something wrong by setting the tolerance to 90?
is there some way to adjust the tolerance pre-facto so that it converges?
Hi,
Using 90 of tolerance is quite large , but maybe is sufficient for your problem.
The most likely cause that you are struggling to have your minimization to converge is because your implementation of the objective function you are passing to Minuit is not precise enough. If you can improve it, by re-implementing the function or re-parameterize it it will be helpful.
Unfortunately one cannot adjust the tolerance a-priori for this. You would need to experiment. I think for the fitting in ROOT we require a tolerance smaller than 1, which corresponds an edm smaller than 10^-3 which is much smaller than the statistical error of the fit (DeltaL < 0.5 or 1).
Thank you for you reply…and sorry for my belated response. It seems that I never got the notification.
I managed to have some progress on it. I am minimizing a log(likelihood) with 184 parameters. My understanding of the edm is that it is roughy equal to N_param x (relative error)^2/2, so a tolerance of say 90 would give an edm < 0.09, providing a relative error of 0.03 (a 1/30th of a sigma) which is enough for our application.
The other question I have is the following, I set a tol of 100 and I get such a run, in the end I get an edm with is below the max, and an edm from the Hessian identical…stil the status is 0 (failed)…why is that?
See below.
Hi,
If status=0 or =1 is still valid, but 2,3,4,5 are instead invalid minimum.
The case of status=1 is when the covariance matrix was made positive defined during minimization.
If you have further questions, please let me know
Cheers