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

Uploaded CPython 3.10+Windows x86-64

gamfit-0.1.61-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.61-cp310-abi3-musllinux_1_2_aarch64.whl (10.0 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

gamfit-0.1.61-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.61-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.61-cp310-abi3-macosx_11_0_arm64.whl (9.6 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

gamfit-0.1.61-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.61.tar.gz.

File metadata

  • Download URL: gamfit-0.1.61.tar.gz
  • Upload date:
  • Size: 2.7 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.61.tar.gz
Algorithm Hash digest
SHA256 3a3421c01fed84da4b60025501d27cd2053740ea320eb4dd3d3b95008b531062
MD5 233d5086339332f5fae407036f3c83a1
BLAKE2b-256 fd7cb900280e11f03e5e1c08d6426427d9a30a35f9f5544cf2dacde392a0946f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: gamfit-0.1.61-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.5

File hashes

Hashes for gamfit-0.1.61-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 d260e354b627e8d3609e5f368710496faa4dd6bbfe5bce414973acad4edf4e01
MD5 ceb73ad5ac8c4f702d4fcfd23738b500
BLAKE2b-256 72c97b63106c4b803f90a114fdb6c04f965a462024905973ff4eefaff21a3df7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.61-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 793259ee04657e388c3fb914a1b6e091a1944cfb4633efd5ae952cd6d29846f3
MD5 a32cdfc84677dc0e460c92ed5d4790f3
BLAKE2b-256 23b101aba33e8a7c1492aa824383509c9d2718858a8d2e4c0388ee933058236f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.61-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 d8dc0cf3a5e32f081e04c036d893c326909b610f5b17e72dca3a7e4e2a60c956
MD5 ff785fd4268214212312ddeac5d0dea0
BLAKE2b-256 27451e96b71b7b12ac3fca0bb32f437e2471d8aa13856802b25f18eea621ec49

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.61-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4e98d3a64ee6f0182544a87c94bae5e3581d988484292a963dea378660b539f5
MD5 c121610a834151c5ea262c70c7d13f72
BLAKE2b-256 121f4749e252367ce082abcdb940f80cadd6346de3a73824db60c752f06bef7d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.61-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4d2162ea876b2e97c4e8628c2f49a71baf6812dcb21babc5556295e40a5315e3
MD5 39c89ced543aabe362da241c63e254e1
BLAKE2b-256 51bc9aec7424680bd4a7dc0a4de3907b3276924e51544f147191216064b29934

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.61-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6d2bd497f5dab6b1a3dd5c2fd0f30f6ca77ca2e883af71521f63bd225c2e8325
MD5 07efee0d7d10f018d14cdc0e2b7473c1
BLAKE2b-256 9fa261a69c7921289a6b5f83e14434116d887b9a0f510c644b57058cfc94fe7a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.61-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 6bb1211f3052438d5c7d3e4829a2316a1bfa29e0c755cb3abb804cd976333112
MD5 45ee81470b395de36df85f58c6e7eb73
BLAKE2b-256 dab739afbd8d69973c4704ad4751b31c7f3e2b4daae4805fe2fe9a847337d3d8

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