Input data: Polars DataFrame or path to parquet file
y_col
str
None
Dependent variable column (optional if formula provided)
x_cols
list[str]
None
Independent variable columns (optional if formula provided)
fe_cols
list[str]
None
Fixed effect columns (optional if formula provided)
formula
str
None
R-style formula: "y ~ x1 + x2 | fe1 + fe2"
weights
str
None
Column name for regression weights (WLS)
demean_tol
float
1e-3
Convergence tolerance for iterative demeaning
n_iter
int
100
Maximum iterations for demeaning
vcov
str
"iid"
Variance estimator: "iid", "HC1", or "cluster"
cluster_cols
list[str]
None
Clustering variables (required if vcov="cluster")
ssc
bool
False
Small sample correction for clustered SEs
sample_frac
float
None
Fraction of data to sample (e.g., 0.1 for 10%)
backend
str
"polars"
Computation backend: "polars" or "duckdb"
Returns
A dictionary containing:
Key
Type
Description
coefficients
dict[str, float]
Variable names → coefficient estimates
std_errors
dict[str, float]
Variable names → standard errors
n_obs
int
Number of observations used
n_compressed
int
Number of compressed rows (if compression used)
compression_ratio
float
Compression ratio (if compression used)
iterations
int
Number of demeaning iterations (0 if compression used)
vcov_type
str
Type of variance estimator used
is_iv
bool
Whether IV/2SLS was used
n_instruments
int
Number of instruments (if IV)
n_clusters
int
Number of clusters (if clustered SEs)
Compression
For vcov="iid" or vcov="HC1" (without IV), leanfe automatically uses YOCO compression from Wong et al. (2021):
Groups data by (regressors + fixed effects)
Computes sufficient statistics per group
Runs weighted least squares on compressed data
This is lossless - coefficients and standard errors are identical to the full computation, but much faster for discrete regressors (10-1000x compression).
Formula Syntax
The formula follows R-style syntax with extensions: