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.42.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.42-cp310-abi3-win_amd64.whl (11.4 MB view details)

Uploaded CPython 3.10+Windows x86-64

gamfit-0.1.42-cp310-abi3-musllinux_1_2_x86_64.whl (11.2 MB view details)

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

gamfit-0.1.42-cp310-abi3-musllinux_1_2_aarch64.whl (9.7 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

gamfit-0.1.42-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.0 MB view details)

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

gamfit-0.1.42-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (9.5 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

gamfit-0.1.42-cp310-abi3-macosx_11_0_arm64.whl (9.3 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

gamfit-0.1.42-cp310-abi3-macosx_10_12_x86_64.whl (10.5 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: gamfit-0.1.42.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.42.tar.gz
Algorithm Hash digest
SHA256 3384416c389b7c58c0bab8aecc8a51eb3755998479f93fe9425ca28cb1396e5b
MD5 3a2b4cfae59fb14b3b3f155bc734631f
BLAKE2b-256 686eb7da5473c2a213c8caae3bcf6d2ebfcf910671b8b937f4963d940718959b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: gamfit-0.1.42-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 11.4 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.42-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 c873b0becd8ee8b1a131d29415e4a270d5de37e8123b26f19e71d9ba5f10aafc
MD5 990a187823cf8bd1b23d8a966f19e1d1
BLAKE2b-256 4f605a47d0fa8df59547a8a260cd1bdf8d27c891762422377fecdcf6952e49d1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.42-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 daba3ffb569736fce3c5f9cabbf7fe5a946b1df637821fffd401f59b12f02a3b
MD5 f47026c291e84b25aeb69515e0edc1f1
BLAKE2b-256 a441454bb26e2d23fe94ab296e3cce8f8079596b3cd4c5f17c4cafed5a1a4b0e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.42-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 2aa1fde147fc5e1b6629e2d76a7380042758dd048f260c2f999713582ff775f3
MD5 a2917f6870c505626c1e44491ed7ba7d
BLAKE2b-256 d22c86a5ac5d85193179e58b45ee361b121a366bd9cd806cb8732cdbd8a0af15

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.42-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 43362699ca0ad9e8bb34190ed28bc6efcacd6166895fa2af4d27ee8e7b376c6d
MD5 613354a5ab0dafaa4c2bef9265188ec9
BLAKE2b-256 cfe83fe88cb36f2280c28baf637fa8b807a0a18a3af5b8cabe47c2dd0c4d34c4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.42-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 913221d4cac8e959b4fb752af70f0c023cc583f6636a85ab1eabc7f3680231a9
MD5 4abac4ce147696b165f5c195451e249b
BLAKE2b-256 94a05905cb7247ffd53ac3ed35f42a4e04b3709d1d6ff587d7e29baee714c96c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.42-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 852f3702d105ad6d2599c3aaf1d07d71954c59d02cf56e9cf975accdc384c8d6
MD5 6f5164b80e33d6cd5ef3e5ea3d1bc19f
BLAKE2b-256 78d752184b621919a762d0d9b470c3555c46383216060256df51b177df3374dc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.42-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 2f37b0a04db6dfbe2251c47882774ca82909df2af257bce3b9a895d0033433d2
MD5 ffb4341347c58f4e428f38d7423fac9c
BLAKE2b-256 32071c14381fb273f6362dc26409d8b5ff1d43787868e9cd5f1f982e316e25e4

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