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 kwargreturn_fitted_val
isTrue
.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:
data – The data
pdf (Model) – The statistical model adhering to the schema model.json
init_pars (
list
offloat
) – The starting values of the model parameters for minimization.par_bounds (
list
oflist
/tuple
) – The extrema of values the model parameters are allowed to reach in the fit. The shape should be(n, 2)
forn
model parameters.fixed_params (
tuple
orlist
ofbool
) – The flag to set a parameter constant to its starting value during minimization.kwargs – Keyword arguments passed through to the optimizer API
- Returns:
See optimizer API