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.

Geometric / manifold smooths handle predictor spaces that wrap, including circles, cylinders, tori, the sphere (intrinsic Wahba / spherical harmonic kernels), and one-sided strips, with no seams or pole artefacts:

rotating recovery of a trefoil knot, latent-free loop, wobbly cylinder, lumpy sphere, bumpy torus, and Möbius strip from noisy 3-D point clouds

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.
  • Geometric / manifold smooths. Cyclic 1-D, cylinder / torus tensor, intrinsic sphere (Wahba + spherical harmonics), Möbius strip, boundary-conditioned B-splines. Predictor spaces that wrap or close are first-class — no seams, no pole artefacts.
  • 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.70.tar.gz (2.9 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.70-cp310-abi3-win_amd64.whl (13.0 MB view details)

Uploaded CPython 3.10+Windows x86-64

gamfit-0.1.70-cp310-abi3-musllinux_1_2_x86_64.whl (12.4 MB view details)

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

gamfit-0.1.70-cp310-abi3-musllinux_1_2_aarch64.whl (10.8 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

gamfit-0.1.70-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (12.3 MB view details)

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

gamfit-0.1.70-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (10.6 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

gamfit-0.1.70-cp310-abi3-macosx_11_0_arm64.whl (10.4 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

gamfit-0.1.70-cp310-abi3-macosx_10_12_x86_64.whl (11.7 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for gamfit-0.1.70.tar.gz
Algorithm Hash digest
SHA256 04b3b8b1603cac4c3fcd0bfea5e0aa0c77c78b3173f7a5a3b954599b2f04bcf4
MD5 7090ee6992bceeb923a840338d5d7395
BLAKE2b-256 b3b28029ecc47ed5c4c2ba779ad1b321c14063c20cddce758563f1b6e595a651

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for gamfit-0.1.70-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 3f17e6715131969031d1cd826d64e65d7aae1d8cbc2ff6c387769b1659fbebf2
MD5 e22d847625cfafc8bdebc068f2355412
BLAKE2b-256 d11533879a6c32872d656a144b7bc7f469db24f8609df30ca5f763ae00cc7f1d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.70-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 7b05f800c979c1bd5e007e3d5c2acb914258b15495d5fd87202b6f7a72dc59b2
MD5 f6f6634824fdda605d069ff96e5ee458
BLAKE2b-256 f24515ed074cf945bb17538056b6873496a0471cc71f35c5ae3904d1a4a01030

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.70-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 bc7f1e626ddb52f3874faf6003fcab2c107dd200ad6e1ca3c04d43276e3bde9a
MD5 f8d8ec63f287984b32b3cd7cf826136a
BLAKE2b-256 8be68ced4ff75f633368034bbb84ec06115321e7e502cbe8aa587f7054de5171

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.70-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 95bce730904b90ddeb16c718cf55273861f80fe923205d988ff8d7e0d21b852d
MD5 4402313affa4ddc2147054297915a31f
BLAKE2b-256 3bfa3ca8ad856d442dc034267ccea888ac6aecd58b2a759cae828201b8da2a10

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.70-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4e47374b6173844c74a1839545b2d9509b4f0c54176ec0438d15b2c3d21b9640
MD5 cafbca51643250d5fa3fc12dbf2b93f2
BLAKE2b-256 1eb79185ebdae69c74631a2cb09b3de630bea1a85b7a3aec3a1b5816aac3c4f3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.70-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 64d1944cbb6cac3a88f34256738fd1c214a37fea1a50156b2712cf62c91f5f05
MD5 ffacee088e588e2d1157c1ea860b7752
BLAKE2b-256 0408fbe64790c33ad005d517afa29deeca3d76136a305d416285be37d6f3f9e1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.70-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 ddec52823682eb6e0b8117e745b61d6ee474e9d9bf0f27e64d9933f148590008
MD5 798fb24270d14b6c47ef3d9ed078d0d5
BLAKE2b-256 f4a7e4496a15c8b51c8a21e87af39592c8033094f947d125299167a3bf48eb50

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