qp : quantile-parametrized PDF approximation¶
In a scientific inference we typically seek to characterize the posterior probability density function (PDF) for our parameter(s), which means we need to fund a suitable, calculable approximation to it. Popular choices include an ensemble of samples, a histogram estimator based on those samples, or (in 1 dimensional problems) a tabulation of the PDF on a regular parameter grid. qp is a python package that supports these approximations, as well as the “quantile parameterization” from which the package gets its name.
Quick examples¶
Building an ensemble
#Here we will create 100 Gaussians with means distributed between -1 and 1
#and widths distributed between 0.9 and 1.
locs = 2* (np.random.uniform(size=(100,1))-0.5)
scales = 1 + 0.2*(np.random.uniform(size=(100,1))-0.5)
ens_n = qp.Ensemble(qp.stats.norm, data=dict(loc=locs, scale=scales))
#Here we create a 100 PDF using the histogram representation and
#61 bins running from 0 to 3, filled with random values
bins = np.linspace(0, 3, 61)
pdfs = np.random.random((100, 61))
ens_h = qp.Ensemble(qp.hist, data=dict(bins=bins, pdfs=pdfs))
Evaluating functions of the distribution
# Here we will evaluate the pdfs() and cdfs() on a grid of 501 points from 0 to 3.
# Since there are 100 pdfs, this will return an array of shape (100, 501)
grid = np.linscape(0, 3, 501)
pdf_vals = ens_n.pdf(grid)
cdf_vals = ens_n.cdf(grid)
Converting an ensemble to a different representation
#Here we convert our ensemble of Gaussians to an representation using an interpolated grid
#with 201 grid points between 0 and 3
xvals = np.linspace(0, 3, 201)
ens_i = ens_n.convert_to(qp.interp_gen, xvals=vals)
Reading and writing ensembles
#Here we write our interpolated grid representation ensemble to an hdf5 file and read it back
ens_i.writeto("qp_interp_ensemble.hdf5")
ens_read = qp.read("qp_interp_ensemble.hdf5")
Computing a point estimate and storing it with the ensemble
#Here compute the mode (i.e., the location of the maximum) on a grid of 501 values
modes = ens_i.mode(grid=np.linspace(0, 3, 501)
ens_i.set_ancil(dict(modes=modes))
Sampling the pdf and storing the samples
#Pull 5 samples from each PDF, this will return an array of shape (100, 5)
samples = ens_i.rvs(size=5)
ens_i.set_ancil(dict(samples=samples))
Documentation Contents¶
- Installing qp
- Tutorials
- Contributing to qp
- API Documentation for qp
- Ensemble and Factory
- Distribution types
- Quantification Metrics
Grid
calculate_moment()
calculate_kld()
calculate_rmse()
calculate_rbpe()
calculate_brier()
calculate_brier_for_accumulation()
calculate_anderson_darling()
calculate_cramer_von_mises()
calculate_kolmogorov_smirnov()
calculate_outlier_rate()
calculate_goodness_of_fit()
quick_anderson_ksamp()
quick_kld()
quick_moment()
quick_rmse()
quick_rbpe()
Brier
PIT
- Utility functions
- Infrastructure and Core functionality