Skip to main content

Formula-first generalized additive models with a high-performance Rust core

Project description

gamfit

PyPI Python Docs License

Formula-first generalized additive models for Python, backed by a Rust engine.

gamfit fits Gaussian, binomial, Poisson, and Gamma GLMs with smooth terms, random effects, bounded/constrained coefficients, location-scale extensions, survival likelihoods, and flexible/learnable links. Smoothing parameters are selected by REML or LAML. Posterior sampling uses NUTS where supported, with a Gaussian Laplace fallback elsewhere.

Docs: https://gamfit.readthedocs.io/

Install

uv add gamfit

Wheels for Linux (x86_64, aarch64), macOS (x86_64, Apple silicon), and Windows. No Rust toolchain required.

30-second tour

import gamfit

train = [
    {"y": 1.2, "x": 0.0},
    {"y": 1.9, "x": 1.0},
    {"y": 3.1, "x": 2.0},
    {"y": 4.5, "x": 3.0},
]

model = gamfit.fit(train, "y ~ s(x)")
print(model.predict([{"x": 1.5}, {"x": 2.5}], interval=0.95))
print(model.summary())
model.save("model.gam")

pandas, polars, pyarrow, numpy, dict-of-columns, and list-of-records inputs all work without conversion.

What's different

  • Three-part penalty structure. Each smooth gets separate penalties for magnitude, gradient, and curvature. Most GAM libraries use one or two.
  • Flexible link functions. Spline offsets from a base link (link(type=flexible(probit))), blended mixture links, and SAS / beta-logistic learnable shapes.
  • Surface smooths in arbitrary dimension. Thin-plate, Duchon (with triple-operator regularization), and Matérn covariance, with automatic knot placement.
  • Adaptive anisotropy. Per-axis spatial anisotropy shrinks or stretches each feature axis independently inside a single joint smooth.
  • Composable basis/kernel. Combine a spline kernel with a length-scale behaviour (e.g. Duchon kernel with Matérn-style global κ).
  • Marginal-slope models. Separate baseline risk from a calibrated score's effect, for both Bernoulli and survival outcomes.
  • Posterior sampling. model.sample(...) runs NUTS where supported, with a Gaussian Laplace fallback elsewhere, behind one API.

Highlights from the API

import gamfit
from gamfit.sklearn import GAMRegressor, GAMClassifier

# Validate before you fit
gamfit.validate_formula(train, "y ~ s(x) + group(site)")

# Posterior sampling and predictive bands
posterior = model.sample(train, seed=42)
bands = posterior.predict(test, level=0.95)

# Survival
gamfit.fit(df,
    "Surv(entry, exit, event) ~ s(age) + bmi + timewiggle(internal_knots=6)",
    survival_likelihood="transformation",
)

# scikit-learn
est = GAMRegressor(formula="y ~ s(x)")
est.fit(X, y)

# Diagnose, plot, report
model.diagnose(train).metrics
model.plot(train, x="x", kind="prediction")
model.report("report.html")

Public API

Symbol Purpose
gamfit.fit(data, formula, **kwargs) Fit a model.
gamfit.load(path) / gamfit.loads(bytes) Reload a saved model.
gamfit.validate_formula(data, formula, ...) Type-check a formula without fitting.
gamfit.build_info() Native extension build metadata.
gamfit.explain_error(exc) Human-readable hint for a gamfit exception.
gamfit.Model Fitted-model handle: predict, summary, check, diagnose, plot, report, sample, save.
gamfit.SurvivalPrediction Per-row hazard / survival surface; on-demand evaluation.
gamfit.SamplingConfig, PosteriorSamples, PosteriorPredictive NUTS / posterior interface.
gamfit.sklearn.GAMRegressor / GAMClassifier scikit-learn estimators.

Full reference at https://gamfit.readthedocs.io/en/latest/api-reference/.

Optional extras

uv add "gamfit[pandas]"     # pandas + pyarrow input/output
uv add "gamfit[plot]"       # matplotlib-based plotting
uv add "gamfit[sklearn]"    # scikit-learn integration
uv add "gamfit[all]"        # everything

License

AGPL-3.0-or-later. See LICENSE.

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

gamfit-0.1.60.tar.gz (2.7 MB view details)

Uploaded Source

Built Distributions

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

gamfit-0.1.60-cp310-abi3-win_amd64.whl (12.0 MB view details)

