Python module for performing robust linear regression on (X,Y) data points where both X and Y have measurement errors.
The fitting method is the bivariate correlated errors and intrinsic scatter (BCES) and follows the description given in Akritas & Bershady. 1996, ApJ. Some of the advantages of BCES regression compared to ordinary least squares fitting (quoted from Akritas & Bershady 1996):
- it allows for measurement errors on both variables
- it permits the measurement errors for the two variables to be dependent
- it permits the magnitudes of the measurement errors to depend on the measurements
- other "symmetric" lines such as the bisector and the orthogonal regression can be constructed.
In order to understand how to perform and interpret the regression results, please read the paper.
pip install bces
If that does not work, you can install it using the
python setup.py install
You may need to run the last command with
Install the package with a symlink, so that changes to the source files will be immediately available:
python setup.py develop
import bces.bces as BCES a,b,aerr,berr,covab=BCES.bcesp(x,xerr,y,yerr,cov)
- x,y : 1D data arrays
- xerr,yerr: measurement errors affecting x and y, 1D arrays
- cov : covariance between the measurement errors, 1D array
If you have no reason to believe that your measurement errors are correlated (which is usual the case), you can provide an array of zeroes as input for cov:
cov = numpy.zeros_like(x)
- a,b : best-fit parameters a,b of the linear regression such that y = Ax + B.
- aerr,berr : the standard deviations in a,b
- covab : the covariance between a and b (e.g. for plotting confidence bands)
Each element of the arrays a, b, aerr, berr and covab correspond to the result of one of the different BCES lines: y|x, x|y, bissector and orthogonal, as detailed in the table below. Please read the original BCES paper to understand what these different lines mean.
|0||y|x||Assumes x as the independent variable|
|1||x|y||Assumes y as the independent variable|
|2||bissector||Line that bisects the y|x and x|y. This approach is self-inconsistent, do not use this method, cf. Hogg, D. et al. 2010, arXiv:1008.4686.|
|3||orthogonal||Orthogonal least squares: line that minimizes orthogonal distances. Should be used when it is not clear which variable should be treated as the independent one|
bcesp run in parallel with bootstrapping.
bces-example.ipynb is a jupyter notebook including a practical, step-by-step example of how to use BCES to perform regression on data with uncertainties on x and y. It also illustrates how to plot the confidence band for a fit.
If you have suggestions of more examples, feel free to add them.
To run tests, run the following command