High-performance econometrics library written in Rust with Python bindings.
Project description
Econometrust
A Python library for econometric regression analysis, implemented in Rust for computational efficiency.
Overview
EconoMetrust provides implementations of fundamental econometric estimators with comprehensive statistical inference capabilities. The library is designed for researchers, analysts, and practitioners who need reliable econometric tools with detailed diagnostic output.
Estimators
- OLS (Ordinary Least Squares): Standard linear regression with optional robust standard errors
- WLS (Weighted Least Squares): Regression with known heteroskedastic error structure
- GLS (Generalized Least Squares): Regression with known error covariance matrix
- IV (Instrumental Variables): Consistent estimation for exactly identified endogenous models
- TSLS (Two-Stage Least Squares): Consistent estimation for overidentified endogenous models
- FE (Fixed Effects): Panel data regression with entity-specific fixed effects
Installation
pip install econometrust
Basic Usage
Ordinary Least Squares
import numpy as np
from econometrust import OLS
# Prepare data
X = np.random.randn(100, 3)
y = X @ [1.5, -2.0, 0.5] + np.random.randn(100) * 0.1
# Fit model
model = OLS(fit_intercept=True, robust=False)
model.fit(X, y)
# View results
print(model.summary())
print(f"R-squared: {model.r_squared:.4f}")
Weighted Least Squares
from econometrust import WLS
# Data with heteroskedastic errors
X = np.random.randn(100, 2)
weights = np.exp(X[:, 0]) # Known variance structure
y = X @ [1.0, -0.5] + np.random.randn(100) / np.sqrt(weights)
# Fit weighted model
model = WLS(fit_intercept=True)
model.fit(X, y, weights)
print(model.summary())
Instrumental Variables
from econometrust import IV
# Generate IV data
n = 200
Z = np.random.randn(n, 2) # Instruments
u = np.random.randn(n) # Unobserved confounder
# Endogenous regressors
X = Z @ [0.8, 0.6] + 0.5 * u + np.random.randn(n, 2) * 0.1
y = X @ [1.0, -0.5] + u + np.random.randn(n) * 0.1
# Fit IV model (exactly identified)
model = IV(fit_intercept=True)
model.fit(Z, X, y)
print(model.summary())
Two-Stage Least Squares
from econometrust import TSLS
# Overidentified case (more instruments than regressors)
n = 300
Z = np.random.randn(n, 4) # 4 instruments
u = np.random.randn(n)
# 2 endogenous regressors
X = Z @ [0.7, 0.5, 0.4, 0.3] + 0.6 * u + np.random.randn(n, 2) * 0.1
y = X @ [1.2, -0.8] + u + np.random.randn(n) * 0.1
# Fit TSLS model
model = TSLS(fit_intercept=True)
model.fit(Z, X, y)
print(model.summary())
Fixed Effects
from econometrust import FE
# Generate panel data: 100 entities, 8 time periods each
N, T = 100, 8
n_obs = N * T
# Entity identifiers
entity_id = np.repeat(np.arange(N), T)
# Generate data with entity fixed effects
np.random.seed(42)
alpha = np.random.randn(N) * 2.0 # Entity fixed effects
X = np.random.randn(n_obs, 3)
# Outcome with entity effects and time-varying component
y = np.repeat(alpha, T) + X @ [1.5, -2.0, 0.8] + np.random.randn(n_obs) * 0.1
# Fit Fixed Effects model with clustered standard errors
model = FE(robust=True)
model.fit(X, y, entity_id)
print(model.summary())
API Reference
Common Methods
All estimators share the following interface:
# Initialization
model = Estimator(fit_intercept=True)
# Fitting
model.fit(...) # Parameters vary by estimator
# Prediction
predictions = model.predict(X)
# Results
print(model.summary())
model.coefficients # Coefficient estimates
model.intercept # Intercept term (if fitted)
model.residuals # Residuals
model.r_squared # R-squared
model.mse # Mean squared error
model.n_samples # Number of observations
model.n_features # Number of features
Statistical Inference
# Standard errors and significance tests
model.standard_errors() # Standard errors
model.t_statistics() # t-statistics
model.p_values() # p-values
model.confidence_intervals(alpha=0.05) # Confidence intervals
# Covariance matrix
model.covariance_matrix() # Parameter covariance matrix
Estimator-Specific Parameters
OLS
OLS(fit_intercept=True, robust=False)
# robust: Use heteroskedasticity-robust (HC0) standard errors
WLS
WLS(fit_intercept=True)
model.fit(X, y, weights) # weights: positive sample weights
GLS
GLS(fit_intercept=True)
model.fit(X, y, sigma) # sigma: error covariance matrix
IV
IV(fit_intercept=True)
model.fit(instruments, regressors, targets)
# Requires: n_instruments == n_regressors (exactly identified)
TSLS
TSLS(fit_intercept=True)
model.fit(instruments, regressors, targets)
# Requires: n_instruments >= n_regressors (identified)
FE
FE(robust=False)
model.fit(X, y, entity_id)
# robust: Use clustered standard errors (cluster by entity)
# entity_id: Array of entity identifiers for panel structure
Output Example
The summary() method provides comprehensive regression output:
====================================
OLS Regression Results
====================================
Dependent Variable: y No. Observations: 100
Model: OLS Degrees of Freedom: 96
Method: Least Squares R-squared: 0.830
Covariance Type: classical Adj. R-squared: 0.825
====================================
Coefficients
====================================
Variable Coef Std Err t-stat P>|t| [0.025 0.975]
--------------------------------------------------------------------
const 0.0234 0.0891 0.262 0.794 -0.1536 0.2004
x1 1.4987 0.0934 16.046 0.000 1.3131 1.6843
x2 -1.9876 0.0912 -21.786 0.000 -2.1688 -1.8064
x3 0.7899 0.0888 8.896 0.000 0.6135 0.9663
Requirements
- Python 3.8+
- NumPy
- Rust toolchain (for building from source)
License
This project is dual-licensed under MIT and Apache-2.0 licenses.
Links
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 Distributions
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 econometrust-0.2.2-cp312-cp312-manylinux_2_34_x86_64.whl.
File metadata
- Download URL: econometrust-0.2.2-cp312-cp312-manylinux_2_34_x86_64.whl
- Upload date:
- Size: 12.5 MB
- Tags: CPython 3.12, manylinux: glibc 2.34+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.9.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
94e668ffaf5d3563b5212d6f0c544f0c120413e4203b8699901471d0ee35ca0b
|
|
| MD5 |
fc610c2cfb18e00a9c4e3598b75fc848
|
|
| BLAKE2b-256 |
069889f73b7c524f907e4514569f431418d9c8972e7cd907e3c3a49831a1d9fd
|
File details
Details for the file econometrust-0.2.2-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: econometrust-0.2.2-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 405.7 kB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.9.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a454b048eae8aa189e2d1cf9a9f5d618c36fc81369e5496a8660b6c7c7c5fd5d
|
|
| MD5 |
8adbe3f0ab52fc0dd34f6339c4300be3
|
|
| BLAKE2b-256 |
ee63729856d16d50f5a28d64cdc1045b5f0ceba4052f53f1affccec58d6d139b
|
File details
Details for the file econometrust-0.2.2-cp312-cp312-macosx_10_12_x86_64.whl.
File metadata
- Download URL: econometrust-0.2.2-cp312-cp312-macosx_10_12_x86_64.whl
- Upload date:
- Size: 461.4 kB
- Tags: CPython 3.12, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.9.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b8bf047436c2daf80a4864fcfb3f58426dea6470b4d9dad204fb27aed6acd3bd
|
|
| MD5 |
791bcfbea514f31b183fa229e3af716b
|
|
| BLAKE2b-256 |
254ab3d1631056fad26992089ea8d73fbf534663d8b56c33d9de883f38fe9f4b
|