Uploaded CPython 3.10+Windows x86-64

gamfit-0.1.60-cp310-abi3-musllinux_1_2_x86_64.whl (11.5 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ x86-64

gamfit-0.1.60-cp310-abi3-musllinux_1_2_aarch64.whl (10.0 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

gamfit-0.1.60-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.4 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ x86-64

gamfit-0.1.60-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (9.8 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

gamfit-0.1.60-cp310-abi3-macosx_11_0_arm64.whl (9.6 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

gamfit-0.1.60-cp310-abi3-macosx_10_12_x86_64.whl (10.8 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

Details for the file gamfit-0.1.60.tar.gz.

File metadata

  • Download URL: gamfit-0.1.60.tar.gz
  • Upload date:
  • Size: 2.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for gamfit-0.1.60.tar.gz
Algorithm Hash digest
SHA256 fbbd5da9975d88617231688bb742691fa7591a13c61e3cad40fc3e6d7497e42a
MD5 e1c74a0e8915bcb59a5f200874b16f68
BLAKE2b-256 3faa9f42c46605f56a77594c6b66a5c0955fcd8f0359bec04026e4b41b6d5a32

See more details on using hashes here.

File details

Details for the file gamfit-0.1.60-cp310-abi3-win_amd64.whl.

File metadata

  • Download URL: gamfit-0.1.60-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 12.0 MB
  • Tags: CPython 3.10+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for gamfit-0.1.60-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 7c18da94623bacf50ae580f7659b817454f48ecb609f55a75601e70b781647a7
MD5 5d4a60bb0823ffcd7dfa03d0f4277f7e
BLAKE2b-256 bc01def6ce6b39863297a4f6e5f8a9124c8d766b27c0399f9e24a018e6ddfaac

See more details on using hashes here.

File details

Details for the file gamfit-0.1.60-cp310-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for gamfit-0.1.60-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 bad0150234357bfc8939fd1c7aa3501d6db4e68479ff69d664c14aa05e5e7114
MD5 381e3d94af97c93fc983bb97d618a5c9
BLAKE2b-256 8cf6feed0e547556bc53cedf9d70f201c921fce91a1d667ec5d768e8b626f52b

See more details on using hashes here.

File details

Details for the file gamfit-0.1.60-cp310-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for gamfit-0.1.60-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 4a10a27ae5ae586da4a48117f61d9570066da52209af5bf528557e6296e4e5eb
MD5 a11a59680b305171f583b31572199f84
BLAKE2b-256 a27f13b1c44925f46c35fe79d41710ab80fafde48a94a43277f96510fdbdd2f6

See more details on using hashes here.

File details

Details for the file gamfit-0.1.60-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for gamfit-0.1.60-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1cfe8f0a386c53b8183c70754dd6fc530262bf92bbb25af92f1110a72290cdf6
MD5 29b55fdff8651b3a24e2be5b2edecc85
BLAKE2b-256 a6d38e566e4560cfa4ac848876a31aac7277c53407d87ff8dbe2fb9c753c49b3

See more details on using hashes here.

File details

Details for the file gamfit-0.1.60-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for gamfit-0.1.60-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 b4f0afa26fe5033be5b88e93c95501e1bc2475144dfe7693104cb6101c4162e3
MD5 8e790fab3a34694818706cb5ebf1b17f
BLAKE2b-256 cb3fe04ef489a3873e844349f85f681a613cdabb5f5888872da72d19936a2c1a

See more details on using hashes here.

File details

Details for the file gamfit-0.1.60-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for gamfit-0.1.60-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 237537270ce4d7338d9e7b7f7a413ad1fa9977e580caf13e2e6eb343248b94c6
MD5 9eba9e4e820897be5c5f4de4334ff4f5
BLAKE2b-256 b7b72f17fe6d0eeaadefd4431134d59389232bcd580d1b93caec522f51c334fb

See more details on using hashes here.

File details

Details for the file gamfit-0.1.60-cp310-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for gamfit-0.1.60-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 56cb9b5c11bba147e18dcb2718fae24051419144292e2248c4d57c4a78f67e77
MD5 1120562581dfaa01480205de3f0647e5
BLAKE2b-256 93fcc9c8fa0e31c1a8109d573420cfb3e14e723febd8775f2bb1e3a2dca6c498

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