Package: lowess
The lowess PackageThis package provides a function to perform a LOWESS on Pandas Series objects.
LOWESS (locally weighted scatterplot smoothing) [1, 2] as defined by STATA [3].
The regressions utilises some of the methods in [4].DescriptionMethods and FormulaLet x and y be the two variables each of length N, and assume that the data are ordered so that xi= < xi+1for i = 1,...,N-1.
For each yi, a smoothed value yisis calculated.
The subset of points used in calculating yisis  i-= max(1, i-k) through i+= min(i+k, N), wherek = Floor((N × bandwidth - 0.5) / 2).The weights for each of the observations between j = i-,...,i+are the tricubewj= [1 - (|xj- xi| / ∆)3]3,where ∆ = 1.0001 max(xi+-xi, xi-xi-).
The smoothed value yisis then the weighted polynomial regression prediction at xi.NB: In this implemtation x and y should bePandas Series objects.
The series need not be sorted and x and y can be in different orders, so long as their indexes have the same elements.UsageOnce the package has been installed it can be imported into a python scriptimport lowessThe package provides a single modulelowesswith a single functionlowess.lowess.
This function has the signiture:lowess.lowess(x, y, bandwidth=0.2, polynomialDegree=1)where the arguments are:x(pandas.core.series.Series): a Pandas Series containing the x (independent/covariat) values. The indices must be unique.y(pandas.core.series.Series): a Pandas Series containing the y (dependent) values. It must have the same index as x (although not necessarily in the same order.)bandwidth(float, optional): the bandwidth for smoothing. It must be between 0 and 1. Default is 0.2polynomialDegree(int, optional): The degree of polynomial to use in the regression. It must be >= 0. Default is 1.It returns a Pandas Series containing the smoothed y values, with the same index as y.If the input is not valid or an error occurs, aLowessErrorexception is raised.ExamplesSome examples are given in the directoryexamples.InstallationVia the PyPI package managerThe package can be installed withpipvia the command:$ pip install lowessVia GitHubThe package can be installed from source via GitHub.
First download the repository, either via SSH$ git clone git@github.com:CCGE-Cambridge/lowess.gitor via HTTPS$ git clone https://github.com/CCGE-Cambridge/lowess.gitThen install the package via$ cd lowess
$ pip install .DocumentaionDocumentaion of the API is provided via Sphinx.
To make the documentaion$ cd docs
$ make html
$ open build/html/index.htmlThis may require installation of the packagesphinx.TestingUnit tests are implemented viaunittestand are in the filetests/test_lowess.py.
To run the tests first download the source code and then run the command:$ python tests/test_lowess.pyRequirementsnumpy==1.18.2pandas==1.0.3python-dateutil==2.8.1pytz==2019.3six==1.14.0LicenseCopyright (c) 2020 Andrew LeeThis software is provided as is without any warranty whatsoever.
Permission to use, for non-commercial purposes is granted.
Permission to modify for personal or internal use is granted,
provided this copyright and disclaimer are included in all
copies of the software. All other rights are reserved.
In particular, redistribution of the code is not allowed.ReferencesCleveland, W. S. 1979. Robust locally weighted regression and smoothing scatterplots.Journal of the American Statistical Association74: 829–836. [https://www.jstor.org/stable/2286407]Wikipedia: Local Regression - [https://en.wikipedia.org/wiki/Local_regression] (accessed 2020-04-20)STATA: Lowess - [https://www.stata.com/manuals13/rlowess.pdf] (accessed 2020-04-20)Cappellari et al. 2013 The ATLAS3Dproject - XX. Mass-size and mass-σ distributions of early-type galaxies: bulge fraction drives kinematics, mass-to-light ratio, molecular gas fraction and stellar initial mass functionMonthly Notices of the Royal Astronomical Society432: 1862-1893 [https://doi.org/10.1093/mnras/stt644]