pyhf.infer.mle.fixed_poi_fit

pyhf.infer.mle.fixed_poi_fit(poi_val, data, pdf, init_pars=None, par_bounds=None, fixed_params=None, **kwargs)[source]

Run a maximum likelihood fit with the POI value fixed. This is done by minimizing the objective function of twice_nll() of the model parameters given the observed data, for a given fixed value of \(\mu\). This is used to produce the constrained maximal likelihood for the given \(\mu\) \(L\left(\mu, \hat{\hat{\boldsymbol{\theta}}}\right)\) in the profile likelihood ratio in Equation (7) in [1007.1727]

\[\lambda\left(\mu\right) = \frac{L\left(\mu, \hat{\hat{\boldsymbol{\theta}}}\right)}{L\left(\hat{\mu}, \hat{\boldsymbol{\theta}}\right)}\]

Note

twice_nll() is the objective function given to the optimizer and is returned evaluated at the best fit model parameters when the optional kwarg return_fitted_val is True.

Example

>>> import pyhf
>>> pyhf.set_backend("numpy")
>>> model = pyhf.simplemodels.hepdata_like(
...     signal_data=[12.0, 11.0], bkg_data=[50.0, 52.0], bkg_uncerts=[3.0, 7.0]
... )
>>> observations = [51, 48]
>>> data = pyhf.tensorlib.astensor(observations + model.config.auxdata)
>>> test_poi = 1.0
>>> bestfit_pars, twice_nll = pyhf.infer.mle.fixed_poi_fit(
...     test_poi, data, model, return_fitted_val=True
... )
>>> bestfit_pars
array([1.        , 0.97224597, 0.87553894])
>>> twice_nll
array(28.92218013)
>>> -2 * model.logpdf(bestfit_pars, data) == twice_nll
array([ True])
Parameters
  • data – The data

  • pdf (Model) – The statistical model adhering to the schema model.json

  • init_pars (list) – Values to initialize the model parameters at for the fit

  • par_bounds (list of lists or tuples) – The extrema of values the model parameters are allowed to reach in the fit

  • fixed_params (list) – Parameters to be held constant in the fit.

  • kwargs – Keyword arguments passed through to the optimizer API

Returns

See optimizer API