Sudden parameter jumps during fitting

Hello Rooters,

I have noticed that TMinuit sometimes changes parameters by an enormous factor of 10^45 or 10^88 or some such number. This usually causes the fit to fail entirely (the function returns NaN) and never puts the parameters into a more likely range. It happens even after I take care to start with values that should be close to the best… it looks to my eye like a case that converge.

Any advice about what is happening? Is there a way to control and prevent this behavior? Does it result from the fitter getting desperate? :slight_smile:

My parameter space may be somewhat degenerate, but reparameterizing my model would be very difficult.

Thanks,
Shane

HI,

MInuit computes the step sizes from - H^-1 x G where H is the Hessian matrix and G the gradient. It is clear that either the Gradient or the Hessian have some crazy values.
I suspect the problem is due to very large values in the derivative computations. Try to put parameter bounds to avoid going to those regions or compute yourself the gradient and pass it to Minuit.

Lorenzo

Thank you!

Is there an example I should follow for passing my own gradient to minuit during the fit? The way I’m using it is just to do h->Fit(), and I currently am not interacting with minuit during the fit (to my knowledge).

Might there be a way simply to place an upper bound on step sizes? (I’ll look.)

Per the warning about parameter limits I’m hoping to avoid using them. (The validity of the best-fit covariance matrix is paramount for me.) For example, I have one parameter that physically must be between 0 and 1. I expect it’s physical value is 1 but would like to test that statistically. My understanding is that doing SetParLimits(0,1) would be totally wrong in my case. Would SetParLimits(0,2) be a reasonable compromise?

Thanks!
Shane