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.5 days 1x (Baseline)
Econox (Auto-Diff) CPU ~42 min ~86x
Econox (Auto-Diff) GPU (T4) ~17 min ~212x

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).

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.2},
  year = {2025},
  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.2.tar.gz (143.5 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.2-py3-none-any.whl (53.5 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for econox-0.1.2.tar.gz
Algorithm Hash digest
SHA256 cc1d4f98ca1b554ed6e0c5ea825c1d0716ed59bfb4a1b398b933f3ee76143e72
MD5 877daed840a567d3efa1d85751ec4c89
BLAKE2b-256 6c2d37e753ad7a435c0e098e84a948306ac5263d9c627c0c97e02244fdf0a015

See more details on using hashes here.

Provenance

The following attestation bundles were made for econox-0.1.2.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.2-py3-none-any.whl.

File metadata

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

File hashes

Hashes for econox-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 eb32e23cbcc9e014a1ab350d4e28c61d0d703f6d6c80cf78cef92c4ddec3e265
MD5 25a4e9faa8df45a123d53748d01b9769
BLAKE2b-256 27ce4a33ccdd8f14ce07356fedae7166b3d18e5b45d2aafbd44b63c7c42fbe00

See more details on using hashes here.

Provenance

The following attestation bundles were made for econox-0.1.2-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