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

Uploaded CPython 3.10+Windows x86-64

gamfit-0.1.64-cp310-abi3-musllinux_1_2_x86_64.whl (12.1 MB view details)

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

gamfit-0.1.64-cp310-abi3-musllinux_1_2_aarch64.whl (10.5 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

gamfit-0.1.64-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (12.0 MB view details)

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

gamfit-0.1.64-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (10.4 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

gamfit-0.1.64-cp310-abi3-macosx_11_0_arm64.whl (10.2 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

gamfit-0.1.64-cp310-abi3-macosx_10_12_x86_64.whl (11.5 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: gamfit-0.1.64.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.64.tar.gz
Algorithm Hash digest
SHA256 e3fa0630e4001dc57a2d5a2b46e7d914bf694d4210fa78b5e2b745d17456bc41
MD5 31302c26f6509d326e78cbffe817ae9c
BLAKE2b-256 00f8394e9721118c51aae05d1b1c60e4adaf997372043f88118993c1bb40ca92

See more details on using hashes here.

File details

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

File metadata

  • Download URL: gamfit-0.1.64-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 12.6 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.64-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 befe1b3e5b1919f939a69fdf157461d36f2edf8976e0f7aea5d6de3daa771bd1
MD5 3324898ae87215edc39b81e271f5d92b
BLAKE2b-256 e53f9873c5a79d52e28151bef1b3d7bd8aba6f7fe114d78874b08458afb5a972

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.64-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 46c46bea8db5fcacae35f39235800a92dd2f88a4ca2d995764bf8c60f4988794
MD5 94e3e8bf6dbf5d9ae162f098a11a9e9a
BLAKE2b-256 5b467778535f6e43453c693a8199bb58b2b708e822ca2e4a4da5ac35e0967db8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.64-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 9a75b78e87d89f363b881d3bf5fb6b96de875a32ebdf0f3aebbd220f8495d9a0
MD5 98ed883453f21a527e216d31c89ad77e
BLAKE2b-256 a8e2b064042756bebaf218225f70190b00138aac4183c0a9d4b463c238c22736

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.64-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2f0d503c1df5990aee93757344c7ea207d092151e82a578c683a19c481f3ed05
MD5 2397ba6ffe7add29762701109127ed1f
BLAKE2b-256 689f20e11adf21995f3d83e387cc65b8e94d0c15f3bceeb068664b09756af67c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.64-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 b9f1c6c0613fd07b2074204a4bc1f6fa97c0e93ec970840bf9ea0c0b2d42a4af
MD5 9ceca74b95c7c498ae7ed2c315cbb663
BLAKE2b-256 5ac1b18bfdc5fafd6e760584f0778a11dbf24d213466dcb50698d73c18f50e17

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.64-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 21c4b2eab1a2c6c816e8b2bb9b27ad84dbc3d28b2452473f976aa2c8f62cf08a
MD5 3a0e1b5ee61933a8ddf71d1169fe11fd
BLAKE2b-256 6080d902f46d25bf6a21de8bf16e5e035dc6a4dd8ee904d086842bcb1a5a428a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.64-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 8ee997089836d68a9b921232bb665a1822b25321dda08d5b4d3dd4ed54753b84
MD5 992df11eadb0b494756eed9497308043
BLAKE2b-256 67a1266fc4005d659c5a8e500361b4c18f8f5279370d5e9e81b12c5497b759db

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