Skip to content

statspai.fixest

fixest

High-dimensional fixed effects estimation via pyfixest.

This module provides thin wrappers around pyfixest's estimation functions, converting results into StatsPAI's EconometricResults for seamless integration with outreg2 and the rest of the ecosystem.

Requires: pip install pyfixest

Examples:

>>> from statspai.fixest import feols, fepois
>>>
>>> # Two-way fixed effects with clustered SEs
>>> result = feols("wage ~ experience | firm + year",
...               data=df, vcov={"CRV1": "firm"})
>>> print(result.summary())
>>>
>>> # Poisson regression
>>> result = fepois("patents ~ rd_spending | firm", data=df)
>>>
>>> # Works with outreg2
>>> from statspai import outreg2
>>> outreg2(result, filename="table.xlsx")

feols

feols(fml: str, data: DataFrame, vcov: Optional[Union[str, Dict[str, str]]] = None, *, weights: Optional[str] = None, ssc: Optional[Any] = None, fixef_rm: str = 'none', collin_tol: float = 1e-06, lean: bool = False, **kwargs: Any) -> Union[EconometricResults, List[EconometricResults]]

Estimate OLS / IV with high-dimensional fixed effects via pyfixest.

Uses the Frisch-Waugh-Lovell theorem for fast absorption of high-dimensional fixed effects.

Parameters:

Name Type Description Default
fml str

A pyfixest-style formula. Examples:

  • "Y ~ X1 + X2" — plain OLS
  • "Y ~ X1 | firm + year" — two-way fixed effects
  • "Y ~ 1 | firm | X1 ~ Z1" — IV with fixed effects
  • "Y ~ X1 | csw0(firm, year)" — multiple estimations
required
data DataFrame

Input dataset.

required
vcov str or dict

Variance-covariance estimator.

  • "iid" — classical
  • "HC1", "HC2", "HC3" — heteroskedasticity-robust
  • {"CRV1": "firm"} — cluster-robust
  • {"CRV1": "firm + year"} — two-way clustering
None
weights str

Column name for regression weights.

None
ssc optional

Small-sample correction via pyfixest.ssc().

None
fixef_rm str

How to handle singleton fixed effects: "none" (keep) or "singleton" (drop).

"none"
collin_tol float

Collinearity tolerance.

1e-6
lean bool

If True, drop large intermediate arrays to save memory.

False
**kwargs Any

Additional arguments passed to pyfixest.feols().

{}

Returns:

Type Description
EconometricResults or list of EconometricResults

Single result for simple formulas, list for multiple estimations (e.g. csw0/sw/sw0 syntax).

Examples:

Two-way fixed effects with clustered SEs:

>>> from statspai.fixest import feols
>>> result = feols("wage ~ experience + tenure | firm + year",
...               data=df, vcov={"CRV1": "firm"})
>>> print(result.summary())

Multiple estimation:

>>> results = feols("Y ~ X1 | csw0(firm, year)", data=df)
>>> for r in results:
...     print(r.summary())

Use with outreg2:

>>> from statspai import outreg2
>>> r1 = feols("Y ~ X1", data=df)
>>> r2 = feols("Y ~ X1 | firm", data=df)
>>> outreg2(r1, r2, filename="table.xlsx")

fepois

fepois(fml: str, data: DataFrame, vcov: Optional[Union[str, Dict[str, str]]] = None, *, weights: Optional[str] = None, ssc: Optional[Any] = None, fixef_rm: str = 'none', collin_tol: float = 1e-06, iwls_tol: float = 1e-08, iwls_maxiter: int = 25, **kwargs: Any) -> Union[EconometricResults, List[EconometricResults]]

Estimate Poisson regression with high-dimensional fixed effects via pyfixest.

Parameters:

Name Type Description Default
fml str

pyfixest formula. E.g. "Y ~ X1 | firm".

required
data DataFrame

Input dataset.

required
vcov str or dict

Variance-covariance estimator.

None
weights str

Column name for regression weights.

None
ssc optional

Small-sample correction.

None
fixef_rm str

Singleton fixed effect handling.

"none"
collin_tol float

Collinearity tolerance.

1e-6
iwls_tol float

IWLS convergence tolerance.

1e-8
iwls_maxiter int

Max IWLS iterations.

25
**kwargs Any

Additional arguments passed to pyfixest.fepois().

{}

Returns:

Type Description
EconometricResults or list of EconometricResults

feglm

feglm(fml: str, data: DataFrame, family: str = 'gaussian', vcov: Optional[Union[str, Dict[str, str]]] = None, **kwargs: Any) -> Union[EconometricResults, List[EconometricResults]]

Estimate GLM (logit, probit, Gaussian) with high-dimensional fixed effects.

Parameters:

Name Type Description Default
fml str

pyfixest formula.

required
data DataFrame

Input dataset.

required
family str

GLM family: "gaussian", "logit", "probit".

"gaussian"
vcov str or dict

Variance-covariance estimator.

None
**kwargs Any

Additional arguments passed to pyfixest.feglm().

{}

Returns:

Type Description
EconometricResults or list of EconometricResults

etable

etable(*results: EconometricResults, **kwargs: Any) -> Any

Display a pyfixest-style regression table for StatsPAI results.

If the results carry a _pyfixest_fit reference, uses pyfixest's native etable. Otherwise falls back to a simple pandas summary.

Parameters:

Name Type Description Default
*results EconometricResults

One or more fitted results.

()
**kwargs Any

Passed to pyfixest.etable().

{}

Returns:

Type Description
str or DataFrame