limiteddepkit 0.1.0a1__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.
- limiteddepkit-0.1.0a1/CHANGELOG.md +154 -0
- limiteddepkit-0.1.0a1/CITATION.cff +13 -0
- limiteddepkit-0.1.0a1/CONTRIBUTING.md +67 -0
- limiteddepkit-0.1.0a1/LICENSE +21 -0
- limiteddepkit-0.1.0a1/MANIFEST.in +17 -0
- limiteddepkit-0.1.0a1/PKG-INFO +1366 -0
- limiteddepkit-0.1.0a1/README.md +1315 -0
- limiteddepkit-0.1.0a1/RELEASING.md +57 -0
- limiteddepkit-0.1.0a1/SECURITY.md +21 -0
- limiteddepkit-0.1.0a1/docs/BINARY_MODELS.md +73 -0
- limiteddepkit-0.1.0a1/docs/CATEGORY_ORDER.md +38 -0
- limiteddepkit-0.1.0a1/docs/CENSORING_MODELS.md +109 -0
- limiteddepkit-0.1.0a1/docs/COUNT_MODELS.md +135 -0
- limiteddepkit-0.1.0a1/docs/DURATION_MODELS.md +97 -0
- limiteddepkit-0.1.0a1/docs/DYNAMIC_FIXED_EFFECTS_ORDINAL.md +152 -0
- limiteddepkit-0.1.0a1/docs/DYNAMIC_ORDINAL.md +34 -0
- limiteddepkit-0.1.0a1/docs/DYNAMIC_ORDINAL_VALIDATION.md +36 -0
- limiteddepkit-0.1.0a1/docs/ECOSYSTEM_COMPATIBILITY.md +35 -0
- limiteddepkit-0.1.0a1/docs/EXPERIMENTAL_MODELS.md +159 -0
- limiteddepkit-0.1.0a1/docs/FIXED_EFFECTS_ORDINAL.md +127 -0
- limiteddepkit-0.1.0a1/docs/ML_WORKFLOWS.md +593 -0
- limiteddepkit-0.1.0a1/docs/OPEN_DEVELOPMENT.md +59 -0
- limiteddepkit-0.1.0a1/docs/ORDINAL_MODELS.md +104 -0
- limiteddepkit-0.1.0a1/docs/PACKAGE_SCOPE.md +67 -0
- limiteddepkit-0.1.0a1/docs/PANEL_ORDINAL.md +75 -0
- limiteddepkit-0.1.0a1/docs/PUBLIC_DISCUSSION_DRAFTS.md +82 -0
- limiteddepkit-0.1.0a1/docs/README.md +82 -0
- limiteddepkit-0.1.0a1/docs/SMALL_SAMPLE_MODELS.md +103 -0
- limiteddepkit-0.1.0a1/docs/VALIDATION.md +327 -0
- limiteddepkit-0.1.0a1/pyproject.toml +93 -0
- limiteddepkit-0.1.0a1/setup.cfg +4 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/__init__.py +162 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/_continuous.py +354 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/_count_common.py +280 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/_duration.py +400 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/_irls.py +132 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/_small_sample.py +1108 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/binary.py +482 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/binary_probit.py +250 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/censored_quantile.py +449 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/censoring/__init__.py +14 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/conditional_logit.py +332 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/count/__init__.py +23 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/discrete_time_duration.py +335 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/duration/__init__.py +24 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/dynamic_fixed_effects_ordinal.py +626 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/dynamic_ordinal.py +437 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/experimental/__init__.py +102 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/experimental/small_sample.py +23 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/exponential_duration.py +282 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/fixed_effects_ordinal.py +951 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/gamma_duration.py +359 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/generalized_ordinal.py +810 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/hurdle_poisson.py +368 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/integrations/__init__.py +5 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/integrations/outputhub.py +197 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/interval_regression.py +248 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/ml/__init__.py +190 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/ml/adapter.py +430 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/ml/bridges.py +394 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/ml/calibration.py +402 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/ml/compare.py +280 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/ml/metrics.py +932 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/ml/neural.py +718 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/ml/split.py +718 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/ml/survival.py +470 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/ml/tuning.py +363 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/ml/uncertainty.py +707 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/ml/validation.py +886 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/model_comparison.py +104 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/multinomial.py +344 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/negative_binomial.py +404 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/ordinal.py +799 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/panel/__init__.py +30 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/panel_ordinal.py +622 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/plotting.py +96 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/poisson.py +375 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/postestimation.py +170 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/sample_selection.py +294 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/sequential_logit.py +332 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/simulation.py +430 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/small_sample.py +11 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/tobit.py +229 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/truncated_regression.py +218 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/weibull_duration.py +374 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit/zero_inflated_poisson.py +905 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit.egg-info/PKG-INFO +1366 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit.egg-info/SOURCES.txt +188 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit.egg-info/dependency_links.txt +1 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit.egg-info/requires.txt +34 -0
- limiteddepkit-0.1.0a1/src/limiteddepkit.egg-info/top_level.txt +1 -0
- limiteddepkit-0.1.0a1/tests/integration/test_outputhub.py +175 -0
- limiteddepkit-0.1.0a1/tests/test_api_surface.py +239 -0
- limiteddepkit-0.1.0a1/tests/test_binary_probit.py +112 -0
- limiteddepkit-0.1.0a1/tests/test_binary_response.py +185 -0
- limiteddepkit-0.1.0a1/tests/test_binary_stable_api.py +89 -0
- limiteddepkit-0.1.0a1/tests/test_category_order.py +220 -0
- limiteddepkit-0.1.0a1/tests/test_censored_quantile.py +91 -0
- limiteddepkit-0.1.0a1/tests/test_conditional_logit.py +135 -0
- limiteddepkit-0.1.0a1/tests/test_count_models.py +303 -0
- limiteddepkit-0.1.0a1/tests/test_discrete_time_duration.py +38 -0
- limiteddepkit-0.1.0a1/tests/test_duration_stable_api.py +410 -0
- limiteddepkit-0.1.0a1/tests/test_dynamic_fixed_effects_ordered_logit.py +269 -0
- limiteddepkit-0.1.0a1/tests/test_dynamic_ordered_logit.py +116 -0
- limiteddepkit-0.1.0a1/tests/test_ecosystem_contract.py +73 -0
- limiteddepkit-0.1.0a1/tests/test_exponential_duration.py +35 -0
- limiteddepkit-0.1.0a1/tests/test_firth_stable_api.py +136 -0
- limiteddepkit-0.1.0a1/tests/test_fixed_effects_ordered_logit.py +182 -0
- limiteddepkit-0.1.0a1/tests/test_fixed_effects_ordered_probit.py +197 -0
- limiteddepkit-0.1.0a1/tests/test_gamma_duration.py +70 -0
- limiteddepkit-0.1.0a1/tests/test_generalized_ordered_logit.py +285 -0
- limiteddepkit-0.1.0a1/tests/test_hurdle_poisson.py +142 -0
- limiteddepkit-0.1.0a1/tests/test_interval_regression.py +212 -0
- limiteddepkit-0.1.0a1/tests/test_ml_bridges.py +231 -0
- limiteddepkit-0.1.0a1/tests/test_ml_calibration.py +166 -0
- limiteddepkit-0.1.0a1/tests/test_ml_estimators_integration.py +418 -0
- limiteddepkit-0.1.0a1/tests/test_ml_metrics.py +454 -0
- limiteddepkit-0.1.0a1/tests/test_ml_neural.py +290 -0
- limiteddepkit-0.1.0a1/tests/test_ml_split.py +259 -0
- limiteddepkit-0.1.0a1/tests/test_ml_survival.py +226 -0
- limiteddepkit-0.1.0a1/tests/test_ml_tuning.py +187 -0
- limiteddepkit-0.1.0a1/tests/test_ml_uncertainty.py +329 -0
- limiteddepkit-0.1.0a1/tests/test_ml_validation.py +713 -0
- limiteddepkit-0.1.0a1/tests/test_multinomial_logit.py +113 -0
- limiteddepkit-0.1.0a1/tests/test_negative_binomial.py +26 -0
- limiteddepkit-0.1.0a1/tests/test_ordered_logit.py +270 -0
- limiteddepkit-0.1.0a1/tests/test_ordinal_plotting.py +106 -0
- limiteddepkit-0.1.0a1/tests/test_poisson.py +18 -0
- limiteddepkit-0.1.0a1/tests/test_r_parity_harness.py +272 -0
- limiteddepkit-0.1.0a1/tests/test_random_effects_ordered_logit.py +171 -0
- limiteddepkit-0.1.0a1/tests/test_random_effects_ordered_probit.py +188 -0
- limiteddepkit-0.1.0a1/tests/test_release_metadata.py +89 -0
- limiteddepkit-0.1.0a1/tests/test_sample_selection.py +44 -0
- limiteddepkit-0.1.0a1/tests/test_sequential_logit.py +109 -0
- limiteddepkit-0.1.0a1/tests/test_small_sample_estimators.py +214 -0
- limiteddepkit-0.1.0a1/tests/test_stata_parity_harness.py +669 -0
- limiteddepkit-0.1.0a1/tests/test_stata_parity_preparation_gates.py +146 -0
- limiteddepkit-0.1.0a1/tests/test_stata_preparation_security.py +71 -0
- limiteddepkit-0.1.0a1/tests/test_stata_stale_evidence_guard.py +125 -0
- limiteddepkit-0.1.0a1/tests/test_tobit.py +179 -0
- limiteddepkit-0.1.0a1/tests/test_truncated_regression.py +150 -0
- limiteddepkit-0.1.0a1/tests/test_weibull_duration.py +36 -0
- limiteddepkit-0.1.0a1/tests/test_zero_inflated_poisson.py +152 -0
- limiteddepkit-0.1.0a1/tests/validation/test_binary_response_statsmodels.py +70 -0
- limiteddepkit-0.1.0a1/tests/validation/test_censored_quantile_statsmodels.py +30 -0
- limiteddepkit-0.1.0a1/tests/validation/test_censoring_statsmodels.py +28 -0
- limiteddepkit-0.1.0a1/tests/validation/test_count_foundations_statsmodels.py +239 -0
- limiteddepkit-0.1.0a1/tests/validation/test_discrete_time_duration_statsmodels.py +47 -0
- limiteddepkit-0.1.0a1/tests/validation/test_dynamic_fixed_effects_ordered_logit_recovery.py +55 -0
- limiteddepkit-0.1.0a1/tests/validation/test_dynamic_fixed_effects_ordered_logit_statsmodels.py +79 -0
- limiteddepkit-0.1.0a1/tests/validation/test_dynamic_ordered_logit_numerics.py +116 -0
- limiteddepkit-0.1.0a1/tests/validation/test_dynamic_ordered_logit_recovery.py +109 -0
- limiteddepkit-0.1.0a1/tests/validation/test_experimental_choice_models_statsmodels.py +121 -0
- limiteddepkit-0.1.0a1/tests/validation/test_exponential_duration_statsmodels.py +42 -0
- limiteddepkit-0.1.0a1/tests/validation/test_firth_reference.py +34 -0
- limiteddepkit-0.1.0a1/tests/validation/test_fixed_effects_ordered_logit_statsmodels.py +53 -0
- limiteddepkit-0.1.0a1/tests/validation/test_fixed_effects_ordered_probit_statsmodels.py +54 -0
- limiteddepkit-0.1.0a1/tests/validation/test_flexible_ordinal_recovery.py +52 -0
- limiteddepkit-0.1.0a1/tests/validation/test_gamma_duration_scipy.py +46 -0
- limiteddepkit-0.1.0a1/tests/validation/test_ml_sklearn.py +523 -0
- limiteddepkit-0.1.0a1/tests/validation/test_negative_binomial_statsmodels.py +45 -0
- limiteddepkit-0.1.0a1/tests/validation/test_ordered_logit_statsmodels.py +73 -0
- limiteddepkit-0.1.0a1/tests/validation/test_poisson_statsmodels.py +47 -0
- limiteddepkit-0.1.0a1/tests/validation/test_random_effects_ordered_logit_numerics.py +103 -0
- limiteddepkit-0.1.0a1/tests/validation/test_random_effects_ordered_logit_recovery.py +81 -0
- limiteddepkit-0.1.0a1/tests/validation/test_random_effects_ordered_probit_recovery.py +75 -0
- limiteddepkit-0.1.0a1/tests/validation/test_sample_selection_recovery.py +65 -0
- limiteddepkit-0.1.0a1/tests/validation/test_two_part_poisson_statsmodels.py +360 -0
- limiteddepkit-0.1.0a1/tests/validation/test_weibull_duration_scipy.py +45 -0
- limiteddepkit-0.1.0a1/validation/PARITY_EVIDENCE.md +146 -0
- limiteddepkit-0.1.0a1/validation/promoted/README.md +178 -0
- limiteddepkit-0.1.0a1/validation/promoted/STATA.md +67 -0
- limiteddepkit-0.1.0a1/validation/promoted/compare_parity.py +779 -0
- limiteddepkit-0.1.0a1/validation/promoted/compare_stata.py +1323 -0
- limiteddepkit-0.1.0a1/validation/promoted/limiteddepkit_real_data.do +556 -0
- limiteddepkit-0.1.0a1/validation/promoted/prepare_real_data.py +1225 -0
- limiteddepkit-0.1.0a1/validation/promoted/run_parity.R +816 -0
- limiteddepkit-0.1.0a1/validation/r/README.md +304 -0
- limiteddepkit-0.1.0a1/validation/r/compare_parity.py +674 -0
- limiteddepkit-0.1.0a1/validation/r/flexible_models.R +519 -0
- limiteddepkit-0.1.0a1/validation/r/panel_models.R +452 -0
- limiteddepkit-0.1.0a1/validation/r/run_parity.R +665 -0
- limiteddepkit-0.1.0a1/validation/r/setup_dependencies.ps1 +89 -0
- limiteddepkit-0.1.0a1/validation/stata/README.md +591 -0
- limiteddepkit-0.1.0a1/validation/stata/compare_parity.py +1235 -0
- limiteddepkit-0.1.0a1/validation/stata/download_real_data.ps1 +57 -0
- limiteddepkit-0.1.0a1/validation/stata/limiteddepkit_parity.do +259 -0
- limiteddepkit-0.1.0a1/validation/stata/limiteddepkit_real_data.do +274 -0
- limiteddepkit-0.1.0a1/validation/stata/prepare_parity.py +645 -0
- limiteddepkit-0.1.0a1/validation/stata/prepare_real_data.py +852 -0
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file. The
|
|
4
|
+
format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and
|
|
5
|
+
the project intends to use [Semantic Versioning](https://semver.org/) after its
|
|
6
|
+
pre-release phase.
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- Stable parametric duration family at the package root and
|
|
13
|
+
`limiteddepkit.duration`: explicit geometric discrete duration plus
|
|
14
|
+
Exponential, Weibull, and Gamma likelihoods with right censoring, delayed
|
|
15
|
+
entry, integer-frequency weights, observed/robust/cluster covariance,
|
|
16
|
+
schema-safe survival/hazard/cumulative-hazard/quantile prediction, and
|
|
17
|
+
temporary experimental compatibility aliases.
|
|
18
|
+
- Stable BUC `FixedEffectsOrderedLogit` with exact conditional-likelihood
|
|
19
|
+
construction, entity-cluster composite covariance, Statsmodels parity, and
|
|
20
|
+
an explicit slopes-only identification contract. Added experimental
|
|
21
|
+
split-panel-jackknife `FixedEffectsOrderedProbit` with balanced-panel guards,
|
|
22
|
+
entity-bootstrap inference, known-entity diagnostic probabilities, and
|
|
23
|
+
unconditional likelihood parity.
|
|
24
|
+
- Experimental `DynamicFixedEffectsOrderedLogit` implementing the restricted
|
|
25
|
+
four-outcome-history MRV conditional composite likelihood with exact discrete
|
|
26
|
+
stayers, a known state cutoff, threshold normalization, entity-clustered
|
|
27
|
+
Godambe inference, path-odds/recovery tests, and constructed-sample Statsmodels
|
|
28
|
+
parity. It remains outside the stable root API and does not report category
|
|
29
|
+
probabilities.
|
|
30
|
+
- Stable `FirthBinaryLogit` at the package root and in `limiteddepkit.small_sample`,
|
|
31
|
+
with constrained profile penalized-likelihood confidence intervals, direct profile
|
|
32
|
+
diagnostics, exact separated-table checks, and independent `firthmodels` coefficient,
|
|
33
|
+
objective, and profile-bound parity. Experimental imports remain compatibility aliases;
|
|
34
|
+
ridge Binary/Ordered Logit remain provisional.
|
|
35
|
+
- Stable `limiteddepkit.count` family and package-root exports for exposure/offset
|
|
36
|
+
Poisson and NB2. The promoted contract adds exact integer-frequency and analytic
|
|
37
|
+
estimating-equation weights, observed-information/HC0/HC1/cluster covariance,
|
|
38
|
+
schema-safe indexed prediction, common fit diagnostics and information criteria,
|
|
39
|
+
Statsmodels parity, and temporary `limiteddepkit.experimental` compatibility aliases.
|
|
40
|
+
Zero-inflated and hurdle Poisson remain experimental.
|
|
41
|
+
- Stable `limiteddepkit.censoring` family and package-root exports for Gaussian Tobit,
|
|
42
|
+
truncated regression, and interval regression. The promoted contract adds left/right
|
|
43
|
+
Tobit and truncation rules, observed-information/robust/cluster covariance, common
|
|
44
|
+
latent-distribution post-estimation, reflection and cross-likelihood identities, and
|
|
45
|
+
temporary `limiteddepkit.experimental` compatibility aliases.
|
|
46
|
+
- Stable `RandomEffectsOrderedProbit` with the existing non-adaptive GHQ,
|
|
47
|
+
observed-information, population/conditional prediction, posterior random-effect,
|
|
48
|
+
posterior-prediction, simulation, and Output Hub contracts. Its conditional kernel is
|
|
49
|
+
checked against Statsmodels and its marginal probabilities against the exact normal-
|
|
50
|
+
convolution identity.
|
|
51
|
+
- Experimental `limiteddepkit.ml` workflow with dependency-light iid,
|
|
52
|
+
stratified, complete-group, and forward-panel splitters; binary, multinomial,
|
|
53
|
+
ordinal, grouped-choice, count, continuous, quantile, duration, and selection
|
|
54
|
+
scores; out-of-fold predictions; and validity-gated model comparison.
|
|
55
|
+
- Limited-data validation extensions: stratified complete-group splitting with an exact
|
|
56
|
+
MILP coverage fallback after greedy balancing, repeated splitters, fold-local
|
|
57
|
+
preprocessing, pooled/weighted OOF aggregation, paired fold differences,
|
|
58
|
+
observation/entity bootstrap intervals, and one-standard-error selection.
|
|
59
|
+
- Leakage-safe nested cross-validation for estimator and ridge-penalty selection.
|
|
60
|
+
- Held-out binary/ordinal calibration diagnostics with reliability tables, calibration
|
|
61
|
+
intercept/slope, and an explicit grouped Brier decomposition remainder.
|
|
62
|
+
- Training-fold reverse-Kaplan-Meier censoring estimates with IPCW concordance,
|
|
63
|
+
time-dependent and integrated Brier scores, and cumulative/dynamic AUC.
|
|
64
|
+
- Lazy optional bridges for scikit-learn, Statsmodels, and callback-driven external
|
|
65
|
+
estimators with explicit prediction semantics and no invented validity diagnostics.
|
|
66
|
+
- Experimental ridge Binary/Ordered Logit estimators, with shrinkage and aligned
|
|
67
|
+
Statsmodels/scikit-learn numerical evidence.
|
|
68
|
+
- Optional `[neural]` `ResidualBinaryMLP` advanced prediction challenger with an iid-only
|
|
69
|
+
internal validation split, conservative completion/stabilization diagnostics,
|
|
70
|
+
temperature scaling, and Monte Carlo dropout uncertainty output. All 21 neural tests
|
|
71
|
+
passed in an isolated Python 3.13/PyTorch 2.13.0 runtime, and an optional neural CI job
|
|
72
|
+
now maintains the path; no numerical-parity or inferential claim is made.
|
|
73
|
+
- Optional scikit-learn validation gates for matching prediction metrics,
|
|
74
|
+
deterministic splitter contracts, and end-to-end held-out Binary Logit
|
|
75
|
+
probabilities against Statsmodels and unpenalized scikit-learn.
|
|
76
|
+
- Pinned R 4.5.1 parity harness covering the eight previously certified binary and ordinal
|
|
77
|
+
families on both controlled and public-data fixtures, with canonical
|
|
78
|
+
covariance, fit, probability, metadata, report, and certificate exports.
|
|
79
|
+
- Committed cross-software evidence index recording the four completed parity
|
|
80
|
+
outcomes and exact manifest, report, and certificate digests.
|
|
81
|
+
- Separate promoted-family public-data application harness covering 12 stable
|
|
82
|
+
post-expansion fits. The 15 July 2026 Python/R run passed all 120/120
|
|
83
|
+
registered checks using seven industrial-package fits, three independent
|
|
84
|
+
likelihood or adjusted-score implementations, and two likelihood or
|
|
85
|
+
pseudo-sample identities. The applications use empirical observations except
|
|
86
|
+
for the official fictional `womenwage2` interval-regression software fixture;
|
|
87
|
+
the manual Stata comparison passed 140/140 required checks with an explicit
|
|
88
|
+
Gamma skip. This is application evidence,
|
|
89
|
+
not an extension of the older controlled certification or a universal
|
|
90
|
+
equality claim.
|
|
91
|
+
|
|
92
|
+
### Changed
|
|
93
|
+
|
|
94
|
+
- Documented explicit new-entity, known-entity future, and conditional panel
|
|
95
|
+
prediction targets, including chronology and dynamic-lag leakage guards.
|
|
96
|
+
- Balanced stratified class remainders across folds so both total fold sizes and
|
|
97
|
+
within-class counts differ by at most one.
|
|
98
|
+
- Replaced the common Binary Logit and Poisson optimization paths with analytical,
|
|
99
|
+
damped Newton/IRLS steps plus BFGS fallbacks; finite-MLE separation safeguards and
|
|
100
|
+
reference-package parameter parity remain enforced.
|
|
101
|
+
- Clarified that stable Firth and experimental ridge estimators require `n > p` and full column
|
|
102
|
+
rank, and that native estimators require dense transformer output; sparse transformed
|
|
103
|
+
designs remain available only to downstream estimators that explicitly accept them.
|
|
104
|
+
- Completed both maintained Stata 17 parity tracks with `gologit2` 3.2.8; all
|
|
105
|
+
eight families pass all declared checks on the controlled and real-data
|
|
106
|
+
suites.
|
|
107
|
+
- Added Stata random-effect variance-to-standard-deviation canonicalization and
|
|
108
|
+
tightened pooled ordered-model reference optimization.
|
|
109
|
+
|
|
110
|
+
## [0.1.0a1] - Release pending
|
|
111
|
+
|
|
112
|
+
### Added
|
|
113
|
+
|
|
114
|
+
- Ordinal-model alpha covering pooled, flexible-slope, random-effects, and
|
|
115
|
+
dynamic random-effects ordinal estimators.
|
|
116
|
+
- Stable binary Logit and Probit with observed-information inference,
|
|
117
|
+
prediction, margins, marginal effects, and Statsmodels parity.
|
|
118
|
+
- Shared prediction, inference, margins, plotting, simulation, and optional
|
|
119
|
+
Output Hub workflows for supported ordinal results.
|
|
120
|
+
- Maintained numerical-reference, recovery, quadrature-convergence, and
|
|
121
|
+
invariance validation tests.
|
|
122
|
+
- Deterministic manual Stata parity harness for the stable binary and ordinal
|
|
123
|
+
estimators, including raw covariance and prediction exports.
|
|
124
|
+
- Separate hash-pinned Stata Press real-data application harness, with
|
|
125
|
+
provenance-preserving downloads, full fit/covariance exports, and
|
|
126
|
+
machine-readable comparison evidence.
|
|
127
|
+
- Independent, hash-pinned R parity workflows for the same eight models and
|
|
128
|
+
datasets.
|
|
129
|
+
- Experimental namespace for provisional non-ordinal model families.
|
|
130
|
+
- Experimental fixed-boundary censored quantile regression with multi-start
|
|
131
|
+
Powell check-loss fitting and opt-in pairs-bootstrap inference.
|
|
132
|
+
- Initial project governance, security, citation, and continuous-integration
|
|
133
|
+
files.
|
|
134
|
+
|
|
135
|
+
### Changed
|
|
136
|
+
|
|
137
|
+
- Declared Python 3.10 as the minimum supported version.
|
|
138
|
+
- Limited the supported `0.1` alpha contract to the validated binary and
|
|
139
|
+
ordinal stacks.
|
|
140
|
+
- Corrected likelihood, inference, identification, and prediction
|
|
141
|
+
contracts across binary, choice, count, censoring, selection, and duration
|
|
142
|
+
families, with independent or exact-manual validation tests.
|
|
143
|
+
|
|
144
|
+
### Removed
|
|
145
|
+
|
|
146
|
+
- Other provisional estimators from the stable top-level API.
|
|
147
|
+
- Linear 2SLS `TreatmentEffect` from the installed distribution because it is
|
|
148
|
+
outside the limited-dependent-variable scope.
|
|
149
|
+
- Iid `GaussianMixtureRegression` and the misleading historical
|
|
150
|
+
`SwitchingRegression` alias from the installed distribution; their source is
|
|
151
|
+
staged outside `src/` for migration to a mixture/regime package.
|
|
152
|
+
|
|
153
|
+
This alpha is frozen locally; external repository and PyPI publication remain
|
|
154
|
+
separate release operations.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
cff-version: 1.2.0
|
|
2
|
+
message: "If you use limiteddepkit in research, please cite the software and the exact version used."
|
|
3
|
+
type: software
|
|
4
|
+
title: "limiteddepkit: Limited-dependent-variable models for Python"
|
|
5
|
+
abstract: >-
|
|
6
|
+
A developing Python toolkit for limited-dependent-variable econometrics,
|
|
7
|
+
with stable binary, ordinal, Gaussian censoring, foundational count,
|
|
8
|
+
parametric duration, and selected panel estimators in its alpha release.
|
|
9
|
+
authors:
|
|
10
|
+
- family-names: Akanbi
|
|
11
|
+
given-names: "Oluwajuwon Mayomi"
|
|
12
|
+
version: 0.1.0a1
|
|
13
|
+
license: MIT
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Contributing to limiteddepkit
|
|
2
|
+
|
|
3
|
+
Thank you for helping improve `limiteddepkit`. The package is in an alpha phase with
|
|
4
|
+
binary, ordinal, Gaussian censoring, foundational count, and parametric duration cores,
|
|
5
|
+
so correctness evidence and explicit scope are more important than adding model names
|
|
6
|
+
quickly.
|
|
7
|
+
|
|
8
|
+
## Development setup
|
|
9
|
+
|
|
10
|
+
Use Python 3.10 or newer and install the development dependencies from the
|
|
11
|
+
repository root:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
python -m pip install -e ".[dev]"
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Run the standard checks before submitting a change:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
python -m ruff check .
|
|
21
|
+
python -m pytest
|
|
22
|
+
python -m build
|
|
23
|
+
python -m twine check --strict dist/*
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Keep changes focused. Do not reformat or rewrite unrelated user work, and add
|
|
27
|
+
or update documentation whenever behavior or the public API changes.
|
|
28
|
+
|
|
29
|
+
## Econometric changes
|
|
30
|
+
|
|
31
|
+
A new estimator is not ready for the supported API based on smoke tests alone.
|
|
32
|
+
A promotion proposal should include:
|
|
33
|
+
|
|
34
|
+
1. the formal model, likelihood, parameterization, and identification
|
|
35
|
+
conditions;
|
|
36
|
+
2. input validation and tests for expected failure modes;
|
|
37
|
+
3. result-contract parity for prediction and inference where meaningful;
|
|
38
|
+
4. comparison with an independent maintained implementation or published
|
|
39
|
+
benchmark;
|
|
40
|
+
5. deterministic simulation-recovery evidence; and
|
|
41
|
+
6. numerical-stability checks, including boundaries and poorly conditioned
|
|
42
|
+
designs.
|
|
43
|
+
|
|
44
|
+
New or materially unverified model families should begin in
|
|
45
|
+
`limiteddepkit.experimental`. Experimental status must be visible in imports
|
|
46
|
+
and documentation. Passing a focused numerical check may be reported as
|
|
47
|
+
evidence, but must not be described as stable promotion or broader certification.
|
|
48
|
+
|
|
49
|
+
For early design questions, parity reports, and adoption notes, use GitHub
|
|
50
|
+
Discussions before opening a narrow implementation issue. The public-development
|
|
51
|
+
expectations are summarized in [docs/OPEN_DEVELOPMENT.md](docs/OPEN_DEVELOPMENT.md).
|
|
52
|
+
|
|
53
|
+
## Tests and style
|
|
54
|
+
|
|
55
|
+
- Put fast behavioral tests under `tests/`.
|
|
56
|
+
- Mark external-reference checks with `@pytest.mark.validation`.
|
|
57
|
+
- Mark recovery or Monte Carlo checks with `@pytest.mark.simulation`.
|
|
58
|
+
- Use deterministic random seeds and explain statistical tolerances.
|
|
59
|
+
- Keep public behavior compatible with Python 3.10.
|
|
60
|
+
- Follow the configured Ruff rules and 100-character line length.
|
|
61
|
+
|
|
62
|
+
## Reporting bugs
|
|
63
|
+
|
|
64
|
+
Include a minimal reproducer, Python and dependency versions, the observed and
|
|
65
|
+
expected behavior, and any warnings or convergence information. Do not include
|
|
66
|
+
confidential data. For vulnerabilities, follow [SECURITY.md](SECURITY.md)
|
|
67
|
+
instead of opening a public issue.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Oluwajuwon Mayomi Akanbi
|
|
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,17 @@
|
|
|
1
|
+
include CHANGELOG.md
|
|
2
|
+
include CITATION.cff
|
|
3
|
+
include CONTRIBUTING.md
|
|
4
|
+
include LICENSE
|
|
5
|
+
include README.md
|
|
6
|
+
include RELEASING.md
|
|
7
|
+
include SECURITY.md
|
|
8
|
+
include validation/PARITY_EVIDENCE.md
|
|
9
|
+
recursive-include docs *.md
|
|
10
|
+
recursive-include tests *.py
|
|
11
|
+
recursive-include validation/stata *.do *.md *.ps1 *.py
|
|
12
|
+
prune validation/stata/work
|
|
13
|
+
recursive-include validation/r *.R *.md *.ps1 *.py
|
|
14
|
+
prune validation/r/work
|
|
15
|
+
recursive-include validation/promoted *.R *.do *.md *.py
|
|
16
|
+
prune validation/promoted/work
|
|
17
|
+
prune _out_of_scope
|