Formula-first generalized additive models with a high-performance Rust core
Project description
gamfit
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file gamfit-0.1.56.tar.gz.
File metadata
- Download URL: gamfit-0.1.56.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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
db18e5f9799884065ef8e978f2cd9bea194549ba2487d3e017ac9c0b30cd7026
|
|
| MD5 |
bcbc85d3843a490009cbfb8164465e9d
|
|
| BLAKE2b-256 |
1fbb1d6a55867ba275c2669d7a0b503e9fdbe8ba0490340c4958d244633a3f26
|
File details
Details for the file gamfit-0.1.56-cp310-abi3-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: gamfit-0.1.56-cp310-abi3-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 11.5 MB
- Tags: CPython 3.10+, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
66e8f0b4d00c4663fcf37b031a94c579daac53c36aaa0731aa3d26d438b9969c
|
|
| MD5 |
218b15b2bf37228b89f4eab8ffd016b5
|
|
| BLAKE2b-256 |
31b51e7e9406d146e0f2cfc0b2e52c1ff7f706f1d1a11f2a2e466be30b707f86
|
File details
Details for the file gamfit-0.1.56-cp310-abi3-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: gamfit-0.1.56-cp310-abi3-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 10.0 MB
- Tags: CPython 3.10+, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b46228be3cd6951dc5f4c067c4a25bfe7197a0187996abccf37136fbf1e2e4ae
|
|
| MD5 |
f17cad0b88e27807d0380e57bcba47b5
|
|
| BLAKE2b-256 |
6890117058db3daf18e98ca96eddd5e1a9cd37c20bad8879ebe9e0857ba9852e
|
File details
Details for the file gamfit-0.1.56-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: gamfit-0.1.56-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 11.4 MB
- Tags: CPython 3.10+, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5af2a71a383fcdc959dddd9bb7ea884ec2ffc8860b6c7265699adc07600261da
|
|
| MD5 |
0df428cb686a48a1be45cf618b00f633
|
|
| BLAKE2b-256 |
bbf776bfca89cf9da6adfdc374f6157aa570614f20eaa49c12003c83d3109c9e
|
File details
Details for the file gamfit-0.1.56-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: gamfit-0.1.56-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 9.8 MB
- Tags: CPython 3.10+, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a7aa6cb0ec4bb1d4266a98e8302c4b56f948b71cd5d3a1215a1cbb6ffa5f1233
|
|
| MD5 |
3f57e3ccb7b1440444cba6bfe41133bb
|
|
| BLAKE2b-256 |
c4ff0c04bfe46898ceb34aa97700c66de74d9106208e80797e68150cb84ad220
|