Skip to main content

Get basis and penalty matrices from mgcv and convert them to numpy arrays

Project description

SmoothCon

pre-commit pytest pytest-cov

This is a small wrapper that pulls basis and penalty matrices from the R packge mgcv and converts them to numpy arrays.

Although smoothcon is part of the liesel ecosystem, it has no dependence on Liesel and can be used independently. smoothcon works well together with liesel_gam for building generalized additive distributional regresion models, see also the notebooks for examples.

Disclaimer

This package is experimental and under active development. That means:

  • The API cannot be considered stable. If you depend on this package, pin the version.
  • Testing has not been extensive as of now. Please check and verify!
  • There is currently no documentation beyond this readme.

In any case, this package comes with no warranty or guarantees.

Installation

You can install the development version from GitHub via pip:

pip install git+https://github.com/liesel-devs/smoothcon.git@v0.0.2

Usage

We illustrate usage with random data:

# import packages
import numpy as np
from smoothcon import SmoothCon


# generate some random data
rng = np.random.default_rng(seed=1)
n = 100
x = rng.uniform(-2.0, 2.0, size=n)
y = x + rng.normal(loc=0.0, scale=1.0, size=n)
mcycle = {"accel": y, "times": x}  # imitating the MASS:mcycle dataset

Now we initialize the smooth. What's special here is that the spec argument of the SmoothCon class can simply be a string containing the R code that you would usually use to specify a smooth in mgcv. Any smooth specification accepted by mgcv::SmoothCon is permitted.

# construct smooth
smooth = SmoothCon(
    spec="s(times, bs='ps', k=20, m=c(3,2))",   # mgcv smooth specification
    data=mcycle,                # dictionary or pandas dataframe
    knots=None,                 # knots; if None (default), mgcv will create the knots
    absorb_cons=True,           # If True, constraints (e.g. sum-to-zero) will be absorbed into the basis matrix
    diagonal_penalty=True,      # If True, the penalty will be diagonalized
    pass_to_r=None,             # dictionary of data that should be made available to the R environment
)

Access smooth information:

# shortcuts to smooth information
smooth.basis        # if there is only one basis in the smooth
smooth.penalty      # if there is only one penalty in the smooth
smooth.knots

# full smooth information
smooth.all_bases()      # list of all bases in the smooth
smooth.all_penalties()  # list of all penalties in the smooth

# prediction
new_x = rng.uniform(-1.0, 2.0, size=5)
newdata = {"times": new_x}
smooth.predict(data=newdata)            # compute single basis at new covariate values
smooth.predict_all_bases(data=newdata)  # compute all bases at new covariate values
smooth(new_x)                           # alternative syntax for .predict

SmoothFactory

If you want to initialize several smooths, you might not want to pass the data each time to SmoothCon. Passing the data each time is not only cumbersome, but also inefficient, because it will be converted to an R dataframe each time. So you probably want to use the SmoothFactory class to initialize your SmoothCon objects in most cases:

from smoothcon import SmoothCon

sf = SmoothFactory(data=df, pass_to_r=None) # pass data to R only once
smooth_x = sf("s(x, bs='ps', k=20)")        # call to initialize a SmoothCon object

Usage with liesel_gam: Example Notebooks

Advanced usage for building generalized additive distributional regression models with liesel and liesel_gam is illustrated in the following notebooks.

  • notebooks/test_gam_gibbs.ipynb: A generalized addition location-scale model, using inverse gamma priors an Gibbs kernels for the inverse smoothing parameters.
  • notebooks/test_gam_manual.ipynb: A generalized addition location-scale model, using a manually initialized inverse smoothing parameter with a Weibull prior.

License

Due to its dependence on rpy2, which is licensed under GPL-2.0 smoothcon is also licensed under GPL-2.0. As a result, if you depend on smoothcon, your project also needs to be licensed under GPL-2.0.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

smoothcon-0.0.3.tar.gz (49.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

smoothcon-0.0.3-py3-none-any.whl (12.2 kB view details)

Uploaded Python 3

File details

Details for the file smoothcon-0.0.3.tar.gz.

File metadata

  • Download URL: smoothcon-0.0.3.tar.gz
  • Upload date:
  • Size: 49.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.22

File hashes

Hashes for smoothcon-0.0.3.tar.gz
Algorithm Hash digest
SHA256 84535bb4a4a150496d56250a8e90de5eb86159a22f7dde26ea1deddd4cee8a46
MD5 b449554f7d3a8fa8099226f0ff4e8b6e
BLAKE2b-256 6ced18e70dcece1b676efd867a6b0ee4a5a3f109297f47e52e21f2a846e273e6

See more details on using hashes here.

File details

Details for the file smoothcon-0.0.3-py3-none-any.whl.

File metadata

  • Download URL: smoothcon-0.0.3-py3-none-any.whl
  • Upload date:
  • Size: 12.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.22

File hashes

Hashes for smoothcon-0.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 b1991785791854019d9cc2a8dc3fa280620b69de7f3ced4b73d909dd1a95771a
MD5 2d7e6d509253cb9c790127104b425f27
BLAKE2b-256 4489e6492d840ea07cd3f40f9d449587dc1cab1ed455af2a5712098ab04254a0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page