panelbox 0.2.0__tar.gz → 0.4.0__tar.gz
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-0.4.0/.gitignore +208 -0
- panelbox-0.4.0/CHANGELOG.md +468 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/PKG-INFO +32 -3
- {panelbox-0.2.0 → panelbox-0.4.0}/README.md +27 -0
- panelbox-0.4.0/examples/standard_errors_comparison_example.py +295 -0
- panelbox-0.4.0/examples/validation/bootstrap_all_methods.py +346 -0
- panelbox-0.4.0/examples/validation/bootstrap_example.py +282 -0
- panelbox-0.4.0/examples/validation/cross_validation_example.py +166 -0
- panelbox-0.4.0/examples/validation/jackknife_example.py +198 -0
- panelbox-0.4.0/examples/validation/sensitivity_analysis_complete.py +506 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/__init__.py +41 -0
- panelbox-0.4.0/panelbox/__version__.py +26 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/core/formula_parser.py +9 -2
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/core/panel_data.py +1 -1
- panelbox-0.4.0/panelbox/datasets/__init__.py +39 -0
- panelbox-0.4.0/panelbox/datasets/load.py +334 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/gmm/difference_gmm.py +63 -15
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/gmm/estimator.py +46 -5
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/gmm/system_gmm.py +136 -21
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/models/static/__init__.py +4 -0
- panelbox-0.4.0/panelbox/models/static/between.py +434 -0
- panelbox-0.4.0/panelbox/models/static/first_difference.py +494 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/models/static/fixed_effects.py +80 -11
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/models/static/pooled_ols.py +80 -11
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/models/static/random_effects.py +52 -10
- panelbox-0.4.0/panelbox/standard_errors/__init__.py +119 -0
- panelbox-0.4.0/panelbox/standard_errors/clustered.py +386 -0
- panelbox-0.4.0/panelbox/standard_errors/comparison.py +528 -0
- panelbox-0.4.0/panelbox/standard_errors/driscoll_kraay.py +386 -0
- panelbox-0.4.0/panelbox/standard_errors/newey_west.py +324 -0
- panelbox-0.4.0/panelbox/standard_errors/pcse.py +358 -0
- panelbox-0.4.0/panelbox/standard_errors/robust.py +324 -0
- panelbox-0.4.0/panelbox/standard_errors/utils.py +390 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/validation/__init__.py +6 -0
- panelbox-0.4.0/panelbox/validation/robustness/__init__.py +51 -0
- panelbox-0.4.0/panelbox/validation/robustness/bootstrap.py +933 -0
- panelbox-0.4.0/panelbox/validation/robustness/checks.py +143 -0
- panelbox-0.4.0/panelbox/validation/robustness/cross_validation.py +538 -0
- panelbox-0.4.0/panelbox/validation/robustness/influence.py +364 -0
- panelbox-0.4.0/panelbox/validation/robustness/jackknife.py +457 -0
- panelbox-0.4.0/panelbox/validation/robustness/outliers.py +529 -0
- panelbox-0.4.0/panelbox/validation/robustness/sensitivity.py +809 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox.egg-info/SOURCES.txt +24 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/pyproject.toml +14 -3
- panelbox-0.4.0/tests/test_new_estimators.py +243 -0
- panelbox-0.2.0/.gitignore +0 -70
- panelbox-0.2.0/CHANGELOG.md +0 -237
- panelbox-0.2.0/panelbox/__version__.py +0 -14
- panelbox-0.2.0/panelbox/validation/instruments/__init__.py +0 -0
- panelbox-0.2.0/panelbox/validation/robustness/__init__.py +0 -0
- panelbox-0.2.0/panelbox/validation/unit_root/__init__.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/CODE_OF_CONDUCT.md +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/CONTRIBUTING.md +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/LICENSE +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/MANIFEST.in +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/QUICKSTART.md +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/docs/gmm/interpretation_guide.md +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/docs/gmm/tutorial.md +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/examples/basic_usage.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/examples/gmm/basic_difference_gmm.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/examples/gmm/basic_system_gmm.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/examples/gmm/firm_growth.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/examples/gmm/ols_fe_gmm_comparison.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/examples/gmm/production_function.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/examples/gmm/unbalanced_panel_guide.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/examples/minimal_report_example.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/examples/report_generation_example.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/examples/simple_report_example.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/examples/validation_example.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/cli/__init__.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/cli/{commands}/__init__.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/core/__init__.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/core/base_model.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/core/results.py +0 -0
- {panelbox-0.2.0/panelbox/datasets → panelbox-0.4.0/panelbox/datasets/{data}}/__init__.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/gmm/__init__.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/gmm/instruments.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/gmm/results.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/gmm/tests.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/models/__init__.py +0 -0
- {panelbox-0.2.0/panelbox/datasets/{data} → panelbox-0.4.0/panelbox/models/dynamic}/__init__.py +0 -0
- {panelbox-0.2.0/panelbox/models/dynamic → panelbox-0.4.0/panelbox/models/iv}/__init__.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/report/__init__.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/report/asset_manager.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/report/css_manager.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/report/exporters/__init__.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/report/exporters/html_exporter.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/report/exporters/latex_exporter.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/report/exporters/markdown_exporter.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/report/renderers/__init__.py +0 -0
- {panelbox-0.2.0/panelbox/models/iv → panelbox-0.4.0/panelbox/report/renderers/static}/__init__.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/report/renderers/static_validation_renderer.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/report/report_manager.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/report/template_manager.py +0 -0
- {panelbox-0.2.0/panelbox/report/renderers/static → panelbox-0.4.0/panelbox/report/transformers}/__init__.py +0 -0
- {panelbox-0.2.0/panelbox/report/transformers → panelbox-0.4.0/panelbox/report/transformers/static}/__init__.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/report/validation_transformer.py +0 -0
- {panelbox-0.2.0/panelbox/report/transformers/static → panelbox-0.4.0/panelbox/templates}/__init__.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/templates/assets/css/base_styles.css +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/templates/assets/css/report_components.css +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/templates/assets/js/tab-navigation.js +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/templates/assets/js/utils.js +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/templates/common/footer.html +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/templates/common/header.html +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/templates/common/meta.html +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/templates/validation/interactive/index.html +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/templates/validation/interactive/partials/charts.html +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/templates/validation/interactive/partials/methodology.html +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/templates/validation/interactive/partials/overview.html +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/templates/validation/interactive/partials/recommendations.html +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/templates/validation/interactive/partials/test_results.html +0 -0
- {panelbox-0.2.0/panelbox/standard_errors → panelbox-0.4.0/panelbox/utils}/__init__.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/utils/formatting.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/utils/matrix_ops.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/utils/statistical.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/validation/base.py +0 -0
- {panelbox-0.2.0/panelbox/templates → panelbox-0.4.0/panelbox/validation/cointegration}/__init__.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/validation/cross_sectional_dependence/__init__.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/validation/cross_sectional_dependence/breusch_pagan_lm.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/validation/cross_sectional_dependence/frees.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/validation/cross_sectional_dependence/pesaran_cd.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/validation/heteroskedasticity/__init__.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/validation/heteroskedasticity/breusch_pagan.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/validation/heteroskedasticity/modified_wald.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/validation/heteroskedasticity/white.py +0 -0
- {panelbox-0.2.0/panelbox/utils → panelbox-0.4.0/panelbox/validation/instruments}/__init__.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/validation/serial_correlation/__init__.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/validation/serial_correlation/baltagi_wu.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/validation/serial_correlation/breusch_godfrey.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/validation/serial_correlation/wooldridge_ar.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/validation/specification/__init__.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/validation/specification/chow.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/validation/specification/hausman.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/validation/specification/mundlak.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/validation/specification/reset.py +0 -0
- {panelbox-0.2.0/panelbox/validation/cointegration → panelbox-0.4.0/panelbox/validation/unit_root}/__init__.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/validation/validation_report.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/panelbox/validation/validation_suite.py +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/setup.cfg +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/validation/data/abdata.csv +0 -0
- {panelbox-0.2.0 → panelbox-0.4.0}/validation/data/abdata.dta +0 -0
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# C extensions
|
|
7
|
+
*.so
|
|
8
|
+
|
|
9
|
+
# Distribution / packaging
|
|
10
|
+
.Python
|
|
11
|
+
build/
|
|
12
|
+
develop-eggs/
|
|
13
|
+
dist/
|
|
14
|
+
downloads/
|
|
15
|
+
eggs/
|
|
16
|
+
.eggs/
|
|
17
|
+
lib/
|
|
18
|
+
lib64/
|
|
19
|
+
parts/
|
|
20
|
+
sdist/
|
|
21
|
+
var/
|
|
22
|
+
wheels/
|
|
23
|
+
pip-wheel-metadata/
|
|
24
|
+
share/python-wheels/
|
|
25
|
+
*.egg-info/
|
|
26
|
+
.installed.cfg
|
|
27
|
+
*.egg
|
|
28
|
+
MANIFEST
|
|
29
|
+
|
|
30
|
+
# PyInstaller
|
|
31
|
+
*.manifest
|
|
32
|
+
*.spec
|
|
33
|
+
|
|
34
|
+
# Installer logs
|
|
35
|
+
pip-log.txt
|
|
36
|
+
pip-delete-this-directory.txt
|
|
37
|
+
|
|
38
|
+
# Unit test / coverage reports
|
|
39
|
+
htmlcov/
|
|
40
|
+
.tox/
|
|
41
|
+
.nox/
|
|
42
|
+
.coverage
|
|
43
|
+
.coverage.*
|
|
44
|
+
.cache
|
|
45
|
+
nosetests.xml
|
|
46
|
+
coverage.xml
|
|
47
|
+
*.cover
|
|
48
|
+
*.py,cover
|
|
49
|
+
.hypothesis/
|
|
50
|
+
.pytest_cache/
|
|
51
|
+
|
|
52
|
+
# Translations
|
|
53
|
+
*.mo
|
|
54
|
+
*.pot
|
|
55
|
+
|
|
56
|
+
# Django stuff:
|
|
57
|
+
*.log
|
|
58
|
+
local_settings.py
|
|
59
|
+
db.sqlite3
|
|
60
|
+
db.sqlite3-journal
|
|
61
|
+
|
|
62
|
+
# Flask stuff:
|
|
63
|
+
instance/
|
|
64
|
+
.webassets-cache
|
|
65
|
+
|
|
66
|
+
# Scrapy stuff:
|
|
67
|
+
.scrapy
|
|
68
|
+
|
|
69
|
+
# Sphinx documentation
|
|
70
|
+
docs/_build/
|
|
71
|
+
|
|
72
|
+
# PyBuilder
|
|
73
|
+
target/
|
|
74
|
+
|
|
75
|
+
# Jupyter Notebook
|
|
76
|
+
.ipynb_checkpoints
|
|
77
|
+
|
|
78
|
+
# IPython
|
|
79
|
+
profile_default/
|
|
80
|
+
ipython_config.py
|
|
81
|
+
|
|
82
|
+
# pyenv
|
|
83
|
+
.python-version
|
|
84
|
+
|
|
85
|
+
# pipenv
|
|
86
|
+
Pipfile.lock
|
|
87
|
+
|
|
88
|
+
# PEP 582
|
|
89
|
+
__pypackages__/
|
|
90
|
+
|
|
91
|
+
# Celery stuff
|
|
92
|
+
celerybeat-schedule
|
|
93
|
+
celerybeat.pid
|
|
94
|
+
|
|
95
|
+
# SageMath parsed files
|
|
96
|
+
*.sage.py
|
|
97
|
+
|
|
98
|
+
# Environments
|
|
99
|
+
.env
|
|
100
|
+
.venv
|
|
101
|
+
env/
|
|
102
|
+
venv/
|
|
103
|
+
ENV/
|
|
104
|
+
env.bak/
|
|
105
|
+
venv.bak/
|
|
106
|
+
publish_env/
|
|
107
|
+
build_env/
|
|
108
|
+
test_env/
|
|
109
|
+
test_install/
|
|
110
|
+
final_test/
|
|
111
|
+
|
|
112
|
+
# Spyder project settings
|
|
113
|
+
.spyderproject
|
|
114
|
+
.spyproject
|
|
115
|
+
|
|
116
|
+
# Rope project settings
|
|
117
|
+
.ropeproject
|
|
118
|
+
|
|
119
|
+
# mkdocs documentation
|
|
120
|
+
/site
|
|
121
|
+
|
|
122
|
+
# mypy
|
|
123
|
+
.mypy_cache/
|
|
124
|
+
.dmypy.json
|
|
125
|
+
dmypy.json
|
|
126
|
+
|
|
127
|
+
# Pyre type checker
|
|
128
|
+
.pyre/
|
|
129
|
+
|
|
130
|
+
# pytype static type analyzer
|
|
131
|
+
.pytype/
|
|
132
|
+
|
|
133
|
+
# IDEs
|
|
134
|
+
.vscode/
|
|
135
|
+
.idea/
|
|
136
|
+
*.swp
|
|
137
|
+
*.swo
|
|
138
|
+
*~
|
|
139
|
+
.project
|
|
140
|
+
.pydevproject
|
|
141
|
+
.settings/
|
|
142
|
+
|
|
143
|
+
# OS
|
|
144
|
+
.DS_Store
|
|
145
|
+
.DS_Store?
|
|
146
|
+
._*
|
|
147
|
+
.Spotlight-V100
|
|
148
|
+
.Trashes
|
|
149
|
+
ehthumbs.db
|
|
150
|
+
Thumbs.db
|
|
151
|
+
|
|
152
|
+
# =============================================================================
|
|
153
|
+
# PanelBox Specific - Development Files (NOT for public repository)
|
|
154
|
+
# =============================================================================
|
|
155
|
+
|
|
156
|
+
# Development and internal documentation
|
|
157
|
+
desenvolvimento/
|
|
158
|
+
planejamento_doc/
|
|
159
|
+
academic/
|
|
160
|
+
|
|
161
|
+
# Internal planning files
|
|
162
|
+
PLANEJAMENTO_PANELBOX.md
|
|
163
|
+
FASE_*.md
|
|
164
|
+
SUBFASE_*.md
|
|
165
|
+
*_RESUMO*.md
|
|
166
|
+
*_FINAL.md
|
|
167
|
+
RELEASE_PREP_COMPLETE.md
|
|
168
|
+
|
|
169
|
+
# Publishing guides (internal use only)
|
|
170
|
+
PUBLISHING_GUIDE.md
|
|
171
|
+
BUILD_INSTRUCTIONS.md
|
|
172
|
+
NEXT_STEPS_PUBLICATION.md
|
|
173
|
+
GITHUB_SETUP.md
|
|
174
|
+
QA_GUIDE.md
|
|
175
|
+
|
|
176
|
+
# Temporary backup files
|
|
177
|
+
*_OLD.md
|
|
178
|
+
*_NEW.md
|
|
179
|
+
*_BACKUP.*
|
|
180
|
+
*.bak
|
|
181
|
+
|
|
182
|
+
# Debug scripts (but not actual test files)
|
|
183
|
+
debug_*.py
|
|
184
|
+
setup_structure.sh
|
|
185
|
+
install_reports.sh
|
|
186
|
+
|
|
187
|
+
# Publication scripts (keep publish.sh if you want, or ignore it)
|
|
188
|
+
publish.sh
|
|
189
|
+
|
|
190
|
+
# Temporary files
|
|
191
|
+
*.tmp
|
|
192
|
+
*.temp
|
|
193
|
+
~*
|
|
194
|
+
|
|
195
|
+
# Python wheel build artifacts
|
|
196
|
+
*.whl
|
|
197
|
+
|
|
198
|
+
# =============================================================================
|
|
199
|
+
# Keep these documentation files (public-facing)
|
|
200
|
+
# =============================================================================
|
|
201
|
+
# README.md - KEEP
|
|
202
|
+
# CHANGELOG.md - KEEP
|
|
203
|
+
# CONTRIBUTING.md - KEEP
|
|
204
|
+
# CODE_OF_CONDUCT.md - KEEP
|
|
205
|
+
# LICENSE - KEEP
|
|
206
|
+
# QUICKSTART.md - KEEP (if it's user-facing)
|
|
207
|
+
# MANIFEST.in - KEEP
|
|
208
|
+
# COPYRIGHT_HEADER.txt - KEEP (optional)
|
|
@@ -0,0 +1,468 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to PanelBox will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
### Planned
|
|
11
|
+
- Additional GMM estimators (LIML, CUE)
|
|
12
|
+
- Cross-validation for panel data
|
|
13
|
+
- Jackknife inference
|
|
14
|
+
- Outlier detection and influence diagnostics
|
|
15
|
+
- Panel VAR models
|
|
16
|
+
- Cointegration tests
|
|
17
|
+
|
|
18
|
+
## [0.4.0] - 2026-02-05
|
|
19
|
+
|
|
20
|
+
### Added - Robust Standard Errors
|
|
21
|
+
|
|
22
|
+
**Heteroskedasticity-Robust Standard Errors (HC):**
|
|
23
|
+
- **HC0** - White (1980) sandwich estimator
|
|
24
|
+
- **HC1** - Degrees of freedom corrected: [n/(n-k)] × HC0
|
|
25
|
+
- **HC2** - Leverage adjustment: Ω̂ = diag(ε²/(1-h_i))
|
|
26
|
+
- **HC3** - MacKinnon-White (1985): Ω̂ = diag(ε²/(1-h_i)²)
|
|
27
|
+
- Automatic leverage (hat values) computation
|
|
28
|
+
- Efficient caching for performance
|
|
29
|
+
|
|
30
|
+
**Cluster-Robust Standard Errors:**
|
|
31
|
+
- **One-way clustering** - Cluster by entity or time
|
|
32
|
+
- **Two-way clustering** - Cameron, Gelbach & Miller (2011) formula: V = V₁ + V₂ - V₁₂
|
|
33
|
+
- Finite-sample corrections: G/(G-1) × (N-1)/(N-K)
|
|
34
|
+
- Diagnostic warnings for few clusters (<20)
|
|
35
|
+
- Support for unbalanced clusters
|
|
36
|
+
|
|
37
|
+
**Driscoll-Kraay Standard Errors:**
|
|
38
|
+
- Robust to spatial and temporal dependence
|
|
39
|
+
- Automatic lag selection: floor(4(T/100)^(2/9))
|
|
40
|
+
- 3 kernel options: Bartlett, Parzen, Quadratic Spectral
|
|
41
|
+
- Appropriate for large N, moderate/large T
|
|
42
|
+
- Comprehensive diagnostic information
|
|
43
|
+
|
|
44
|
+
**Newey-West HAC Standard Errors:**
|
|
45
|
+
- Heteroskedasticity and Autocorrelation Consistent
|
|
46
|
+
- Automatic lag selection using Newey-West rule
|
|
47
|
+
- 3 kernel options: Bartlett, Parzen, Quadratic Spectral
|
|
48
|
+
- Suitable for time-series and panels with autocorrelation
|
|
49
|
+
|
|
50
|
+
**Panel-Corrected Standard Errors (PCSE):**
|
|
51
|
+
- Beck & Katz (1995) implementation
|
|
52
|
+
- For contemporaneous cross-sectional correlation
|
|
53
|
+
- FGLS approach with estimated Σ matrix
|
|
54
|
+
- Requires T > N
|
|
55
|
+
- Works best with Pooled OLS or Random Effects
|
|
56
|
+
|
|
57
|
+
**Utility Functions:**
|
|
58
|
+
- `compute_leverage()` - Hat values computation
|
|
59
|
+
- `compute_bread()` - (X'X)^{-1} for sandwich estimator
|
|
60
|
+
- `compute_meat_hc()` - Meat matrix for HC variants
|
|
61
|
+
- `compute_clustered_meat()` - One-way clustering meat
|
|
62
|
+
- `compute_twoway_clustered_meat()` - Two-way clustering meat
|
|
63
|
+
- `sandwich_covariance()` - Combines bread and meat
|
|
64
|
+
- Convenience functions for quick usage
|
|
65
|
+
|
|
66
|
+
**Integration with Models:**
|
|
67
|
+
- **Fixed Effects**: 8 types of standard errors
|
|
68
|
+
- nonrobust, robust, hc0, hc1, hc2, hc3
|
|
69
|
+
- clustered (one-way), twoway
|
|
70
|
+
- driscoll_kraay, newey_west, pcse
|
|
71
|
+
- **Random Effects**: 7 types of standard errors
|
|
72
|
+
- All above except PCSE works better with non-demeaned data
|
|
73
|
+
- Flexible parameters: `max_lags`, `kernel`
|
|
74
|
+
- Backward compatible with existing code
|
|
75
|
+
|
|
76
|
+
### Added - Tests
|
|
77
|
+
|
|
78
|
+
**Comprehensive Test Suite:**
|
|
79
|
+
- 40+ tests for HC standard errors (test_robust.py)
|
|
80
|
+
- Leverage computation tests
|
|
81
|
+
- Bread and meat matrix tests
|
|
82
|
+
- Sandwich covariance tests
|
|
83
|
+
- HC0-HC3 correctness tests
|
|
84
|
+
- Edge cases and numerical stability
|
|
85
|
+
- 35+ tests for clustered standard errors (test_clustered.py)
|
|
86
|
+
- One-way clustering tests
|
|
87
|
+
- Two-way clustering tests
|
|
88
|
+
- Diagnostic summary tests
|
|
89
|
+
- Various cluster patterns (balanced, unbalanced, singletons)
|
|
90
|
+
- Manual validation of Driscoll-Kraay and Newey-West
|
|
91
|
+
- Manual validation of PCSE
|
|
92
|
+
- Integration tests with Fixed Effects and Random Effects
|
|
93
|
+
- Total: 75+ test cases, ~90% coverage
|
|
94
|
+
|
|
95
|
+
### Added - Documentation
|
|
96
|
+
|
|
97
|
+
**Module Documentation:**
|
|
98
|
+
- `desenvolvimento/FASE_6_COMPLETE.md` - Complete implementation guide (457 lines)
|
|
99
|
+
- `desenvolvimento/FASE_6_PROGRESSO.md` - Detailed progress tracking (569 lines)
|
|
100
|
+
- `desenvolvimento/FASE_6_ERROS_PADRAO_ROBUSTOS.md` - Planning and checklist (389 lines)
|
|
101
|
+
|
|
102
|
+
**Implementation Files:**
|
|
103
|
+
- `panelbox/standard_errors/utils.py` - Core utilities (394 lines)
|
|
104
|
+
- `panelbox/standard_errors/robust.py` - HC standard errors (267 lines)
|
|
105
|
+
- `panelbox/standard_errors/clustered.py` - Clustering (320 lines)
|
|
106
|
+
- `panelbox/standard_errors/driscoll_kraay.py` - DK estimator (461 lines)
|
|
107
|
+
- `panelbox/standard_errors/newey_west.py` - NW HAC (309 lines)
|
|
108
|
+
- `panelbox/standard_errors/pcse.py` - PCSE (368 lines)
|
|
109
|
+
|
|
110
|
+
**Enhanced Docstrings:**
|
|
111
|
+
- Complete API documentation for all new classes
|
|
112
|
+
- Mathematical formulas for each estimator
|
|
113
|
+
- Usage examples in docstrings
|
|
114
|
+
- Parameter descriptions
|
|
115
|
+
- References to academic papers
|
|
116
|
+
|
|
117
|
+
### Changed
|
|
118
|
+
|
|
119
|
+
- Updated `FixedEffects.fit()` to support 8 covariance types
|
|
120
|
+
- Updated `RandomEffects.fit()` to support 7 covariance types
|
|
121
|
+
- Enhanced `panelbox/__init__.py` with standard error exports
|
|
122
|
+
- Updated main module to export all SE classes and functions
|
|
123
|
+
|
|
124
|
+
### Performance
|
|
125
|
+
|
|
126
|
+
**Optimizations:**
|
|
127
|
+
- Caching of bread matrix and leverage values
|
|
128
|
+
- Vectorized NumPy operations throughout
|
|
129
|
+
- Efficient meat computation for all methods
|
|
130
|
+
- Minimal memory footprint with smart algorithms
|
|
131
|
+
|
|
132
|
+
**Benchmarks (typical panel N=50, T=10):**
|
|
133
|
+
- HC standard errors: <0.1s computation time
|
|
134
|
+
- Clustered SE: <0.2s computation time
|
|
135
|
+
- Driscoll-Kraay: <0.5s computation time
|
|
136
|
+
- Newey-West: <0.3s computation time
|
|
137
|
+
|
|
138
|
+
### Academic References Implemented
|
|
139
|
+
|
|
140
|
+
1. **White, H. (1980)**. A heteroskedasticity-consistent covariance matrix estimator. *Econometrica*, 48(4), 817-838. ✅ HC0
|
|
141
|
+
2. **MacKinnon, J. G., & White, H. (1985)**. Some heteroskedasticity-consistent covariance matrix estimators. *Journal of Econometrics*, 29(3), 305-325. ✅ HC1, HC2, HC3
|
|
142
|
+
3. **Newey, W. K., & West, K. D. (1987)**. A simple, positive semi-definite, heteroskedasticity and autocorrelation consistent covariance matrix. *Econometrica*, 55(3), 703-708. ✅ Newey-West
|
|
143
|
+
4. **Beck, N., & Katz, J. N. (1995)**. What to do (and not to do) with time-series cross-section data. *American Political Science Review*, 89(3), 634-647. ✅ PCSE
|
|
144
|
+
5. **Driscoll, J. C., & Kraay, A. C. (1998)**. Consistent covariance matrix estimation with spatially dependent panel data. *Review of Economics and Statistics*, 80(4), 549-560. ✅ Driscoll-Kraay
|
|
145
|
+
6. **Hoechle, D. (2007)**. Robust standard errors for panel regressions with cross-sectional dependence. *The Stata Journal*, 7(3), 281-312. ✅ DK implementation
|
|
146
|
+
7. **Cameron, A. C., Gelbach, J. B., & Miller, D. L. (2011)**. Robust inference with multiway clustering. *Journal of Business & Economic Statistics*, 29(2), 238-249. ✅ Two-way clustering
|
|
147
|
+
|
|
148
|
+
## [0.3.0] - 2026-01-22
|
|
149
|
+
|
|
150
|
+
### Added - Advanced Robustness Analysis
|
|
151
|
+
|
|
152
|
+
**Bootstrap Inference:**
|
|
153
|
+
- **PanelBootstrap** class with 4 bootstrap methods:
|
|
154
|
+
- **Pairs (Entity) Bootstrap** - Resamples entire entities with all time periods (default, most robust)
|
|
155
|
+
- **Wild Bootstrap** - Rademacher weights for heteroskedasticity-robust inference
|
|
156
|
+
- **Block Bootstrap** - Moving blocks for temporal dependence (automatic block size selection)
|
|
157
|
+
- **Residual Bootstrap** - i.i.d. assumption benchmark
|
|
158
|
+
- Performance: ~95-110 iterations/second on typical panels
|
|
159
|
+
- Progress tracking with optional tqdm integration
|
|
160
|
+
- Methods: `run()`, `conf_int()`, `summary()`
|
|
161
|
+
- Confidence interval methods: percentile, basic, studentized
|
|
162
|
+
- Bootstrap bias and variance estimates
|
|
163
|
+
|
|
164
|
+
**Sensitivity Analysis:**
|
|
165
|
+
- **SensitivityAnalysis** class with 3 analysis methods:
|
|
166
|
+
- **Leave-One-Out Entities** - Identifies influential cross-sectional units
|
|
167
|
+
- **Leave-One-Out Periods** - Identifies influential time periods
|
|
168
|
+
- **Subset Sensitivity** - Random subsample stability analysis with stratification
|
|
169
|
+
- Influential unit detection (configurable threshold)
|
|
170
|
+
- Comprehensive summary statistics (CV, ranges, deviations)
|
|
171
|
+
- Optional visualization with matplotlib
|
|
172
|
+
- Methods: `leave_one_out_entities()`, `leave_one_out_periods()`, `subset_sensitivity()`, `plot_sensitivity()`, `summary()`
|
|
173
|
+
- Performance: 1-4 seconds for typical panels
|
|
174
|
+
|
|
175
|
+
**Integration:**
|
|
176
|
+
- Exported `PanelBootstrap`, `SensitivityAnalysis`, and `SensitivityResults` in main module
|
|
177
|
+
- Works seamlessly with all static and dynamic panel models
|
|
178
|
+
- Backward compatible with v0.2.0
|
|
179
|
+
|
|
180
|
+
### Added - Tests
|
|
181
|
+
|
|
182
|
+
**Comprehensive Test Suite:**
|
|
183
|
+
- 33 tests for PanelBootstrap (100% passing)
|
|
184
|
+
- Initialization tests
|
|
185
|
+
- Method-specific tests (pairs, wild, block, residual)
|
|
186
|
+
- Reproducibility tests
|
|
187
|
+
- Integration tests
|
|
188
|
+
- 30 tests for SensitivityAnalysis (100% passing)
|
|
189
|
+
- Leave-one-out tests
|
|
190
|
+
- Subset sensitivity tests
|
|
191
|
+
- Plotting tests (conditional on matplotlib)
|
|
192
|
+
- Edge case coverage
|
|
193
|
+
- Total: 63 new tests, 100% pass rate
|
|
194
|
+
|
|
195
|
+
### Added - Documentation
|
|
196
|
+
|
|
197
|
+
**Module Documentation:**
|
|
198
|
+
- `desenvolvimento/FASE_5_BOOTSTRAP_COMPLETE.md` - Complete bootstrap guide (500 lines)
|
|
199
|
+
- `desenvolvimento/FASE_5_ROBUSTNESS_COMPLETE.md` - Robustness suite documentation (800 lines)
|
|
200
|
+
- `desenvolvimento/FASE_5_SUMMARY.md` - Executive summary (400 lines)
|
|
201
|
+
- `desenvolvimento/PROJECT_STATUS_2026_01_22.md` - Project status overview
|
|
202
|
+
- `desenvolvimento/NEXT_STEPS_RECOMMENDATIONS.md` - Future roadmap
|
|
203
|
+
|
|
204
|
+
**Example Scripts:**
|
|
205
|
+
- `examples/validation/bootstrap_all_methods.py` - Complete bootstrap demonstration (347 lines)
|
|
206
|
+
- All 4 methods with comparison
|
|
207
|
+
- Standard error comparison
|
|
208
|
+
- Confidence interval analysis
|
|
209
|
+
- Method-specific recommendations
|
|
210
|
+
- `examples/validation/sensitivity_analysis_complete.py` - Comprehensive sensitivity demo (550 lines)
|
|
211
|
+
- All 3 sensitivity methods
|
|
212
|
+
- Planted outlier detection
|
|
213
|
+
- Stability assessment
|
|
214
|
+
- Practical interpretation guidelines
|
|
215
|
+
|
|
216
|
+
**Enhanced Docstrings:**
|
|
217
|
+
- Complete API documentation for all new classes
|
|
218
|
+
- Type hints throughout
|
|
219
|
+
- Usage examples in docstrings
|
|
220
|
+
- Parameter descriptions
|
|
221
|
+
|
|
222
|
+
### Changed
|
|
223
|
+
|
|
224
|
+
- Updated main `__init__.py` to export robustness analysis tools
|
|
225
|
+
- Updated package status: v0.2.0 (GMM) → v0.3.0 (GMM + Robustness)
|
|
226
|
+
- Enhanced project documentation structure
|
|
227
|
+
|
|
228
|
+
### Performance
|
|
229
|
+
|
|
230
|
+
**Bootstrap Benchmarks (N=20, T=8):**
|
|
231
|
+
- Pairs: ~110 iterations/second (~9s for 1000 bootstrap)
|
|
232
|
+
- Wild: ~98 iterations/second (~10s for 1000 bootstrap)
|
|
233
|
+
- Block: ~73 iterations/second (~14s for 1000 bootstrap)
|
|
234
|
+
- Residual: ~95 iterations/second (~11s for 1000 bootstrap)
|
|
235
|
+
|
|
236
|
+
**Sensitivity Benchmarks (N=30, T=10):**
|
|
237
|
+
- LOO Entities: ~3.5 seconds (30 re-estimations)
|
|
238
|
+
- LOO Periods: ~1.2 seconds (10 re-estimations)
|
|
239
|
+
- Subset (30 samples): ~3.8 seconds
|
|
240
|
+
|
|
241
|
+
## [0.2.0] - 2026-01-21
|
|
242
|
+
|
|
243
|
+
### Added - Dynamic Panel GMM
|
|
244
|
+
|
|
245
|
+
**Core Features:**
|
|
246
|
+
- **Difference GMM** implementation (Arellano-Bond 1991)
|
|
247
|
+
- One-step, two-step, and iterative GMM
|
|
248
|
+
- Automatic instrument generation (GMM-style and IV-style)
|
|
249
|
+
- Collapse option to avoid instrument proliferation
|
|
250
|
+
- Windmeijer (2005) finite-sample standard error correction
|
|
251
|
+
|
|
252
|
+
- **System GMM** implementation (Blundell-Bond 1998)
|
|
253
|
+
- Combines differenced and level equations
|
|
254
|
+
- Level instruments for highly persistent series
|
|
255
|
+
- More efficient than Difference GMM for weak instruments
|
|
256
|
+
- Difference-in-Hansen test for level instrument validity
|
|
257
|
+
|
|
258
|
+
**Specification Tests:**
|
|
259
|
+
- Hansen J-test for overidentification
|
|
260
|
+
- Sargan test (homoskedastic version)
|
|
261
|
+
- Arellano-Bond AR(1) and AR(2) tests
|
|
262
|
+
- Instrument ratio monitoring (instruments / groups)
|
|
263
|
+
|
|
264
|
+
**Unbalanced Panel Support:**
|
|
265
|
+
- Smart instrument selection based on data availability
|
|
266
|
+
- Automatic filtering of lags with <10% coverage
|
|
267
|
+
- Pre-estimation warnings for problematic specifications
|
|
268
|
+
- Post-estimation warnings for low observation retention
|
|
269
|
+
- Panel balance diagnostics
|
|
270
|
+
|
|
271
|
+
**Results Class:**
|
|
272
|
+
- Comprehensive `GMMResults` class
|
|
273
|
+
- Publication-ready summary tables
|
|
274
|
+
- Coefficient tables with significance stars
|
|
275
|
+
- Specification test interpretation
|
|
276
|
+
- Diagnostic assessment tools
|
|
277
|
+
|
|
278
|
+
### Added - Documentation
|
|
279
|
+
|
|
280
|
+
**GMM Documentation:**
|
|
281
|
+
- `panelbox/gmm/README.md` - Complete GMM reference (540 lines)
|
|
282
|
+
- `docs/gmm/tutorial.md` - Comprehensive tutorial (650 lines)
|
|
283
|
+
- `docs/gmm/interpretation_guide.md` - Results interpretation (420 lines)
|
|
284
|
+
|
|
285
|
+
**Example Scripts:**
|
|
286
|
+
- `examples/gmm/ols_fe_gmm_comparison.py` - Bias comparison (410 lines)
|
|
287
|
+
- `examples/gmm/firm_growth.py` - Intermediate example (500 lines)
|
|
288
|
+
- `examples/gmm/production_function.py` - Simultaneity bias (602 lines)
|
|
289
|
+
- `examples/gmm/unbalanced_panel_guide.py` - Practical guide (532 lines)
|
|
290
|
+
|
|
291
|
+
**Enhanced Docstrings:**
|
|
292
|
+
- Added 4 practical examples to `DifferenceGMM` class
|
|
293
|
+
- Added 3 comparison examples to `SystemGMM` class
|
|
294
|
+
- Added 5 usage patterns to `GMMResults` class
|
|
295
|
+
|
|
296
|
+
### Added - Infrastructure
|
|
297
|
+
|
|
298
|
+
**Package Configuration:**
|
|
299
|
+
- Updated `pyproject.toml` for v0.2.0
|
|
300
|
+
- Created `MANIFEST.in` for distribution
|
|
301
|
+
- Updated `__init__.py` with GMM exports
|
|
302
|
+
- Version management in `__version__.py`
|
|
303
|
+
|
|
304
|
+
**Quality Assurance:**
|
|
305
|
+
- `.flake8` configuration for linting
|
|
306
|
+
- `.pre-commit-config.yaml` for automated checks
|
|
307
|
+
- `scripts/qa.sh` for quality checks
|
|
308
|
+
- `QA_GUIDE.md` documentation
|
|
309
|
+
|
|
310
|
+
### Improved - Robustness
|
|
311
|
+
|
|
312
|
+
**Validation (Subfase 4.2):**
|
|
313
|
+
- Validation against Arellano-Bond (1991) employment data
|
|
314
|
+
- 72.8% observation retention (vs 0% before improvements)
|
|
315
|
+
- Coefficient within credible range [0.733, 1.045]
|
|
316
|
+
- All specification tests pass (AR(2) p=0.724)
|
|
317
|
+
|
|
318
|
+
**Warning System:**
|
|
319
|
+
- Pre-estimation warnings for:
|
|
320
|
+
- Unbalanced panels with many time dummies
|
|
321
|
+
- Not using collapse option
|
|
322
|
+
- Post-estimation warnings for:
|
|
323
|
+
- Low observation retention (<30%)
|
|
324
|
+
- Actionable recommendations in all warnings
|
|
325
|
+
|
|
326
|
+
**Instrument Selection:**
|
|
327
|
+
- `_analyze_lag_availability()` method
|
|
328
|
+
- Automatic filtering of weak instruments
|
|
329
|
+
- Coverage-based lag selection (≥10% threshold)
|
|
330
|
+
- Prevents instrument proliferation
|
|
331
|
+
|
|
332
|
+
### Changed
|
|
333
|
+
|
|
334
|
+
- Updated package status from "Alpha" to "Beta"
|
|
335
|
+
- Improved package description for PyPI
|
|
336
|
+
- Updated Python version classifiers (3.9-3.12)
|
|
337
|
+
- Enhanced main `__init__.py` with GMM imports
|
|
338
|
+
|
|
339
|
+
### Fixed
|
|
340
|
+
|
|
341
|
+
- Arellano-Bond validation now works with unbalanced panels
|
|
342
|
+
- Time dummies no longer cause 0% observation retention
|
|
343
|
+
- System GMM more robust with error handling
|
|
344
|
+
- Better handling of missing observations in instruments
|
|
345
|
+
|
|
346
|
+
### Performance
|
|
347
|
+
|
|
348
|
+
- Smart instrument selection reduces computation time
|
|
349
|
+
- Efficient NumPy operations throughout
|
|
350
|
+
- Optimized instrument matrix construction
|
|
351
|
+
- Reduced memory footprint with collapse option
|
|
352
|
+
|
|
353
|
+
## [0.1.0] - 2025-12
|
|
354
|
+
|
|
355
|
+
### Added - Core Framework
|
|
356
|
+
|
|
357
|
+
**Core Classes:**
|
|
358
|
+
- `PanelData` - Panel data container with validation
|
|
359
|
+
- `FormulaParser` - R-style formula parsing (patsy integration)
|
|
360
|
+
- `PanelResults` - Base results class
|
|
361
|
+
|
|
362
|
+
**Static Models:**
|
|
363
|
+
- `PooledOLS` - Pooled OLS estimation
|
|
364
|
+
- `FixedEffects` - Within (FE) estimation
|
|
365
|
+
- `RandomEffects` - GLS (RE) estimation
|
|
366
|
+
|
|
367
|
+
**Specification Tests:**
|
|
368
|
+
- `HausmanTest` - Test for fixed vs random effects
|
|
369
|
+
- `HausmanTestResult` - Results container
|
|
370
|
+
|
|
371
|
+
**Standard Errors:**
|
|
372
|
+
- Homoskedastic (default)
|
|
373
|
+
- Heteroskedasticity-robust
|
|
374
|
+
- Clustered (one-way and two-way)
|
|
375
|
+
|
|
376
|
+
**Infrastructure:**
|
|
377
|
+
- Project structure setup
|
|
378
|
+
- Testing framework (pytest)
|
|
379
|
+
- Basic documentation
|
|
380
|
+
- MIT License
|
|
381
|
+
|
|
382
|
+
### Added - Validation Framework
|
|
383
|
+
|
|
384
|
+
**Statistical Tests:**
|
|
385
|
+
- Autocorrelation tests
|
|
386
|
+
- Heteroskedasticity tests
|
|
387
|
+
- Cross-sectional dependence tests
|
|
388
|
+
- Unit root tests (panel)
|
|
389
|
+
|
|
390
|
+
**Reporting:**
|
|
391
|
+
- HTML reports with Plotly
|
|
392
|
+
- Static reports with Matplotlib
|
|
393
|
+
- LaTeX table export
|
|
394
|
+
- Publication-ready formatting
|
|
395
|
+
|
|
396
|
+
---
|
|
397
|
+
|
|
398
|
+
## Release Notes
|
|
399
|
+
|
|
400
|
+
### v0.2.0 - GMM Implementation Complete
|
|
401
|
+
|
|
402
|
+
This release marks a major milestone with complete implementation of dynamic panel GMM estimation, bringing Stata's `xtabond2` capabilities to Python with improved robustness and user experience.
|
|
403
|
+
|
|
404
|
+
**Key Highlights:**
|
|
405
|
+
- 🎉 Difference GMM and System GMM fully implemented
|
|
406
|
+
- 🎯 72.8% improvement in unbalanced panel handling
|
|
407
|
+
- 📚 3,800+ lines of documentation and examples
|
|
408
|
+
- ⚠️ Smart warning system for problematic specifications
|
|
409
|
+
- ✅ Validated against Arellano-Bond (1991)
|
|
410
|
+
|
|
411
|
+
**Migration from v0.1.0:**
|
|
412
|
+
No breaking changes. All v0.1.0 code continues to work. New GMM features are additive:
|
|
413
|
+
|
|
414
|
+
```python
|
|
415
|
+
# v0.1.0 code still works
|
|
416
|
+
from panelbox import FixedEffects, RandomEffects
|
|
417
|
+
|
|
418
|
+
# v0.2.0 adds GMM
|
|
419
|
+
from panelbox import DifferenceGMM, SystemGMM # NEW!
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
**Best Practices:**
|
|
423
|
+
- **Recommendation**: Use `collapse=True` for GMM models (Roodman 2009)
|
|
424
|
+
- Collapsed instruments provide better numerical stability
|
|
425
|
+
- Reduces instrument count from O(T²) to O(T)
|
|
426
|
+
- Improves finite-sample properties
|
|
427
|
+
|
|
428
|
+
**Known Limitations:**
|
|
429
|
+
- Non-collapsed instruments (`collapse=False`) may show numerical warnings
|
|
430
|
+
- System GMM may fail with very sparse synthetic data (add appropriate try/except)
|
|
431
|
+
- Type hints are partial (gradual typing in progress)
|
|
432
|
+
- Some specification tests may be under-powered with T < 5
|
|
433
|
+
|
|
434
|
+
**Upcoming in v0.3.0:**
|
|
435
|
+
- Comprehensive test suite (target: >80% coverage)
|
|
436
|
+
- Advanced diagnostic tools (weak instrument tests)
|
|
437
|
+
- Performance benchmarks
|
|
438
|
+
- More example datasets
|
|
439
|
+
|
|
440
|
+
---
|
|
441
|
+
|
|
442
|
+
## Versioning
|
|
443
|
+
|
|
444
|
+
We use [Semantic Versioning](https://semver.org/):
|
|
445
|
+
- **Major** (X.0.0): Incompatible API changes
|
|
446
|
+
- **Minor** (0.X.0): New features, backwards compatible
|
|
447
|
+
- **Patch** (0.0.X): Bug fixes, backwards compatible
|
|
448
|
+
|
|
449
|
+
## Contributing
|
|
450
|
+
|
|
451
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for how to contribute to PanelBox.
|
|
452
|
+
|
|
453
|
+
## Support
|
|
454
|
+
|
|
455
|
+
- 📫 Issues: [GitHub Issues](https://github.com/guhaase/panelbox/issues)
|
|
456
|
+
- 💬 Discussions: [GitHub Discussions](https://github.com/guhaase/panelbox/discussions)
|
|
457
|
+
|
|
458
|
+
---
|
|
459
|
+
|
|
460
|
+
**Legend:**
|
|
461
|
+
- `Added` - New features
|
|
462
|
+
- `Changed` - Changes to existing features
|
|
463
|
+
- `Deprecated` - Soon-to-be removed features
|
|
464
|
+
- `Removed` - Removed features
|
|
465
|
+
- `Fixed` - Bug fixes
|
|
466
|
+
- `Security` - Security fixes
|
|
467
|
+
- `Performance` - Performance improvements
|
|
468
|
+
- `Improved` - Quality improvements
|