Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
96 changes: 96 additions & 0 deletions docs/numfocus_application.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
# NumFocus Affiliation Application

1. Does your project have a contributor Code of Conduct?This question is required.*

Yes, we have a code of conduct.

2. What is the name of your project? This question is required.*

PyFixest.

3. Please provide the url of your project's (primary) repo:This question is required.*

https://github.com/py-econometrics/pyfixest

4. Your project's website:

https://py-econometrics.github.io/pyfixest/pyfixest.html

5. Please provide a summary description of your project in a few sentences:This question is required.*

PyFixest is a Python package for fast, high-dimensional fixed-effects regression. It mirrors the syntax and functionality of the popular R package fixest, while integrating tightly with the scientific Python stack (NumPy, SciPy, Narwhals, Formulaic, Great-Tables). PyFixest supports OLS, IV, Poisson, GLMs, quantile regression, cluster-robust variance estimation, wild-cluster bootstrap, difference-in-differences estimators, and more.

6. Does your project have a logo? This question is required.*

Yes.

7. Please upload a .svg file of your project's logo.This question is required.*.

upload.

8. Your project's Twitter handle or other social media handles/urls:

None.

9. Why do you want your project to join NumFOCUS?This question is required.*

We would like to join NumFocus because we believe that we will benefit from being part of the NumFocus network for it's experience in professionalising and maintaining scientific open source software. Additionally, we regularly work with university students with an interest in open source and econometrics and would like to offer them to participate in google summer of code.

10. Are you applying for Fiscal Sponsorship or Affiliation?This question is required.*

We apply for affiliation.

11. How does your project relate to or integrate with the existing ecosystem of NumFOCUS tools?This question is required.*

We heavily rely on the core scientific Python ecosystem: pandas for handling of data frames, numpy, scipy and numba for (array) computation, matplotlib for visualition. Of all projects affiliated with NumFocus, PyFixest is closest in spirit to statsmodels, with a stronger emphasis on performance and a focus on modern regression tools for applied econometric research.

12. Describe how your project furthers the NumFOCUS mission:This question is required.*

PyFixest advances the NumFOCUS mission by providing a free, high-performance alternative to the proprietary econometric software that still dominates economics and social science research. Its seamless integration with the scientific Python ecosystem enables large-scale, modern econometric analysis using open, community-driven tools. PyFixest also empowers educators to teach end-to-end econometric workflows entirely in Python, fostering transparency, accessibility, and reproducibility in both research and teaching.

The econometric methods implemented in PyFixest are widely used not only in academic research but also across industry and tech companies, where the package has already seen promising adoption. In addition, we actively engage students and new contributors through mentorship, pair-programming sessions, and well-curated starter issues (we have been supporting around 10 new contributors in the past 18 months) and building a diverse and sustainable open-source community.

We are currently branching out PyFixest regression table functionality into a standalone package to allow it to support creating tables from other scientific Python package, as eg. statsmodels, linearmodels, lifelines, and others.

13. Please list your project's maintainers (i.e., anyone with write access to the repository). This question is required.*

Alexander Fischer (@s3alfisc), Trivago, August 2025

14. Does your project have any significant contributors who are not maintainers? This question is required.*

