panelbox 0.2.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- panelbox/__init__.py +67 -0
- panelbox/__version__.py +14 -0
- panelbox/cli/__init__.py +0 -0
- panelbox/cli/{commands}/__init__.py +0 -0
- panelbox/core/__init__.py +0 -0
- panelbox/core/base_model.py +164 -0
- panelbox/core/formula_parser.py +318 -0
- panelbox/core/panel_data.py +387 -0
- panelbox/core/results.py +366 -0
- panelbox/datasets/__init__.py +0 -0
- panelbox/datasets/{data}/__init__.py +0 -0
- panelbox/gmm/__init__.py +65 -0
- panelbox/gmm/difference_gmm.py +645 -0
- panelbox/gmm/estimator.py +562 -0
- panelbox/gmm/instruments.py +580 -0
- panelbox/gmm/results.py +550 -0
- panelbox/gmm/system_gmm.py +621 -0
- panelbox/gmm/tests.py +535 -0
- panelbox/models/__init__.py +11 -0
- panelbox/models/dynamic/__init__.py +0 -0
- panelbox/models/iv/__init__.py +0 -0
- panelbox/models/static/__init__.py +13 -0
- panelbox/models/static/fixed_effects.py +516 -0
- panelbox/models/static/pooled_ols.py +298 -0
- panelbox/models/static/random_effects.py +512 -0
- panelbox/report/__init__.py +61 -0
- panelbox/report/asset_manager.py +410 -0
- panelbox/report/css_manager.py +472 -0
- panelbox/report/exporters/__init__.py +15 -0
- panelbox/report/exporters/html_exporter.py +440 -0
- panelbox/report/exporters/latex_exporter.py +510 -0
- panelbox/report/exporters/markdown_exporter.py +446 -0
- panelbox/report/renderers/__init__.py +11 -0
- panelbox/report/renderers/static/__init__.py +0 -0
- panelbox/report/renderers/static_validation_renderer.py +341 -0
- panelbox/report/report_manager.py +502 -0
- panelbox/report/template_manager.py +337 -0
- panelbox/report/transformers/__init__.py +0 -0
- panelbox/report/transformers/static/__init__.py +0 -0
- panelbox/report/validation_transformer.py +449 -0
- panelbox/standard_errors/__init__.py +0 -0
- panelbox/templates/__init__.py +0 -0
- panelbox/templates/assets/css/base_styles.css +382 -0
- panelbox/templates/assets/css/report_components.css +747 -0
- panelbox/templates/assets/js/tab-navigation.js +161 -0
- panelbox/templates/assets/js/utils.js +276 -0
- panelbox/templates/common/footer.html +24 -0
- panelbox/templates/common/header.html +44 -0
- panelbox/templates/common/meta.html +5 -0
- panelbox/templates/validation/interactive/index.html +272 -0
- panelbox/templates/validation/interactive/partials/charts.html +58 -0
- panelbox/templates/validation/interactive/partials/methodology.html +201 -0
- panelbox/templates/validation/interactive/partials/overview.html +146 -0
- panelbox/templates/validation/interactive/partials/recommendations.html +101 -0
- panelbox/templates/validation/interactive/partials/test_results.html +231 -0
- panelbox/utils/__init__.py +0 -0
- panelbox/utils/formatting.py +172 -0
- panelbox/utils/matrix_ops.py +233 -0
- panelbox/utils/statistical.py +173 -0
- panelbox/validation/__init__.py +58 -0
- panelbox/validation/base.py +175 -0
- panelbox/validation/cointegration/__init__.py +0 -0
- panelbox/validation/cross_sectional_dependence/__init__.py +13 -0
- panelbox/validation/cross_sectional_dependence/breusch_pagan_lm.py +222 -0
- panelbox/validation/cross_sectional_dependence/frees.py +297 -0
- panelbox/validation/cross_sectional_dependence/pesaran_cd.py +188 -0
- panelbox/validation/heteroskedasticity/__init__.py +13 -0
- panelbox/validation/heteroskedasticity/breusch_pagan.py +222 -0
- panelbox/validation/heteroskedasticity/modified_wald.py +172 -0
- panelbox/validation/heteroskedasticity/white.py +208 -0
- panelbox/validation/instruments/__init__.py +0 -0
- panelbox/validation/robustness/__init__.py +0 -0
- panelbox/validation/serial_correlation/__init__.py +13 -0
- panelbox/validation/serial_correlation/baltagi_wu.py +220 -0
- panelbox/validation/serial_correlation/breusch_godfrey.py +260 -0
- panelbox/validation/serial_correlation/wooldridge_ar.py +200 -0
- panelbox/validation/specification/__init__.py +16 -0
- panelbox/validation/specification/chow.py +273 -0
- panelbox/validation/specification/hausman.py +264 -0
- panelbox/validation/specification/mundlak.py +331 -0
- panelbox/validation/specification/reset.py +273 -0
- panelbox/validation/unit_root/__init__.py +0 -0
- panelbox/validation/validation_report.py +257 -0
- panelbox/validation/validation_suite.py +401 -0
- panelbox-0.2.0.dist-info/METADATA +337 -0
- panelbox-0.2.0.dist-info/RECORD +90 -0
- panelbox-0.2.0.dist-info/WHEEL +5 -0
- panelbox-0.2.0.dist-info/entry_points.txt +2 -0
- panelbox-0.2.0.dist-info/licenses/LICENSE +21 -0
- panelbox-0.2.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: panelbox
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: Panel data econometrics in Python: Fixed Effects, Random Effects, GMM (Arellano-Bond, Blundell-Bond)
|
|
5
|
+
Author-email: Gustavo Haase <gustavo.haase@gmail.com>, Paulo Dourado <paulodourado.unb@gmail.com>
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/PanelBox-Econometrics-Model/panelbox
|
|
8
|
+
Project-URL: Documentation, https://github.com/PanelBox-Econometrics-Model/panelbox/tree/main/docs
|
|
9
|
+
Project-URL: Repository, https://github.com/PanelBox-Econometrics-Model/panelbox
|
|
10
|
+
Project-URL: Issues, https://github.com/PanelBox-Econometrics-Model/panelbox/issues
|
|
11
|
+
Project-URL: Changelog, https://github.com/PanelBox-Econometrics-Model/panelbox/blob/main/CHANGELOG.md
|
|
12
|
+
Keywords: econometrics,panel data,GMM,Arellano-Bond,Blundell-Bond,fixed effects,random effects,dynamic panel,instrumental variables
|
|
13
|
+
Classifier: Development Status :: 4 - Beta
|
|
14
|
+
Classifier: Intended Audience :: Science/Research
|
|
15
|
+
Classifier: Intended Audience :: Financial and Insurance Industry
|
|
16
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
17
|
+
Classifier: Operating System :: OS Independent
|
|
18
|
+
Classifier: Programming Language :: Python :: 3
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
23
|
+
Classifier: Topic :: Scientific/Engineering
|
|
24
|
+
Classifier: Topic :: Scientific/Engineering :: Mathematics
|
|
25
|
+
Classifier: Topic :: Office/Business :: Financial
|
|
26
|
+
Requires-Python: >=3.9
|
|
27
|
+
Description-Content-Type: text/markdown
|
|
28
|
+
License-File: LICENSE
|
|
29
|
+
Requires-Dist: numpy>=1.24.0
|
|
30
|
+
Requires-Dist: pandas>=2.0.0
|
|
31
|
+
Requires-Dist: scipy>=1.10.0
|
|
32
|
+
Requires-Dist: statsmodels>=0.14.0
|
|
33
|
+
Requires-Dist: patsy>=0.5.3
|
|
34
|
+
Provides-Extra: dev
|
|
35
|
+
Requires-Dist: pytest>=7.3.0; extra == "dev"
|
|
36
|
+
Requires-Dist: pytest-cov>=4.1.0; extra == "dev"
|
|
37
|
+
Requires-Dist: black>=23.3.0; extra == "dev"
|
|
38
|
+
Requires-Dist: flake8>=6.0.0; extra == "dev"
|
|
39
|
+
Requires-Dist: mypy>=1.3.0; extra == "dev"
|
|
40
|
+
Requires-Dist: isort>=5.12.0; extra == "dev"
|
|
41
|
+
Provides-Extra: docs
|
|
42
|
+
Requires-Dist: mkdocs>=1.4.0; extra == "docs"
|
|
43
|
+
Requires-Dist: mkdocs-material>=9.1.0; extra == "docs"
|
|
44
|
+
Requires-Dist: mkdocstrings>=0.22.0; extra == "docs"
|
|
45
|
+
Requires-Dist: mkdocstrings-python>=1.1.0; extra == "docs"
|
|
46
|
+
Provides-Extra: test
|
|
47
|
+
Requires-Dist: pytest>=7.3.0; extra == "test"
|
|
48
|
+
Requires-Dist: pytest-cov>=4.1.0; extra == "test"
|
|
49
|
+
Requires-Dist: hypothesis>=6.75.0; extra == "test"
|
|
50
|
+
Dynamic: license-file
|
|
51
|
+
|
|
52
|
+
# PanelBox
|
|
53
|
+
|
|
54
|
+
**Panel Data Econometrics in Python**
|
|
55
|
+
|
|
56
|
+
[](https://www.python.org/downloads/)
|
|
57
|
+
[](https://opensource.org/licenses/MIT)
|
|
58
|
+
[]()
|
|
59
|
+
|
|
60
|
+
PanelBox provides comprehensive tools for panel data econometrics, bringing Stata's `xtabond2` and R's `plm` capabilities to Python with modern, user-friendly APIs.
|
|
61
|
+
|
|
62
|
+
## Features
|
|
63
|
+
|
|
64
|
+
### ✅ Static Panel Models
|
|
65
|
+
- **Pooled OLS**: Standard OLS with panel data
|
|
66
|
+
- **Fixed Effects**: Control for time-invariant heterogeneity
|
|
67
|
+
- **Random Effects**: GLS estimation with random effects
|
|
68
|
+
- **Hausman Test**: Test for endogeneity of random effects
|
|
69
|
+
|
|
70
|
+
### ✅ Dynamic Panel GMM (v0.2.0)
|
|
71
|
+
- **Difference GMM**: Arellano-Bond (1991) estimator
|
|
72
|
+
- **System GMM**: Blundell-Bond (1998) estimator
|
|
73
|
+
- **Robust to unbalanced panels**: Smart instrument selection
|
|
74
|
+
- **Windmeijer correction**: Finite-sample standard error correction
|
|
75
|
+
- **Comprehensive diagnostics**:
|
|
76
|
+
- Hansen J-test for overidentification
|
|
77
|
+
- Sargan test
|
|
78
|
+
- Arellano-Bond AR tests
|
|
79
|
+
- Instrument ratio monitoring
|
|
80
|
+
|
|
81
|
+
### 🔧 Panel-Specific Features
|
|
82
|
+
- **Unbalanced panel support**: Handles missing observations gracefully
|
|
83
|
+
- **Time effects**: Time dummies, linear trends, or custom time controls
|
|
84
|
+
- **Clustered standard errors**: Robust inference
|
|
85
|
+
- **Instrument generation**: Automatic GMM-style and IV-style instruments
|
|
86
|
+
- **Collapse option**: Avoids instrument proliferation (Roodman 2009)
|
|
87
|
+
|
|
88
|
+
### 📊 Publication-Ready Output
|
|
89
|
+
- **Summary tables**: Professional regression output
|
|
90
|
+
- **Diagnostic tests**: Comprehensive specification testing
|
|
91
|
+
- **LaTeX export**: Ready for academic papers
|
|
92
|
+
- **Warnings system**: Guides users to correct specifications
|
|
93
|
+
|
|
94
|
+
## Installation
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
pip install panelbox
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Or install from source:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
git clone https://github.com/PanelBox-Econometrics-Model/panelbox.git
|
|
104
|
+
cd panelbox
|
|
105
|
+
pip install -e .
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Quick Start
|
|
109
|
+
|
|
110
|
+
### Static Panel Models
|
|
111
|
+
|
|
112
|
+
```python
|
|
113
|
+
import panelbox as pb
|
|
114
|
+
import pandas as pd
|
|
115
|
+
|
|
116
|
+
# Load your panel data
|
|
117
|
+
data = pd.read_csv('panel_data.csv')
|
|
118
|
+
|
|
119
|
+
# Fixed Effects model
|
|
120
|
+
fe = pb.FixedEffects(
|
|
121
|
+
formula="invest ~ value + capital",
|
|
122
|
+
data=data,
|
|
123
|
+
id_var="firm",
|
|
124
|
+
time_var="year"
|
|
125
|
+
)
|
|
126
|
+
results = fe.fit(cov_type='clustered')
|
|
127
|
+
print(results.summary())
|
|
128
|
+
|
|
129
|
+
# Hausman test
|
|
130
|
+
hausman = pb.HausmanTest(fe_results, re_results)
|
|
131
|
+
print(hausman)
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### Dynamic Panel GMM
|
|
135
|
+
|
|
136
|
+
```python
|
|
137
|
+
from panelbox import DifferenceGMM
|
|
138
|
+
|
|
139
|
+
# Arellano-Bond employment equation
|
|
140
|
+
gmm = DifferenceGMM(
|
|
141
|
+
data=data,
|
|
142
|
+
dep_var='employment',
|
|
143
|
+
lags=1,
|
|
144
|
+
id_var='firm',
|
|
145
|
+
time_var='year',
|
|
146
|
+
exog_vars=['wages', 'capital', 'output'],
|
|
147
|
+
time_dummies=False,
|
|
148
|
+
collapse=True,
|
|
149
|
+
two_step=True,
|
|
150
|
+
robust=True
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
results = gmm.fit()
|
|
154
|
+
print(results.summary())
|
|
155
|
+
|
|
156
|
+
# Check specification tests
|
|
157
|
+
print(f"Hansen J p-value: {results.hansen_j.pvalue:.3f}")
|
|
158
|
+
print(f"AR(2) p-value: {results.ar2_test.pvalue:.3f}")
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### System GMM (Blundell-Bond)
|
|
162
|
+
|
|
163
|
+
```python
|
|
164
|
+
from panelbox import SystemGMM
|
|
165
|
+
|
|
166
|
+
# System GMM for persistent series
|
|
167
|
+
sys_gmm = SystemGMM(
|
|
168
|
+
data=data,
|
|
169
|
+
dep_var='y',
|
|
170
|
+
lags=1,
|
|
171
|
+
id_var='id',
|
|
172
|
+
time_var='year',
|
|
173
|
+
exog_vars=['x1', 'x2'],
|
|
174
|
+
collapse=True,
|
|
175
|
+
two_step=True,
|
|
176
|
+
robust=True
|
|
177
|
+
)
|
|
178
|
+
|
|
179
|
+
results = sys_gmm.fit()
|
|
180
|
+
print(results.summary())
|
|
181
|
+
|
|
182
|
+
# Compare efficiency with Difference GMM
|
|
183
|
+
print(f"Instrument count: {results.n_instruments}")
|
|
184
|
+
print(f"Instrument ratio: {results.instrument_ratio:.3f}")
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
## Key Advantages
|
|
188
|
+
|
|
189
|
+
### 1. Handles Unbalanced Panels Gracefully
|
|
190
|
+
|
|
191
|
+
Unlike some implementations, PanelBox:
|
|
192
|
+
- ✅ Automatically detects unbalanced panel structure
|
|
193
|
+
- ✅ Warns about problematic specifications
|
|
194
|
+
- ✅ Intelligently selects instruments based on data availability
|
|
195
|
+
- ✅ Provides clear guidance when specifications fail
|
|
196
|
+
|
|
197
|
+
```python
|
|
198
|
+
# Smart warnings for unbalanced panels
|
|
199
|
+
gmm = DifferenceGMM(data=unbalanced_data, ...)
|
|
200
|
+
# UserWarning: Unbalanced panel detected (20% balanced) with 8 time dummies.
|
|
201
|
+
# This may result in very few observations being retained.
|
|
202
|
+
#
|
|
203
|
+
# Recommendations:
|
|
204
|
+
# 1. Set time_dummies=False and add a linear trend
|
|
205
|
+
# 2. Use only subset of key time dummies
|
|
206
|
+
# 3. Ensure collapse=True
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### 2. Comprehensive Specification Tests
|
|
210
|
+
|
|
211
|
+
All GMM models include:
|
|
212
|
+
- **Hansen J-test**: Overidentification test with interpretation
|
|
213
|
+
- **Sargan test**: Alternative overidentification test
|
|
214
|
+
- **AR(1) and AR(2) tests**: Serial correlation in first-differenced errors
|
|
215
|
+
- **Instrument ratio**: n_instruments / n_groups (should be < 1.0)
|
|
216
|
+
|
|
217
|
+
### 3. Follows Best Practices
|
|
218
|
+
|
|
219
|
+
Based on Roodman (2009) "How to do xtabond2":
|
|
220
|
+
- Collapse option to avoid instrument proliferation
|
|
221
|
+
- Windmeijer (2005) standard error correction
|
|
222
|
+
- Automatic lag selection based on data availability
|
|
223
|
+
- Clear warnings for problematic specifications
|
|
224
|
+
|
|
225
|
+
### 4. Rich Documentation
|
|
226
|
+
|
|
227
|
+
- 📚 Comprehensive [tutorial](https://github.com/PanelBox-Econometrics-Model/panelbox/tree/main/docs/gmm/tutorial.md)
|
|
228
|
+
- 📖 [Interpretation guide](https://github.com/PanelBox-Econometrics-Model/panelbox/tree/main/docs/gmm/interpretation_guide.md) with decision tables
|
|
229
|
+
- 💡 [Example scripts](https://github.com/PanelBox-Econometrics-Model/panelbox/tree/main/examples/gmm/) for common use cases
|
|
230
|
+
- 🔬 [Unbalanced panel guide](https://github.com/PanelBox-Econometrics-Model/panelbox/tree/main/examples/gmm/unbalanced_panel_guide.py)
|
|
231
|
+
|
|
232
|
+
## Examples
|
|
233
|
+
|
|
234
|
+
See the [examples directory](https://github.com/PanelBox-Econometrics-Model/panelbox/tree/main/examples) for:
|
|
235
|
+
|
|
236
|
+
- **OLS vs FE vs GMM comparison**: Demonstrating bias in each estimator
|
|
237
|
+
- **Firm growth model**: Intermediate example with error handling
|
|
238
|
+
- **Production function estimation**: Advanced example with simultaneity bias
|
|
239
|
+
- **Unbalanced panel guide**: Practical solutions for unbalanced data
|
|
240
|
+
|
|
241
|
+
## Comparison with Other Packages
|
|
242
|
+
|
|
243
|
+
| Feature | PanelBox | linearmodels | pyfixest | statsmodels |
|
|
244
|
+
|---------|----------|--------------|----------|-------------|
|
|
245
|
+
| Difference GMM | ✅ | ❌ | ❌ | ❌ |
|
|
246
|
+
| System GMM | ✅ | ❌ | ❌ | ❌ |
|
|
247
|
+
| Unbalanced panels | ✅ Smart | ⚠️ Basic | ⚠️ Basic | ⚠️ Basic |
|
|
248
|
+
| Collapse option | ✅ | ❌ | ❌ | ❌ |
|
|
249
|
+
| Windmeijer correction | ✅ | ❌ | ❌ | ❌ |
|
|
250
|
+
| User warnings | ✅ Proactive | ⚠️ Reactive | ⚠️ Reactive | ⚠️ Reactive |
|
|
251
|
+
| Documentation | ✅ Rich | ✅ Good | ✅ Good | ✅ Good |
|
|
252
|
+
|
|
253
|
+
## Requirements
|
|
254
|
+
|
|
255
|
+
- Python >= 3.9
|
|
256
|
+
- NumPy >= 1.24.0
|
|
257
|
+
- Pandas >= 2.0.0
|
|
258
|
+
- SciPy >= 1.10.0
|
|
259
|
+
- statsmodels >= 0.14.0
|
|
260
|
+
- patsy >= 0.5.3
|
|
261
|
+
|
|
262
|
+
## Validation
|
|
263
|
+
|
|
264
|
+
PanelBox has been validated against:
|
|
265
|
+
- ✅ Arellano-Bond (1991) employment equation
|
|
266
|
+
- ✅ Stata xtabond2 (with appropriate specifications)
|
|
267
|
+
- ✅ Multiple synthetic datasets with known DGP
|
|
268
|
+
|
|
269
|
+
See [validation directory](https://github.com/PanelBox-Econometrics-Model/panelbox/tree/main/validation) for details.
|
|
270
|
+
|
|
271
|
+
## Citation
|
|
272
|
+
|
|
273
|
+
If you use PanelBox in your research, please cite:
|
|
274
|
+
|
|
275
|
+
```bibtex
|
|
276
|
+
@software{panelbox2026,
|
|
277
|
+
author = {Haase, Gustavo and Dourado, Paulo},
|
|
278
|
+
title = {PanelBox: Panel Data Econometrics in Python},
|
|
279
|
+
year = {2026},
|
|
280
|
+
version = {0.2.0},
|
|
281
|
+
url = {https://github.com/PanelBox-Econometrics-Model/panelbox}
|
|
282
|
+
}
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
## References
|
|
286
|
+
|
|
287
|
+
### Implemented Methods
|
|
288
|
+
|
|
289
|
+
- **Arellano, M., & Bond, S. (1991)**. "Some Tests of Specification for Panel Data: Monte Carlo Evidence and an Application to Employment Equations." *Review of Economic Studies*, 58(2), 277-297.
|
|
290
|
+
|
|
291
|
+
- **Blundell, R., & Bond, S. (1998)**. "Initial Conditions and Moment Restrictions in Dynamic Panel Data Models." *Journal of Econometrics*, 87(1), 115-143.
|
|
292
|
+
|
|
293
|
+
- **Windmeijer, F. (2005)**. "A Finite Sample Correction for the Variance of Linear Efficient Two-step GMM Estimators." *Journal of Econometrics*, 126(1), 25-51.
|
|
294
|
+
|
|
295
|
+
- **Roodman, D. (2009)**. "How to do xtabond2: An Introduction to Difference and System GMM in Stata." *Stata Journal*, 9(1), 86-136.
|
|
296
|
+
|
|
297
|
+
### Textbooks
|
|
298
|
+
|
|
299
|
+
- **Baltagi, B. H. (2021)**. *Econometric Analysis of Panel Data* (6th ed.). Springer.
|
|
300
|
+
- **Wooldridge, J. M. (2010)**. *Econometric Analysis of Cross Section and Panel Data* (2nd ed.). MIT Press.
|
|
301
|
+
|
|
302
|
+
## Contributing
|
|
303
|
+
|
|
304
|
+
Contributions are welcome! Please see [CONTRIBUTING.md](https://github.com/PanelBox-Econometrics-Model/panelbox/blob/main/CONTRIBUTING.md) for guidelines.
|
|
305
|
+
|
|
306
|
+
## License
|
|
307
|
+
|
|
308
|
+
This project is licensed under the MIT License - see the [LICENSE](https://github.com/PanelBox-Econometrics-Model/panelbox/blob/main/LICENSE) file for details.
|
|
309
|
+
|
|
310
|
+
## Support
|
|
311
|
+
|
|
312
|
+
- 📫 Issues: [GitHub Issues](https://github.com/PanelBox-Econometrics-Model/panelbox/issues)
|
|
313
|
+
- 📖 Documentation: [GitHub Wiki](https://github.com/PanelBox-Econometrics-Model/panelbox/tree/main/docs)
|
|
314
|
+
- 💬 Discussions: [GitHub Discussions](https://github.com/PanelBox-Econometrics-Model/panelbox/discussions)
|
|
315
|
+
|
|
316
|
+
## Changelog
|
|
317
|
+
|
|
318
|
+
See [CHANGELOG.md](https://github.com/PanelBox-Econometrics-Model/panelbox/blob/main/CHANGELOG.md) for version history.
|
|
319
|
+
|
|
320
|
+
### Latest Release: v0.2.0 (2026-01-21)
|
|
321
|
+
|
|
322
|
+
**Major Features:**
|
|
323
|
+
- ✨ Difference GMM (Arellano-Bond 1991)
|
|
324
|
+
- ✨ System GMM (Blundell-Bond 1998)
|
|
325
|
+
- ✨ Smart instrument selection for unbalanced panels
|
|
326
|
+
- ✨ Comprehensive warning system
|
|
327
|
+
- ✨ Rich documentation and examples
|
|
328
|
+
|
|
329
|
+
**Improvements:**
|
|
330
|
+
- 🔧 Robust to unbalanced panels (72% retention vs 0% before)
|
|
331
|
+
- 🔧 Windmeijer standard error correction
|
|
332
|
+
- 🔧 Automatic weak instrument filtering
|
|
333
|
+
- 📚 Tutorial, interpretation guide, and examples
|
|
334
|
+
|
|
335
|
+
---
|
|
336
|
+
|
|
337
|
+
**Made with ❤️ for econometricians and researchers**
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
panelbox/__init__.py,sha256=DnxhJY1nMBHbkgLXfKVyvGYUUA6X9RPVQdFTAgfXCjs,1755
|
|
2
|
+
panelbox/__version__.py,sha256=HNihsYssjjA8jxV-47WM94WWeFyag4ayn54E_cQbSmY,536
|
|
3
|
+
panelbox/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
+
panelbox/cli/{commands}/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
|
+
panelbox/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
+
panelbox/core/base_model.py,sha256=PEtIs8kFF62EtMEpBjDqKF9eZc8sGdX3tnAcxGG9P_w,4373
|
|
7
|
+
panelbox/core/formula_parser.py,sha256=FijORo-LzPlMTdyllnn5h0jxyn-Q5EXYPIojVCimHNI,9726
|
|
8
|
+
panelbox/core/panel_data.py,sha256=JNglPJVbutqGpM_vY3brf845ausUGPKV--8Jn8n3tjs,12615
|
|
9
|
+
panelbox/core/results.py,sha256=oiEYly537kg0LZZGDGrbnnZPp3tHdUlwPwsnzEb-Szs,11635
|
|
10
|
+
panelbox/datasets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
11
|
+
panelbox/datasets/{data}/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
12
|
+
panelbox/gmm/__init__.py,sha256=ZJlPPmdWSJ0jWYQGMEhLT8F4NiNAWPEANoTlCDhnf3A,1922
|
|
13
|
+
panelbox/gmm/difference_gmm.py,sha256=J3tvFKDEKoVkrWSMNyjzNjAfib_VYzeJp5BJozRmxQE,22586
|
|
14
|
+
panelbox/gmm/estimator.py,sha256=GB9osG0eTDHhA0t25Al1BjxMV4qIxyxNzG6QKj-Obpk,18189
|
|
15
|
+
panelbox/gmm/instruments.py,sha256=2MJ1oeqSS8xiy6xylwNyiyEn2ogqumS0hUiUtjPnZuc,19517
|
|
16
|
+
panelbox/gmm/results.py,sha256=K6O7rBoAYuRQ1bRT8F-zsY8NdxAPa7rTsbfIegVvrN0,17078
|
|
17
|
+
panelbox/gmm/system_gmm.py,sha256=iIciuYvJ0O-Yg3tIXH2OOtRk4Jc8nhH30zNprjR4Kew,21422
|
|
18
|
+
panelbox/gmm/tests.py,sha256=aQz6t-NeuCRhLjnhxboG7MaKmdhyU8GLmAPWlz2TZrM,17487
|
|
19
|
+
panelbox/models/__init__.py,sha256=q0OtlD_E3_yvAm7kRvjySoBulU2VfeHl1xp--8f3e9k,196
|
|
20
|
+
panelbox/models/dynamic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
21
|
+
panelbox/models/iv/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
22
|
+
panelbox/models/static/__init__.py,sha256=_noJ6KKS3hH4vgIWxJ8a4NDMV8dmbZb-zgAlf0BO-jY,285
|
|
23
|
+
panelbox/models/static/fixed_effects.py,sha256=qxoj1Xk34T3wuKccnZ6of6pCzqihytSeR5KiuuQdvtc,16010
|
|
24
|
+
panelbox/models/static/pooled_ols.py,sha256=h4Zih1YSyK53ZR10ZE2n0J15eT-Fy93IdX_tutYkgco,8271
|
|
25
|
+
panelbox/models/static/random_effects.py,sha256=fku3IGkyD-mITA6XvuHMz1aUdIQn-nWVQmumZitZEnQ,15953
|
|
26
|
+
panelbox/report/__init__.py,sha256=SgnfsuK8dXylf4mg8Oq5syquWNqwMURXdcAXXCXuqjg,1494
|
|
27
|
+
panelbox/report/asset_manager.py,sha256=aRpsN4M0iKLYvn_HQn88Vn952tyHX3m3Upq0-I4k3JU,10982
|
|
28
|
+
panelbox/report/css_manager.py,sha256=Z_5UsPsvA0vOZx5Iw32yUI7gecjPj5ljeBxIScnyWeY,12790
|
|
29
|
+
panelbox/report/report_manager.py,sha256=_8lYQq2aQZamFFk749zjT2IrznFj6hYdnjJEQS4NkJw,13776
|
|
30
|
+
panelbox/report/template_manager.py,sha256=Dr3NLkSprtqt2--1-rgQCX4EUEZ8xuZz-rMOBxYm4CQ,9671
|
|
31
|
+
panelbox/report/validation_transformer.py,sha256=5yWNzt5UQqierAsePEFOtcgnblEGPRgS9hrvr47QyuU,14179
|
|
32
|
+
panelbox/report/exporters/__init__.py,sha256=xV9qLeEbe9I7-uGiMzMoC4DfRqHk0EvT_o6l3s_Dfuc,305
|
|
33
|
+
panelbox/report/exporters/html_exporter.py,sha256=Kq-EQb4BOCw2xRnf9p9TBAyhg_CdIsnzDTl5f_E9pKE,11277
|
|
34
|
+
panelbox/report/exporters/latex_exporter.py,sha256=AC62K00H0WIyxm5hFKaSO_MaCLw4LuSt7tzkh2Rlf0E,15188
|
|
35
|
+
panelbox/report/exporters/markdown_exporter.py,sha256=8NgjnGlLIUSkxjRejJLS4Apb2wNzVHOJbfxmKsu0HGw,13601
|
|
36
|
+
panelbox/report/renderers/__init__.py,sha256=C9lcAm6s3bnpyE1CpVDRRCYV4zj9G3usZdZdP-M6U5s,210
|
|
37
|
+
panelbox/report/renderers/static_validation_renderer.py,sha256=0ejhF7lxxX-lJcqTadoHHxoCyxIQEzgPvXCcT_7OlDQ,9920
|
|
38
|
+
panelbox/report/renderers/static/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
39
|
+
panelbox/report/transformers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
40
|
+
panelbox/report/transformers/static/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
41
|
+
panelbox/standard_errors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
42
|
+
panelbox/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
43
|
+
panelbox/templates/assets/css/base_styles.css,sha256=1N7-35-lHUcdjX0KosO43tOrZ-3oCG6OY4cEx0_gqCQ,12014
|
|
44
|
+
panelbox/templates/assets/css/report_components.css,sha256=DoAHoFDbOxp_dUB3_k4g3geI-jqDwIL1wqaIENFm9vI,15064
|
|
45
|
+
panelbox/templates/assets/js/tab-navigation.js,sha256=5_1dOoReMz8dl83DDainHSGaWNKNL5MbA4HhNynRqU0,5250
|
|
46
|
+
panelbox/templates/assets/js/utils.js,sha256=UnY0fiUDdgXFoi1j5RZHz0o9kpTa1tjjWtdSb1OZxbU,8377
|
|
47
|
+
panelbox/templates/common/footer.html,sha256=Iuwkqdu5vvs0sV_ARD_JQatBmvedlvWQe1d2U3Z2LCg,878
|
|
48
|
+
panelbox/templates/common/header.html,sha256=CIdHU_u6f8JOn_G7dVqPitLxFG2DrTK8yGt94jpR6oE,1358
|
|
49
|
+
panelbox/templates/common/meta.html,sha256=OpGDomevQCXqelxBo8menYnTFZif0G9wBu5kNNQhafE,367
|
|
50
|
+
panelbox/templates/validation/interactive/index.html,sha256=Y2cnehlM0-zhoOydFUY0-ASHKKQpCmyECF4ZiNaGPu8,10324
|
|
51
|
+
panelbox/templates/validation/interactive/partials/charts.html,sha256=-ozbG84oBMeffYzM8Vu0CqHevy8k6tYUal8As98E0Ak,2558
|
|
52
|
+
panelbox/templates/validation/interactive/partials/methodology.html,sha256=egGCyRvPyAp91hZ0Ja5HH53jjpWgZiLam5za2ST7XT8,9509
|
|
53
|
+
panelbox/templates/validation/interactive/partials/overview.html,sha256=_VUA-xmJQQ7ZV2a_g8Lo3r3DMSdq1II2B9lLaQVMFVM,6298
|
|
54
|
+
panelbox/templates/validation/interactive/partials/recommendations.html,sha256=yhXVifggXmkGiQG_ntrRdR8J1-sSAu65JXjbp9a9aTc,4215
|
|
55
|
+
panelbox/templates/validation/interactive/partials/test_results.html,sha256=rg_YHrP25Vi1vWwc_dpCCPKKdpVRxukhz_g5wPTry34,9335
|
|
56
|
+
panelbox/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
57
|
+
panelbox/utils/formatting.py,sha256=kiw7NetocRsEVd5wA9cAf-SeQtAgeUWj_uguH-NmBrE,3531
|
|
58
|
+
panelbox/utils/matrix_ops.py,sha256=GtzpFG4lcM7Q0NMZjeeLqszpYEitYE5kDKACIJtj7HM,5397
|
|
59
|
+
panelbox/utils/statistical.py,sha256=pWmg6vW5jjU9IsftEwgLA1Rs_2srcW9Z9pEaAh7oJZU,3727
|
|
60
|
+
panelbox/validation/__init__.py,sha256=pE5kpR2_FcV1SoT0thzDkO5I76tRdXT9o_TR4Vlihx8,1930
|
|
61
|
+
panelbox/validation/base.py,sha256=EbS2Gl1NOXz_76Y1GG47uR6sLVThrbUoI70AEPt0YCo,4972
|
|
62
|
+
panelbox/validation/validation_report.py,sha256=p0NpdbjuW--1lHBwmD4wMTkVwpSABfFWDGB3SdbcKPc,8910
|
|
63
|
+
panelbox/validation/validation_suite.py,sha256=cLy6zB_MU2G1HJWazBtz6ghgwEqpJAhGrMrWM3K4wPE,13246
|
|
64
|
+
panelbox/validation/cointegration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
65
|
+
panelbox/validation/cross_sectional_dependence/__init__.py,sha256=fc8esCbbYnRp4lAwfr28TwxcH0xZKYNT1ulgwk8osbI,393
|
|
66
|
+
panelbox/validation/cross_sectional_dependence/breusch_pagan_lm.py,sha256=F4TBPYKRdLYyf493PPl4QV6rpadLV6Ij_yw73M9DQj0,7269
|
|
67
|
+
panelbox/validation/cross_sectional_dependence/frees.py,sha256=HHV8IR2RD9xU9Uv8KJpsnTslcXIq4OEeRuLmmsia0ek,9784
|
|
68
|
+
panelbox/validation/cross_sectional_dependence/pesaran_cd.py,sha256=ebnfu23xOH_yZkzMz-zhDOtAYeT8_PBVo4qRDPUVIQM,6148
|
|
69
|
+
panelbox/validation/heteroskedasticity/__init__.py,sha256=Q7lgtHv0djZIIoMUrSRmSl0mKZSBlt36mDGqMPX2VpI,363
|
|
70
|
+
panelbox/validation/heteroskedasticity/breusch_pagan.py,sha256=ND_rx1R4wwLrf1UeSLecWrPT4EgIWNqgiULatEAfEQ4,6936
|
|
71
|
+
panelbox/validation/heteroskedasticity/modified_wald.py,sha256=f7e7Cnc5um2gdWjLEtVESK-hdPtJuSn-typGVONB34Y,5606
|
|
72
|
+
panelbox/validation/heteroskedasticity/white.py,sha256=Er0L1dHF5528xMdwlgFZLQKxkG4faEjYIc8XmZdFCeM,6552
|
|
73
|
+
panelbox/validation/instruments/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
74
|
+
panelbox/validation/robustness/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
75
|
+
panelbox/validation/serial_correlation/__init__.py,sha256=oaVRtyoT4nNofqXIA0GiKX5kOx0qvCQy88dGDYwf48A,382
|
|
76
|
+
panelbox/validation/serial_correlation/baltagi_wu.py,sha256=v7A6f-d-mjcjs3Ujp8bq16Uc0jny7gAZFHJR6uUquq4,7106
|
|
77
|
+
panelbox/validation/serial_correlation/breusch_godfrey.py,sha256=_Itryc8pJT9q246gY4xvTmbB6rRlnr8z7vS8LRc4bwI,8851
|
|
78
|
+
panelbox/validation/serial_correlation/wooldridge_ar.py,sha256=HE9Aq1cORySyxVDMjAmEXnMnRkCwjODa3i7zwz17rcQ,6647
|
|
79
|
+
panelbox/validation/specification/__init__.py,sha256=dMm60eqzKBJwTfaWrDRFNsDP_v7F9XKTccnSVh-hVZI,431
|
|
80
|
+
panelbox/validation/specification/chow.py,sha256=dDjC7QzoPEY34P02M5z0xl-m9luFXhJMcrLtSlvA7jo,9095
|
|
81
|
+
panelbox/validation/specification/hausman.py,sha256=-sj5QPjaiHzL2MKwNAuArj4oRIugKpSD1tz3WTvSw-4,8241
|
|
82
|
+
panelbox/validation/specification/mundlak.py,sha256=mYbmbVTPjB3VdSyc5bAA286qq7rrZo4Utww4QI9gIjU,11305
|
|
83
|
+
panelbox/validation/specification/reset.py,sha256=lT5hyMrc7wYggoWiptERQoKSyqoekqO5ZSInRe5nRmw,8718
|
|
84
|
+
panelbox/validation/unit_root/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
85
|
+
panelbox-0.2.0.dist-info/licenses/LICENSE,sha256=8RMM6HTZa0iQnLVf_E_M7oRnrMJ6cFF5G0yaRJ4OALA,1085
|
|
86
|
+
panelbox-0.2.0.dist-info/METADATA,sha256=2lOV_z1PXF5C7a8E72uDBxgbE08KY9ljbuMerLnBKlE,11854
|
|
87
|
+
panelbox-0.2.0.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92
|
|
88
|
+
panelbox-0.2.0.dist-info/entry_points.txt,sha256=rC5en7wxrwHeY_Adnb7hkjPdOKLSEz9alxFgzCZQIhY,52
|
|
89
|
+
panelbox-0.2.0.dist-info/top_level.txt,sha256=prj4h9i7Hb-Hsb9UKAg5-RhRH0Q3wfzo3v7K4Xso6jo,9
|
|
90
|
+
panelbox-0.2.0.dist-info/RECORD,,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Gustavo Haase, Paulo Dourado
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
panelbox
|