Tutorials
Juyter Logo

Fitting variogram data

%matplotlib widget
import matplotlib.pyplot as plt
plt.ioff()
# turn of warnings
import warnings
warnings.filterwarnings('ignore')

The model class comes with a routine to fit the model-parameters to given variogram data. In the following we will use the self defined stable model from a previous example.

import numpy as np
import gstools as gs

class Stab(gs.CovModel):
    def default_opt_arg(self):
        return {"alpha": 1.5}

    def cor(self, h):
        return np.exp(-(h ** self.alpha))

# Exemplary variogram data (e.g. estimated from field observations)
bins = [1.0, 3.0, 5.0, 7.0, 9.0, 11.0]
est_vario = [0.2, 0.5, 0.6, 0.8, 0.8, 0.9]
# fitting model
model = Stab(dim=2)
# we have to provide boundaries for the parameters
model.set_arg_bounds(alpha=[0, 3])
results, pcov = model.fit_variogram(bins, est_vario, nugget=False)
print("Results:", results)
print(model)
Results: {'var': 1.0245740022313239, 'len_scale': 5.081592383444288, 'nugget': 0.0, 'alpha': 0.9067040722375433}
Stab(dim=2, var=1.02, len_scale=5.08, nugget=0.0, alpha=0.907)
ax = model.plot()
ax.scatter(bins, est_vario, color="k", label="sample variogram")
ax.legend()

As you can see, we have to provide boundaries for the parameters. As a default, the following bounds are set:

  • additional parameters: [-np.inf, np.inf]
  • variance: [0.0, np.inf]
  • len_scale: [0.0, np.inf]
  • nugget: [0.0, np.inf]

Also, you can deselect parameters from fitting, so their predefined values will be kept. In our case, we fixed a nugget of 0.0, which was set by default. You can deselect any standard or optional argument of the covariance model. The second return value pcov is the estimated covariance of popt from the used scipy routine scipy.optimize.curve_fit.

You can use the following methods to manipulate the used bounds:

  • CovModel.default_opt_arg_bounds
  • CovModel.default_arg_bounds
  • CovModel.set_arg_bounds
  • CovModel.check_arg_bounds

You can override the CovModel.default_opt_arg_bounds to provide standard bounds for your additional parameters.

To access the bounds you can use:

  • CovModel.var_bounds
  • CovModel.len_scale_bounds
  • CovModel.nugget_bounds
  • CovModel.opt_arg_bounds
  • CovModel.arg_bounds