- Apoorva Lal (@apoorvalal), Amazon, August 2025
- Juan Orduz (@juanitorduz), Delivery Hero & PyMC Labs, [Jan 2025](https://github.com/py-econometrics/pyfixest/pull/773)
- Dirk Sliwka (@dsliwka), University of Cologne, August 2025
- Kristof Schröder (@schroedk), AppliedAI Institute, August 2025

15. What is your project doing to attract and/or mentor new contributors and maintainers?This question is required.*

We regularly talk about PyFixest at Python conferences (PyData Berlin 2024, Euroscipy 2024, PyData DE 2025) and openly invite new contributions. We actively maintain a "how to get started" guide and regularly organize pair-programming sessions in which we introduced interested new contributors to the code base (around 10). On top, we label good first issues on an ongoing basis and have set up a community-discord, in which we talk about PyFixest development.

16. Where do you host conversations about project development and governance (e.g. mailing lists, forums, etc.), and how many participants do you have?

Development discussion happens primarily via our open Discord server (linked from the GitHub repo). Contributors, maintainers, and interested community members regularly participate.

17. What license(s) does your project currently use?This question is required.*

PyFixest is licensed under MIT.

18. Projects must adopt the NumFOCUS Code of Conduct or one similar in spirit. Please tell us how you plan to meet this requirement:This question is required.*

We follow the code of conduct applied by the NumFocus affiliated project optimagic.

19. Please provide a link to your Code of Conduct:

You can find it here: https://github.com/py-econometrics/pyfixest?tab=coc-ov-file#code-of-conduct

20. Your Name (First & Last):This question is required.*

Alexander Fischer

21. Your Email:This question is required.*

tba

22. Questions or Comments:

tba
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
{
"test_id": "feglm_00001",
"formula": "Y ~ X1",
"test_group": "feglm",
"hash": "098282eb40292ac5d9a67bed7e8a452a",
"r_coefs": [
0.077839485661,
-0.2278002623
],
"r_n_coefs": 2,
"r_nobs": 98,
"r_predict_link": [
-0.14996077664,
0.077839485661,
-0.37776103895,
-0.14996077664,
-0.14996077664
],
"r_predict_response": [
0.44039778048,
0.53102213165,
0.35280405957,
0.44039778048,
0.44039778048
],
"r_predict_new_link": [
-0.14996077664,
"NA",
-0.14996077664,
0.077839485661,
-0.37776103895
],
"r_predict_new_response": [
0.44039778048,
"NA",
0.44039778048,
0.53102213165,
0.35280405957
],
"r_irls_weights": [
0.63143560764,
0.63521943761,
0.60433186751,
0.63143560764,
0.63143560764
],
"r_resid_working": [
-1.1163960968,
-1.3351136807,
-0.94975399029,
-1.1163960968,
1.4185760267
],
"r_resid_deviance": [
-1.0775240786,
-1.2306093618,
-0.93285174146,
-1.0775240786,
1.2806849058
],
"r_resid_response": [
-0.44039778048,
-0.53102213165,
-0.35280405957,
-0.44039778048,
0.55960221952
],
"r_deviance": 132.087365883,
"inference": "iid",
"weights": {},
"dropna": false,
"family": "probit",
"success": true
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"test_id": "feglm_00001",
"error": "Python data generation failed: model needs to be 'Feols' or 'Fepois'.",
"hash": "c5b463a739e81e4c71fc52d63f71daf7",
"success": false
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"test_id": "feglm_00002",
"error": "Python data generation failed: model needs to be 'Feols' or 'Fepois'.",
"hash": "a5c9b2d60bbc403b1b667c21dc784f4b",
"success": false
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
{
"test_id": "feglm_00002",
"formula": "Y ~ X1",
"test_group": "feglm",
"hash": "ccc2aebccb18ef963a925da69f924473",
"r_coefs": [
0.12469933279,
-0.36543239534
],
"r_n_coefs": 2,
"r_nobs": 98,
"r_predict_link": [
-0.24073306254,
0.12469933279,
-0.60616545788,
-0.24073306254,
-0.24073306254
],
"r_predict_response": [
0.44010570691,
0.53113449873,
0.35293440424,
0.44010570691,
0.44010570691
],
"r_predict_new_link": [
-0.24073306254,
"NA",
-0.24073306254,
0.12469933279,
-0.60616545788
],
"r_predict_new_response": [
0.44010570691,
"NA",
0.44010570691,
0.53113449873,
0.35293440424
],
"r_irls_weights": [
0.246412679,
0.24903064391,
0.22837173888,
0.246412679,
0.246412679
],
"r_resid_working": [
-1.7860513862,
-2.1328077958,
-1.5454381789,
-1.7860513862,
2.2721813478
],
"r_resid_deviance": [
-1.0770397165,
-1.23080407,
-0.93306763435,
-1.0770397165,
1.2812028239
],
"r_resid_response": [
-0.44010570691,
-0.53113449873,
-0.35293440424,
-0.44010570691,
0.55989429309
],
"r_deviance": 132.0877494718,
"inference": "iid",
"weights": {},
"dropna": false,
"family": "logit",
"success": true
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"test_id": "feglm_00003",
"error": "Python data generation failed: model needs to be 'Feols' or 'Fepois'.",
"hash": "9ed6ecdf4aba85f1e34abf10dd9d825c",
"success": false
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
{
"test_id": "feglm_00003",
"formula": "Y ~ X1",
"test_group": "feglm",
"hash": "a9c47bf827cb6e10f69768c1afd71f4a",
"r_coefs": [
0.53057993956,
-0.089077565117
],
"r_n_coefs": 2,
"r_nobs": 98,
"r_predict_link": [
0.44150237444,
0.53057993956,
0.35242480933,
0.44150237444,
0.44150237444
],
"r_predict_response": [
0.44150237444,
0.53057993956,
0.35242480933,
0.44150237444,
0.44150237444
],
"r_predict_new_link": [
0.44150237444,
"NA",
0.44150237444,
0.53057993956,
0.35242480933
],
"r_predict_new_response": [
0.44150237444,
"NA",
0.44150237444,
0.53057993956,
0.35242480933
],
"r_irls_weights": [
1,
1,
1,
1,
1
],
"r_resid_working": [
-0.44150237444,
-0.53057993956,
-0.35242480933,
-0.44150237444,
0.55849762556
],
"r_resid_deviance": [
-0.44150237444,
-0.53057993956,
-0.35242480933,
-0.44150237444,
0.55849762556
],
"r_resid_response": [
-0.44150237444,
-0.53057993956,
-0.35242480933,
-0.44150237444,
0.55849762556
],
"r_deviance": 23.5700100734,
"inference": "iid",
"weights": {},
"dropna": false,
"family": "gaussian",
"success": true
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"test_id": "feglm_00004",
"error": "Python data generation failed: model needs to be 'Feols' or 'Fepois'.",
"hash": "31486bd4a6a93743cfd5c7b1c1e2702a",
"success": false
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
{
"test_id": "feglm_00004",
"formula": "Y ~ X1",
"test_group": "feglm",
"hash": "99242608a1cb709a6dd8c28eb0723065",
"r_coefs": [
0.077839485661,
-0.2278002623
],
"r_n_coefs": 2,
"r_nobs": 98,
"r_predict_link": {},
"r_predict_response": {},
"r_predict_new_link": {},
"r_predict_new_response": {},
"r_irls_weights": {},
"r_resid_working": {},
"r_resid_deviance": {},
"r_resid_response": {},
"r_deviance": {},
"inference": "hetero",
"weights": {},
"dropna": false,
"family": "probit",
"success": true
}
Loading
Loading