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.78.tar.gz (3.0 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.78-cp310-abi3-win_amd64.whl (13.2 MB view details)

Uploaded CPython 3.10+Windows x86-64

gamfit-0.1.78-cp310-abi3-musllinux_1_2_x86_64.whl (12.6 MB view details)

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

gamfit-0.1.78-cp310-abi3-musllinux_1_2_aarch64.whl (11.0 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

gamfit-0.1.78-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (12.5 MB view details)

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

gamfit-0.1.78-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (10.8 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

gamfit-0.1.78-cp310-abi3-macosx_11_0_arm64.whl (10.6 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

gamfit-0.1.78-cp310-abi3-macosx_10_12_x86_64.whl (11.9 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: gamfit-0.1.78.tar.gz
  • Upload date:
  • Size: 3.0 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.78.tar.gz
Algorithm Hash digest
SHA256 7b68f1007cca3df1ca0f8517cc06c9bc4ec2a7e376fcecfbd213d1112e5ad257
MD5 5ccba659f9ddc2d2b5a364d4aa331be8
BLAKE2b-256 f2ee17c52d9c3145703dc292e9bab96af927ec205ada7c62f716ce846b9744d1

See more details on using hashes here.

File details

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

File metadata

  • Download URL: gamfit-0.1.78-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 13.2 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.78-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 c39866c56f63d3a9a703073447bb27fa98dfcd2ad9e43d76c2815aee8802ac9d
MD5 db338d06d4571eb0a97e7bee193cdb49
BLAKE2b-256 d2bbd7523a343d73e330d9fb52261088f46667b42d071848a09882c38e16de48

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.78-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 6df6626891417a319b896d4e9d9ab549103788a510b9d748c433cb80f047a6d8
MD5 eb7d33fff1f355abb9118d9a61de8dad
BLAKE2b-256 4fbbad67900f677771bec453a6d2dec23d4640b94fc9a79598bb064a806512b2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.78-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 82cd744042283cca715cc75c64979316957c6d5524176a0ffa8eb01fac39ff9a
MD5 b90a9fb78937af9d63b2998daf3d97bc
BLAKE2b-256 778e4a822eccf90dd6eacd782cc6d1ee7e2eb005b5913f78cd711aae8d9c675f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.78-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 452a2156654d3c51df0a23f6cc8404d4eea5e4b3dd8a11327583bfebb86bffb6
MD5 1f2c310d6f1da8dc5aa125f99d500efa
BLAKE2b-256 1130d6f943c607f8524ddf125f702b19b810d4aa3a1cdc6550f2025bb1bc9b92

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.78-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 23e15adee601e27f51e94d05c068c66915fecc1302ee1b61cfe4ca436a8f3613
MD5 5b2cbec022761454c5d0983bab359a17
BLAKE2b-256 4c930b6fb09cde2ea420c24fc61d2e4d94a520b2c8620a2ba16858b856c0e71a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.78-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a90b18c448d120fef41f9ba42da24a58825080911e451b56362b28ecaf7cab2d
MD5 d5900607e8450df3419dc9a13d3834ec
BLAKE2b-256 07432d8115f49f8dec996ab2ab240022f6bd61414f4f5e0b88ed0b8e5a93e0e6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.78-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 444e28bccb048c84c0b461edf782dda3dd2145a13afedc3128a92ad271a0ffc9
MD5 f660ac6172fd0c30354a7e3c9db2553f
BLAKE2b-256 b34d395f98baf2b5dc4468dfbaf72c7518f14858f0b3b58c6d8afffcd37bac55

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