How to explain strips on loss function when fitting a rice distribution

16 Views Asked by At

While investigating a Rice distribution fit, I have found a behaviour that I would like to investigate a bit deeper, hence my question to the community.

This is not about convergence issue but having more grasp on what phenomenon happens on a specific region of parameters space.

My model is defined as follow, using scipy.stats.rice:

from scipy import stats

def model(x, beta1, beta2):
        return stats.rice.pdf(x[:,0], b=beta1, loc=0., scale=beta2)

And I use scipy.optimize.curve_fit to solve the NLLS problem:

popt, pcov = optimize.curve_fit(model, centers, density, p0=[10., 10.])

Model can be fitted to a dataset with ad hoc initial guess:

enter image description here

When investigating the error landscape, a typical surface looks like:

enter image description here

Where the central region is the expected optimum and the bottom part of the landscape has a lot of hills with local minima:

enter image description here

This is the part of the landscape I am interested on.

Doing some test, I can numerically show that each hill (stride) comes for a specific point of the dataset and they stack next to each other for the given dataset. That is, a dataset with 5 points sufficiently apart will create 5 hills and valleys.

I found this behaviour very interesting (and sufficiently different of other NLLS error surfaces) and I would like to get more mathematical/technical insights on this phenomenon.

Is it expected? If so, is it due to the Modified Bessel function only? I guess not, but is it a numerical artifact?

My question is probably a bit broad, don't hesitate to help me to narrow it in the comment.