Skip to main content

A JAX-based library for structural modeling and estimation in economics.

Project description

Econox

Build structural models like Lego blocks.

PyPI version Python Documentation Status License

[!WARNING] Status: Alpha Release

Econox is currently in the alpha stage. We are actively expanding the library of solvers and structural components.

Econox is a JAX-based toolkit for structural modeling and estimation. It leverages Equinox to provide a highly modular, object-oriented framework where researchers can assemble economic models from reusable components.

🧩 Core Philosophy: Composable Design

In Econox, a structural model is not a black box. It is a composition of independent, interchangeable blocks.

$$\text{Model} + \text{Utility} + \text{Solver} \xrightarrow{\text{Estimator}} \text{Results}$$

  • Define Physics: Swap LinearUtility with your own custom utility classes instantly.
  • Define Solver: Switch between ValueIteration and Equilibrium without rewriting the loop.
  • Estimate: Feed the assembled parts to Estimator to find parameters that match the data.

Key Features

  • 🐍 Pure Python & Easy Setup:

    • No Fortran/C++ required: Unlike legacy libraries that rely on complex compilation chains, Econox is Pure Python.
    • Hackable: Since the logic is written in standard Python (via Equinox), it is readable, debuggable, and easy to extend with custom logic.
    • JIT Compilation: While you write Python, JAX compiles it to XLA (machine code) at runtime, offering C++ level performance.
  • 🎯 Precision via Auto-Diff:

    • Exact Derivatives: Econox uses Automatic Differentiation to compute gradients and Hessians.
    • Better Inference: This eliminates approximation errors associated with numerical differentiation, leading to more accurate standard errors and t-statistics for structural parameters.
  • 🧩 Modular Modeling:

    • Define models as clean, composable classes. Swap utility functions or solvers instantly without rewriting the estimation loop.
  • 🚀 Hardware Accelerated:

    • Seamlessly scale to GPUs or TPUs to accelerate large-scale state spaces ($S>10,000$) simply by changing the JAX backend.

⚡ Validation & Performance

We demonstrate both the accuracy and scalability of Econox in a single unified benchmark.

Benchmark & Replication Report

The following notebook contains two key validations:

  1. Accuracy (Rust 1987 Replication): Successfully replicates the structural parameters $(\theta, RC)$ from John Rust's classic paper using the original dataset.
  2. Scalability (Large-Scale Benchmark): Measures estimation speed on massive synthetic problems ($S=3000, P=50$) to demonstrate hardware acceleration.

Open Benchmark Report In Colab

Scalability Results (Large-Scale DDCM)

Synthetic data estimation based on the structure of Rust (1987) fixed-point model. (State Space $S=3000$, Parameters $P=50$, 100 Estimation Steps)

Implementation Hardware Est. Total Time Speedup
NumPy (Numerical Diff) CPU ~2.0 days 1x (Baseline)
Econox (Auto-Diff) CPU ~1.1 hours ~44x
Econox (Auto-Diff) GPU (T4) ~19 min ~157x

Note: Times for Econox include JIT compilation overhead (Warmup). NumPy estimates are extrapolated from single-step performance using an honest solver (Utility $\to$ Bellman $\to$ Likelihood). Benchmark conducted on Google Colab (vCPU: Intel Xeon, GPU: NVIDIA T4).

Quick Start: Structural Estimation

Here is how you can build and estimate a Dynamic Discrete Choice Model (Rust 1987 style) by assembling reusable components.

Open Tutorial In Colab

import jax.numpy as jnp
import econox as ecx

# 1. [Environment] Define Data & Transitions
num_states, num_actions = 10, 3
model = ecx.Model.from_data(
    num_states=num_states,
    num_actions=num_actions,
    data={"x": jnp.zeros((10, 3, 1))}, # Dummy feature
    transitions=jnp.ones((30, 10)) / 10
)

# 2. [Physics] Define Utility Function
utility = ecx.LinearUtility(param_keys=("beta",), feature_key="x")

# 3. [Algorithm] Define Solver
solver = ecx.ValueIterationSolver(
    utility=utility,
    dist=ecx.GumbelDistribution(), # Logit
    discount_factor=0.95
)

# 4. [Interface] Assemble the Estimator
param_space = ecx.ParameterSpace.create(initial_params={"beta": jnp.array([0.0])})

estimator = ecx.Estimator(
    model=model,
    param_space=param_space,
    method=ecx.MaximumLikelihood(),  # Use MLE
    solver=solver
)

# 5. Estimate!
observations = {
    "state_indices": jnp.array([0, 1, 2]), 
    "choice_indices": jnp.array([0, 2, 1])
}
result = estimator.fit(observations)

print(f"Success: {result.success}")
print(f"Estimated Params: {result.params}")

Installation

Requires Python 3.11+ and JAX.

Using pip:

pip install econox

Using uv (Recommended):

uv add econox

Requirements

Econox is built upon the modern JAX ecosystem. The core dependencies include:

  • JAX: For high-performance array computing and automatic differentiation.
  • Equinox: For defining parameterized models.
  • Optimistix: For nonlinear optimization and root-finding.
  • Jaxtyping: For type annotations and shape checking.

📚 Documentation

For detailed API references and tutorials, please visit the Official Documentation.

ℹ️ Project Information

📄 Citation

If you use Econox in your research, please cite the software artifact as follows until the official paper is published:

@software{econox,
  author = {Ito, Haruto},
  title = {Econox: A JAX-based toolkit for structural modeling and estimation},
  url = {[https://github.com/ito-haru/econox](https://github.com/ito-haru/econox)},
  version = {0.1.4},
  year = {2026},
  note = {Alpha Release}
}

👥 Credits & Acknowledgements

Author

Acknowledgements

This library originates from an undergraduate thesis conducted at the Lab for Innovative Infrastructure Systems (LIIS), The University of Tokyo.

We are deeply grateful to Prof. Daisuke Fukuda (福田 大輔) and Asst. Prof. Keishi Fujiwara (藤原啓示) for their valuable academic guidance and theoretical advice regarding the structural estimation frameworks used in this library.

Note on Maintenance: This is an independent open-source project maintained by Haruto Ito. Please adhere to the license terms regarding liability.

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

econox-0.1.4.tar.gz (157.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

econox-0.1.4-py3-none-any.whl (65.1 kB view details)

Uploaded Python 3

File details

Details for the file econox-0.1.4.tar.gz.

File metadata

  • Download URL: econox-0.1.4.tar.gz
  • Upload date:
  • Size: 157.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for econox-0.1.4.tar.gz
Algorithm Hash digest
SHA256 fa13a5ed766b3298f5d12a4218ad3b5bce657f22f098bea074850681627a8020
MD5 047764ff4e6edbd963118ce6ebc0f509
BLAKE2b-256 fdc1d5053419c6ccb89b564c344d600f905a19f7386bde54edf3802aa1c5e2fd

See more details on using hashes here.

Provenance

The following attestation bundles were made for econox-0.1.4.tar.gz:

Publisher: publish.yml on ito-haru/econox

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file econox-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: econox-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 65.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for econox-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 9f0cee93f0e00fb3c967d42ddb81af17df505b02c0c7fae8f72a9194555fab7d
MD5 687d181e3e5cd8dcfc51592bca725579
BLAKE2b-256 23bb486df6a8546c9a5b12cd294e0742848b7db838b1ea91e99e1c6771cf4150

See more details on using hashes here.

Provenance

The following attestation bundles were made for econox-0.1.4-py3-none-any.whl:

Publisher: publish.yml on ito-haru/econox

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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