crabbymetrics
Rust-backed econometrics 🦀🔢 models with a scikit-adjacent Python API. Focus: extremely low runtime dependency footprint, simple NumPy-facing estimators, robust standard errors, and bootstrap support where it fits the estimator.
Features
- Linear, IV, and panel causal estimators: OLS, Ridge, FixedEffectsOLS, TwoSLS, HorizontalPanelRidge, SyntheticControl, SyntheticDID, AugmentedBalancing, MatrixCompletion, InteractiveFixedEffects
- Common panel causal API:
HorizontalPanelRidge,SyntheticDID,AugmentedBalancing, andMatrixCompletionuse balanced outcome and absorbing treatment matrices, then expose ATT, counterfactuals, treatment effects, event-study summaries, and group means throughsummary() - Regularized and likelihood estimators: ElasticNet, Logit, Multinomial Logit, Poisson
- Moment and semiparametric estimators: GMM, BalancingWeights, EPLM, AverageDerivative, PartiallyLinearDML, AIPW
- Shared robust covariance options for the main linear estimators: vanilla, HC1, Newey-West, and cluster
- Weighted fits for OLS, Ridge, FixedEffectsOLS, and TwoSLS
ElasticNetspans the ridge and lasso corners: usel1_ratio=0.0for ridge-style shrinkage andl1_ratio=1.0for lasso-style shrinkage- PCA and KernelBasis for feature engineering before regression-style estimation
Optimizersnamespace exposing LBFGS, BFGS, NonlinearConjugateGradient, Gauss-Newton least squares, and SimulatedAnnealingfit,predict,summary, andbootstrapwhere meaningful for the estimator
Install
This package is built with pyo3/maturin and ships as native wheels.
PyPI: https://pypi.org/project/crabbymetrics/
uv pip install crabbymetrics
Example
import numpy as np
from crabbymetrics import OLS
x = np.random.randn(200, 3)
beta = np.array([1.0, -2.0, 0.5])
y = 0.3 + x @ beta + np.random.randn(200) * 0.1
model = OLS()
model.fit(x, y)
print(model.summary())
Anytime-valid OLS inference is available from OLS.summary(...):
import numpy as np
import crabbymetrics as cm
rng = np.random.default_rng(1)
n = 100
x = rng.normal(size=(n, 3))
x = x - x.mean(axis=0)
trt = rng.choice([0.0, 1.0], size=n)
y = (
1.0
+ 1.4 * x[:, 2]
+ 2.3 * trt
+ 2.0 * x[:, 0] * trt
+ 3.0 * x[:, 1] * trt
+ rng.normal(size=n)
)
design = np.column_stack([x, trt, x * trt[:, None]])
model = cm.OLS()
model.fit(design, y)
g_star = cm.optimal_g(n, design.shape[1] + 1, alpha=0.05)
summary = model.summary(vcov="vanilla", anytime_valid=True, g=g_star)
print(summary["p_value"])
print(summary["confint"])
Panel causal estimators take matrices directly rather than long data frames:
import numpy as np
import crabbymetrics as cm
Y = np.random.randn(20, 12)
W = np.zeros_like(Y)
W[15:, 8:] = 1.0 # absorbing treatment matrix
model = cm.SyntheticDID()
model.fit(Y, W)
out = model.summary()
print(out["att"], out["event_study"].keys(), out["group_means"].keys())
BalancingWeights remains available as the lower-level calibration/reweighting API, but the paved panel path is estimator-first.
AugmentedBalancing.fit(Y, W, outcome_model=None) composes supplied untreated-outcome predictions with unit or unit-and-time residual balancing. Constructor options select cohort versus individual unit-weight targets and raw versus residualized weight fitting.
The Augmented Balancing vignette shows a staggered-adoption workflow with a matrix-completion nuisance surface, estimator comparisons, event-time plots, and weight-target diagnostics. The class reference documents every constructor option and summary() field.
The direct optimizer wrappers live under Optimizers and follow a lightweight scipy-style interface:
import numpy as np
from crabbymetrics import Optimizers
def objective(theta):
return float((theta[0] - 1.0) ** 2 + 2.0 * (theta[1] + 2.0) ** 2)
def gradient(theta):
return np.array([2.0 * (theta[0] - 1.0), 4.0 * (theta[1] + 2.0)])
result = Optimizers.minimize_lbfgs(objective, np.array([4.0, 3.0]), gradient)
print(result["x"], result["fun"])
Benchmarks
The latest cross-library runtime snapshot is checked in as benchmarks/runtime_comparison.png.
This benchmark used synthetic problems with p=5, sample sizes from 10^3 to 10^6, fit-only timing, and a 45-second per-fit timeout.
OLSis competitive already and was faster than both scikit-learn and statsmodels atn=10^6.Poissonbeats statsmodels comfortably but still trails scikit-learn at largern.Logitand especiallyMultinomialLogitare the main performance gaps to close before adding more iterative GLM-style estimators.
Development
Create and populate the project virtual environment, then build the extension into that venv.
uv sync
uv run maturin develop
uv run maturin develop is sufficient for rebuilding and reinstalling the package in .venv once the environment exists. If you change Python dependencies or the pyproject.toml metadata, run uv sync again first.
Package versioning is sourced from Cargo.toml; the Python package metadata is dynamic.
To release to PyPI, use the Build wheels GitHub Actions workflow manually from master and enter the next version without the leading v (for example 0.6.1). The workflow bumps Cargo.toml, commits to master, creates the vX.Y.Z tag, runs tests, builds wheels and an sdist, publishes the GitHub Release, and publishes to PyPI. The older commit_tag_release.sh script remains as a local fallback for manually tagging the current Cargo.toml version.
Rendered examples and API docs live under docs/. Rebuild the site with uv run quarto render docs.
For docs work, install the docs extra first: uv sync --extra docs.
Wheels
Wheels are platform-specific and included in GitHub releases. See the releases tab.
Metadata
Release files for crabbymetrics 0.9.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| crabbymetrics-0.9.0.tar.gz | 588.6 kB | Details |
Built distributions (wheels)
Total release size: 22.8 MB
Release files / crabbymetrics-0.9.0.tar.gz
| Download URL | crabbymetrics-0.9.0.tar.gz |
|---|---|
| Size | 588.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c0db9b1517b8bf8c39ba816a7f0d8167b9110ca7be4fe766b24bb56a24762e65
|
|
BLAKE2b-256 checksum How to use checksums |
694a3f13c30196a779a822d75a56658b194f0d442680b760ee35480768db4cd4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency logRelease files / crabbymetrics-0.9.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | crabbymetrics-0.9.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 2.6 MB |
| Tags | CPython 3.14 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
fc8cf0dc535ca4f364988ca1f3f631ded18c80c665b5b4313f7dc6fe67736e3e
|
|
BLAKE2b-256 checksum How to use checksums |
5701fe2d5775a5fa6a872d36f84b63566329b82532e71ac48009310c1e6e0e96
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency logRelease files / crabbymetrics-0.9.0-cp314-cp314-macosx_11_0_arm64.whl
| Download URL | crabbymetrics-0.9.0-cp314-cp314-macosx_11_0_arm64.whl |
|---|---|
| Size | 1.9 MB |
| Tags | CPython 3.14 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
65b1d45be65915b230082b92c8ac4000bb9b17703e0a03732dca6a76c4377428
|
|
BLAKE2b-256 checksum How to use checksums |
5eddc2927ca1e133a9a3c7a5b442a31408a47f4aa1b143b20a3c1655b13be863
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency logRelease files / crabbymetrics-0.9.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | crabbymetrics-0.9.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 2.6 MB |
| Tags | CPython 3.13 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
327aff825b507b3b1a18c27f1ac1d5773a9e503fd76141d889cc0926df8773a0
|
|
BLAKE2b-256 checksum How to use checksums |
504d11984b41292fa8952fc7932e429cd17eb4235f14b2414f941064537c7ea3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency logRelease files / crabbymetrics-0.9.0-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | crabbymetrics-0.9.0-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 1.9 MB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
3e4f92f3ce14616dc9aa51791557a2614446496ed4d80fcd5726fafd721ac89d
|
|
BLAKE2b-256 checksum How to use checksums |
27779c284aca4dc153d3520f46e269620aca581d6e8f80e2e65d8f7ae57e334d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency logRelease files / crabbymetrics-0.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | crabbymetrics-0.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 2.6 MB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
512992159d5922e8b641e0bc9cab3fea0e54d2c1309e1cd4f1e7d783c502ac7e
|
|
BLAKE2b-256 checksum How to use checksums |
5f3a1b939b69d105aed544b202d210d4e651444729fa5ced30a3c1c608eebfa8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency logRelease files / crabbymetrics-0.9.0-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | crabbymetrics-0.9.0-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 1.9 MB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
2b8847d5d5eed8289104c60598545d031a24b72ea1dd66ee910912001675a836
|
|
BLAKE2b-256 checksum How to use checksums |
0263eda59d5d92c954c758c5a5a3bb8368fb6c12d0481671332ed2adb6fff76b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency logRelease files / crabbymetrics-0.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | crabbymetrics-0.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 2.6 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
418a3336e4c5c949820df05bed02812f4e4b541143441b058643608cd924e358
|
|
BLAKE2b-256 checksum How to use checksums |
bde6a4a199c6c112ba48f7b025cabefcb9520852e2fdfa91f05199a0cff66b91
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency logRelease files / crabbymetrics-0.9.0-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | crabbymetrics-0.9.0-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 1.9 MB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
781bf32556bf535bf815ddaccd36335d094581e5fafae5885bf3dfe1c897dffd
|
|
BLAKE2b-256 checksum How to use checksums |
7ff2c1adb63161dbb8cb711607a70a96d85f9bd9bb1ca5ac5aedecd1369e518f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency logRelease files / crabbymetrics-0.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | crabbymetrics-0.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 2.6 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
9942063d17ebf9a37ea112e35b2eb81f7a222fbe3bef7b5334dd62846deee6cf
|
|
BLAKE2b-256 checksum How to use checksums |
7b97303bfe65a695544f3cfb057ce2365526f994065f0a97aca002c3a50c2ef6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency logRelease files / crabbymetrics-0.9.0-cp310-cp310-macosx_11_0_arm64.whl
| Download URL | crabbymetrics-0.9.0-cp310-cp310-macosx_11_0_arm64.whl |
|---|---|
| Size | 1.9 MB |
| Tags | CPython 3.10 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
7e659e6fe030781e07f16c5471a82cff8d0c1be71bc19386a1f918762b59af25
|
|
BLAKE2b-256 checksum How to use checksums |
6ffe5f6af21dcc847f5926ca07b77750e26f2683be1ba3eb0a22e9d003693e24
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency log