# 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.uncorrelated_background(
...     signal=[12.0, 11.0], bkg=[50.0, 52.0], bkg_uncertainty=[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:
Returns:

See optimizer API