pystatistics 4.6.3__tar.gz → 4.6.4__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.
- pystatistics-4.6.4/.release/UNRELEASED.md +379 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/CHANGELOG.md +176 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/PKG-INFO +38 -1
- {pystatistics-4.6.3 → pystatistics-4.6.4}/README.md +37 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pyproject.toml +1 -1
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/__init__.py +1 -1
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/__init__.py +1 -1
- pystatistics-4.6.4/pystatistics/timeseries/_adf_mackinnon.py +171 -0
- pystatistics-4.6.4/pystatistics/timeseries/_arima_factored.py +484 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_arima_fit.py +226 -132
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_arima_forecast.py +80 -120
- pystatistics-4.6.4/pystatistics/timeseries/_arima_init.py +110 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_arima_kalman.py +250 -148
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_arima_likelihood.py +27 -225
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_arima_order.py +239 -84
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_arima_solution.py +15 -4
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_differencing.py +13 -2
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_stationarity.py +73 -154
- pystatistics-4.6.4/tests/fixtures/adf_statsmodels_reference.json +320 -0
- pystatistics-4.6.4/tests/fixtures/arima_ic_r_reference.json +98 -0
- pystatistics-4.6.4/tests/fixtures/arima_kalman_r_reference.json +291 -0
- pystatistics-4.6.4/tests/fixtures/generate_adf_statsmodels_reference.py +51 -0
- pystatistics-4.6.4/tests/fixtures/generate_arima_ic_r_reference.R +75 -0
- pystatistics-4.6.4/tests/fixtures/generate_arima_kalman_r_reference.R +115 -0
- pystatistics-4.6.4/tests/fixtures/generate_stationarity_r_reference.R +69 -0
- pystatistics-4.6.4/tests/fixtures/stationarity_r_reference.json +76 -0
- pystatistics-4.6.4/tests/timeseries/test_arima_ic.py +267 -0
- pystatistics-4.6.4/tests/timeseries/test_arima_kalman_r_parity.py +602 -0
- pystatistics-4.6.4/tests/timeseries/test_stationarity_mackinnon.py +245 -0
- pystatistics-4.6.3/.release/UNRELEASED.md +0 -69
- pystatistics-4.6.3/pystatistics/timeseries/_arima_factored.py +0 -181
- {pystatistics-4.6.3 → pystatistics-4.6.4}/.github/workflows/publish.yml +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/.github/workflows/trigger-docs-rebuild.yml +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/.gitignore +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/.release/CHECKLIST.md +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/.release/release.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/LICENSE +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/benchmarks/mvnmle_bench.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/benchmarks/mvnmle_gpu_per_eval.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/DESIGN.md +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/GPU_NOTES.md +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/Makefile +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/ROADMAP.md +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/_static/custom.css +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/anova.rst +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/conf.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/core.rst +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/descriptive.rst +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/gam.rst +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/hypothesis.rst +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/index.rst +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/mixed.rst +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/montecarlo.rst +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/multinomial.rst +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/multivariate.rst +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/mvnmle.rst +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/ordinal.rst +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/regression.rst +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/survival.rst +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/timeseries.rst +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/CONVENTIONS.md +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/anova/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/anova/_common.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/anova/_contrasts.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/anova/_levene.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/anova/_posthoc.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/anova/_repeated.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/anova/_ss.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/anova/design.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/anova/solution.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/anova/solvers.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/capabilities.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/compute/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/compute/backend.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/compute/device.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/compute/linalg/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/compute/linalg/batched.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/compute/linalg/cholesky.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/compute/linalg/determinant.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/compute/linalg/qr.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/compute/linalg/solve.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/compute/linalg/svd.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/compute/linalg/triangular.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/compute/optimization/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/compute/optimization/convergence.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/compute/precision.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/compute/timing.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/compute/tolerances.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/compute/torch_interop.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/datasource.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/encoding.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/exceptions.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/protocols.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/result.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/validation.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/descriptive/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/descriptive/_missing.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/descriptive/_quantile_types.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/descriptive/backends/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/descriptive/backends/cpu.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/descriptive/backends/gpu.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/descriptive/design.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/descriptive/solution.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/descriptive/solvers.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/gam/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/gam/_basis.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/gam/_basis_common.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/gam/_basis_cr.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/gam/_basis_tp.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/gam/_common.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/gam/_constraints.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/gam/_criteria.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/gam/_edf.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/gam/_gam.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/gam/_gradient.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/gam/_pirls.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/gam/_smooth.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/gam/_smooth_test.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/gam/solution.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/hypothesis/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/hypothesis/_common.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/hypothesis/_design_factories.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/hypothesis/_p_adjust.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/hypothesis/backends/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/hypothesis/backends/_chisq_test.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/hypothesis/backends/_fisher_test.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/hypothesis/backends/_ks_test.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/hypothesis/backends/_prop_test.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/hypothesis/backends/_t_test.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/hypothesis/backends/_var_test.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/hypothesis/backends/_wilcox_test.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/hypothesis/backends/cpu.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/hypothesis/backends/gpu.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/hypothesis/design.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/hypothesis/solution.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/hypothesis/solvers.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/_chain.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/_encode.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/_rng.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/_visit.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/backends/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/backends/_gpu_encode.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/backends/_gpu_linreg.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/backends/_gpu_logreg.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/backends/_gpu_methods.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/backends/_gpu_polr.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/backends/_gpu_polyreg.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/backends/_gpu_spd.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/backends/cpu.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/backends/gpu.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/datasets.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/design.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/methods/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/methods/_draw.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/methods/_linreg.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/methods/base.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/methods/logreg.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/methods/norm.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/methods/pmm.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/methods/polr.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/methods/polyreg.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/methods/registry.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/pooling.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/solution.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/solvers.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mixed/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mixed/_common.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mixed/_deviance.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mixed/_glmm_optimizer.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mixed/_glmm_pirls.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mixed/_grm_cpu.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mixed/_optimizer.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mixed/_pls.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mixed/_pls_structured.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mixed/_random_effects.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mixed/_satterthwaite.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mixed/_struct_batched.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mixed/_struct_sparse.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mixed/backends/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mixed/backends/grm_gpu.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mixed/design.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mixed/grm.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mixed/grm_solution.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mixed/solution.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mixed/solvers.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/montecarlo/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/montecarlo/_ci.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/montecarlo/_common.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/montecarlo/_influence.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/montecarlo/backends/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/montecarlo/backends/cpu.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/montecarlo/backends/gpu.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/montecarlo/design.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/montecarlo/solution.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/montecarlo/solvers.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/multinomial/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/multinomial/_common.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/multinomial/_likelihood.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/multinomial/_solver.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/multinomial/backends/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/multinomial/backends/gpu_likelihood.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/multinomial/solution.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/multivariate/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/multivariate/_common.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/multivariate/_factor.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/multivariate/_pca.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/multivariate/_rotation.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/multivariate/backends/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/multivariate/backends/gpu_pca.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/multivariate/backends/gpu_pca_randomized.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/_degeneracy.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/_monotone.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/_objectives/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/_objectives/_batched_cholesky.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/_objectives/base.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/_objectives/cpu.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/_objectives/gpu_fp32.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/_objectives/gpu_fp64.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/_objectives/parameterizations.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/_utils.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/backends/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/backends/_direct.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/backends/_em_batched.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/backends/_em_batched_np.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/backends/_em_batched_patterns.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/backends/_em_batched_torch.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/backends/_optimize.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/backends/_squarem.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/backends/cpu.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/backends/em.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/backends/gpu.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/datasets.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/design.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/mcar_test.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/patterns.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/solution.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/solvers.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/ordinal/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/ordinal/_common.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/ordinal/_information.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/ordinal/_likelihood.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/ordinal/_solver.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/ordinal/backends/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/ordinal/backends/gpu_likelihood.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/ordinal/solution.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/py.typed +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/regression/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/regression/_formatting.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/regression/_glm.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/regression/_inputs.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/regression/_linear.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/regression/_nb_theta.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/regression/_penalty.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/regression/backends/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/regression/backends/_irls_step.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/regression/backends/cpu.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/regression/backends/cpu_glm.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/regression/backends/gpu.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/regression/backends/gpu_glm.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/regression/design.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/regression/families.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/regression/solution.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/regression/solvers.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/regression/terms.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/survival/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/survival/_common.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/survival/_cox.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/survival/_discrete.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/survival/_km.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/survival/_logrank.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/survival/backends/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/survival/backends/cpu.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/survival/backends/gpu.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/survival/design.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/survival/solution.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/survival/solvers.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_acf.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_arima_batch.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_common.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_decomposition.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_ets_fit.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_ets_forecast.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_ets_models.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_ets_result.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_ets_select.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_loess.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_stl.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_stl_core.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_stl_robust.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_whittle.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/backends/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/backends/whittle_batch_gpu.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/backends/whittle_gpu.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/anova/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/anova/conftest.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/anova/test_contrasts.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/anova/test_design.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/anova/test_factorial.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/anova/test_levene.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/anova/test_oneway.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/anova/test_posthoc.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/anova/test_r_validation.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/anova/test_repeated_measures.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/benchmark_gpu.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/conftest.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/core/test_backend.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/core/test_datasource.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/core/test_exceptions.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/core/test_qr_solve.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/core/test_repr_html.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/core/test_result.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/core/test_torch_interop.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/core/test_validation.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/descriptive/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/descriptive/conftest.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/descriptive/test_backend_convention.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/descriptive/test_cor.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/descriptive/test_cov.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/descriptive/test_describe.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/descriptive/test_gpu.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/descriptive/test_missing.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/descriptive/test_moments.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/descriptive/test_quantile.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/descriptive/test_r_validation.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_ancova_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_ancova_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_bonferroni_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_bonferroni_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_eta_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_eta_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_levene_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_levene_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_oneway_balanced_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_oneway_balanced_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_oneway_unbalanced_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_oneway_unbalanced_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_rm_mixed_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_rm_mixed_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_rm_within_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_rm_within_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_tukey_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_tukey_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_twoway_balanced_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_twoway_balanced_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_twoway_unbalanced_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_twoway_unbalanced_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/basic_100x3.csv +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/basic_100x3_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/basic_100x3_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/collinear_almost.csv +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/collinear_almost_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/collinear_almost_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_basic_100x5.csv +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_basic_100x5_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_basic_100x5_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_constant_column.csv +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_constant_column_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_constant_column_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_extreme_values.csv +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_extreme_values_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_extreme_values_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_large_1000x10.csv +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_large_1000x10_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_large_1000x10_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_nan_columnwise.csv +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_nan_columnwise_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_nan_columnwise_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_nan_scattered.csv +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_nan_scattered_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_nan_scattered_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_negative_correlation.csv +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_negative_correlation_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_negative_correlation_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_perfect_correlation.csv +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_perfect_correlation_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_perfect_correlation_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_single_column.csv +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_single_column_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_single_column_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_ties.csv +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_ties_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_ties_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/different_scales.csv +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/different_scales_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/different_scales_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/ets_py_params.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/ets_r_reference.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/generate_anova_fixtures.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/generate_descriptive_fixtures.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/generate_ets_py_params.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/generate_ets_r_reference.R +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/generate_fixtures.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/generate_glm_fixtures.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/generate_hypothesis_fixtures.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/generate_mixed_fixtures.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/generate_montecarlo_fixtures.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/generate_nb_autotheta_fixtures.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/generate_stl_r_reference.R +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/generate_survival_fixtures.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/generate_weights_offset_fixtures.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_binomial_balanced.csv +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_binomial_balanced_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_binomial_balanced_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_binomial_basic.csv +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_binomial_basic_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_binomial_basic_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_binomial_large.csv +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_binomial_large_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_binomial_large_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_binomial_separated.csv +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_binomial_separated_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_binomial_separated_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_gaussian_basic.csv +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_gaussian_basic_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_gaussian_basic_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_gaussian_large.csv +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_gaussian_large_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_gaussian_large_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_poisson_basic.csv +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_poisson_basic_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_poisson_basic_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_poisson_large_counts.csv +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_poisson_large_counts_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_poisson_large_counts_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_poisson_zeros.csv +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_poisson_zeros_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_poisson_zeros_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/high_noise.csv +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/high_noise_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/high_noise_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_chisq_2x2_yates_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_chisq_2x2_yates_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_chisq_3x3_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_chisq_3x3_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_chisq_gof_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_chisq_gof_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_chisq_gof_unequal_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_chisq_gof_unequal_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_fisher_2x2_less_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_fisher_2x2_less_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_fisher_2x2_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_fisher_2x2_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_fisher_3x3_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_fisher_3x3_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_ks_onesample_norm_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_ks_onesample_norm_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_ks_twosample_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_ks_twosample_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_prop_onesample_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_prop_onesample_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_prop_twosample_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_prop_twosample_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_t_onesample_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_t_onesample_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_t_paired_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_t_paired_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_t_pooled_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_t_pooled_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_t_welch_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_t_welch_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_var_basic_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_var_basic_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_wilcox_ranksum_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_wilcox_ranksum_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_wilcox_signed_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_wilcox_signed_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/ill_conditioned.csv +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/ill_conditioned_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/ill_conditioned_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/large_coeffs.csv +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/large_coeffs_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/large_coeffs_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mc_boot_ci_90_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mc_boot_ci_90_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mc_boot_ci_normal_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mc_boot_ci_normal_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mc_boot_ci_skewed_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mc_boot_ci_skewed_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mc_boot_mean_balanced_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mc_boot_mean_balanced_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mc_boot_mean_ordinary_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mc_boot_mean_ordinary_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mc_boot_median_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mc_boot_median_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mc_boot_variance_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mc_boot_variance_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mc_perm_greater_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mc_perm_greater_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mc_perm_not_significant_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mc_perm_not_significant_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mc_perm_significant_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mc_perm_significant_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mixed/glmm_binomial.csv +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mixed/glmm_poisson.csv +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mixed/lmm_crossed.csv +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mixed/lmm_intercept.csv +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mixed/lmm_ml.csv +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mixed/lmm_no_effect.csv +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mixed/lmm_slope.csv +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mixed/mixed_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mixed/mixed_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/nb_autotheta_cases.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/nb_autotheta_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/near_square.csv +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/near_square_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/near_square_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/no_intercept.csv +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/no_intercept_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/no_intercept_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/run_r_anova_validation.R +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/run_r_descriptive_validation.R +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/run_r_glm_validation.R +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/run_r_hypothesis_validation.R +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/run_r_mixed_validation.R +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/run_r_montecarlo_validation.R +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/run_r_nb_autotheta_validation.R +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/run_r_survival_validation.R +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/run_r_validation.R +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/run_r_weights_offset_validation.R +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/run_validation.sh +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/small_noise.csv +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/small_noise_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/small_noise_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/stl_r_reference.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_cox_breslow_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_cox_breslow_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_cox_single_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_cox_single_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_cox_ties_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_cox_ties_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_cox_two_cov_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_cox_two_cov_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_km_basic_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_km_basic_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_km_heavy_cens_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_km_heavy_cens_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_km_loglog_ci_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_km_loglog_ci_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_km_no_cens_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_km_no_cens_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_km_plain_ci_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_km_plain_ci_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_km_ties_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_km_ties_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_lr_peto_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_lr_peto_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_lr_three_group_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_lr_three_group_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_lr_two_group_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_lr_two_group_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/tall_skinny.csv +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/tall_skinny_meta.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/tall_skinny_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/validate_against_r.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/weights_offset_cases.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/weights_offset_r_results.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/gam/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/gam/test_gam.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/hypothesis/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/hypothesis/conftest.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/hypothesis/test_backend_convention.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/hypothesis/test_chisq_test.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/hypothesis/test_design_split.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/hypothesis/test_fisher_test.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/hypothesis/test_gpu.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/hypothesis/test_ks_test.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/hypothesis/test_p_adjust.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/hypothesis/test_prop_test.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/hypothesis/test_r_validation.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/hypothesis/test_t_test.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/hypothesis/test_var_test.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/hypothesis/test_wilcox_test.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/references/generate_categorical_fixtures.R +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/references/generate_mice_fixtures.R +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/references/mice_categorical_data.csv +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/references/mice_categorical_reference.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/references/mice_reference.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/references/mice_validation_complete.csv +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/references/mice_validation_data.csv +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/test_categorical.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/test_datasets.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/test_design.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/test_gpu.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/test_gpu_glm_separation.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/test_gpu_mps.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/test_gpu_polr_draw.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/test_gpu_polr_separation.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/test_methods.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/test_mice.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/test_polr_ridge_characterization.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/test_pooling.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/test_r_validation.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/test_r_validation_categorical.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/test_rng.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/test_visit.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mixed/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mixed/conftest.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mixed/test_compute_se.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mixed/test_conf_int.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mixed/test_glmm.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mixed/test_grm.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mixed/test_lmm_crossed.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mixed/test_lmm_extreme_ratio.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mixed/test_lmm_intercept.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mixed/test_lmm_nested.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mixed/test_lmm_slope.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mixed/test_pls.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mixed/test_r_validation.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mixed/test_random_effects.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mixed/test_satterthwaite.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mixed/test_singular.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mixed/test_structured.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/montecarlo/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/montecarlo/conftest.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/montecarlo/test_backend_convention.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/montecarlo/test_batched_solver.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/montecarlo/test_boot_ci.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/montecarlo/test_bootstrap.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/montecarlo/test_gpu.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/montecarlo/test_influence.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/montecarlo/test_permutation.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/montecarlo/test_r_validation.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/multinomial/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/multinomial/test_conf_int.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/multinomial/test_multinom.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/multivariate/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/multivariate/test_multivariate.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/references/apple_em_reference.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/references/apple_reference.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/references/generate_em_fixtures.R +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/references/little_mcar_apple.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/references/little_mcar_complete.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/references/little_mcar_extreme.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/references/little_mcar_missvals.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/references/little_mcar_simple_mcar.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/references/little_mcar_summary.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/references/missvals_em_reference.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/references/missvals_reference.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/references/small_test_reference.json +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/test_backend_routing.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/test_degeneracy.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/test_em.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/test_gpu.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/test_gpu_batched_equiv.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/test_gpu_unpack_equiv.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/test_mcar.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/test_mlest.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/test_monotone.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/test_no_silent_fallback.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/test_optimize.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/test_pattern_codes_large_p.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/test_squarem.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/ordinal/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/ordinal/test_conf_int.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/ordinal/test_information.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/ordinal/test_ordinal.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/benchmark.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/benchmark.r +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/conftest.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_conf_int.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_fit.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_gamma_nb.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_glm.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_glm_gpu.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_glm_r_validation.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_gpu_fp32_acceptance.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_gpu_mps_cg.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_gpu_se_ill_conditioned.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_ic_dispersion_r_match.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_irls_step.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_module_split.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_nb_autotheta_r_validation.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_r_validation.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_ridge.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_stress_gpu.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_terms.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_terms_gpu.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_weights_offset.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_weights_offset_gpu.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_weights_offset_r_validation.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/survival/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/survival/conftest.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/survival/test_conf_int.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/survival/test_coxph.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/survival/test_discrete_conf_int.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/survival/test_discrete_time.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/survival/test_gpu.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/survival/test_kaplan_meier.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/survival/test_logrank.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/survival/test_r_validation.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/survival/test_uniform_accessors_and_errors.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/survival/test_warnings.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/test_code_quality.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/timeseries/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/timeseries/test_acf_stationarity.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/timeseries/test_arima.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/timeseries/test_decomposition.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/timeseries/test_ets.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/timeseries/test_ets_selection.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/timeseries/test_loess.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/timeseries/test_stl_r_parity.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/timeseries/test_stl_robust.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/validation/README.md +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/validation/pyproject.toml +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/validation/pystatsval/__init__.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/validation/pystatsval/device.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/validation/pystatsval/estimates.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/validation/pystatsval/measure.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/validation/pystatsval/record.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/validation/pystatsval/rrunner.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/validation/pystatsval/serialize.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/validation/pystatsval/timing.py +0 -0
- {pystatistics-4.6.3 → pystatistics-4.6.4}/validation/tests/test_harness.py +0 -0
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
# Unreleased Changes
|
|
2
|
+
|
|
3
|
+
> This file tracks all changes since the last stable release.
|
|
4
|
+
> Updated by whoever makes a change, on whatever machine.
|
|
5
|
+
> Synced via git so all sessions (Mac, Linux, etc.) see the same state.
|
|
6
|
+
>
|
|
7
|
+
> When ready to release, run: `python .release/release.py --status`
|
|
8
|
+
> and follow the manual release flow in the script docstring.
|
|
9
|
+
|
|
10
|
+
## Changes
|
|
11
|
+
|
|
12
|
+
- **timeseries: silenced a benign numpy `RuntimeWarning` during ARIMA
|
|
13
|
+
optimization (no result change).** L-BFGS-B's finite-difference gradient
|
|
14
|
+
probes non-stationary/non-invertible parameters during its line search,
|
|
15
|
+
where the exact-ML objective intentionally returns a non-finite value to
|
|
16
|
+
steer the optimizer back; scipy's `numdiff` then computes `inf - inf` and
|
|
17
|
+
numpy prints `invalid value encountered in subtract`. Wrapped the ARIMA
|
|
18
|
+
optimizer's `minimize()` calls (`_optimize_arima` and
|
|
19
|
+
`optimize_arima_factored`) in `np.errstate(invalid="ignore",
|
|
20
|
+
over="ignore")` via a shared `minimize_quiet` helper in
|
|
21
|
+
`_arima_likelihood.py`. The objective and every fail-loud convergence
|
|
22
|
+
guard are untouched (they rely on the non-finite return), so no fitted
|
|
23
|
+
result changes — verified: airline `(0,1,1)(0,1,1)[12]` loglik 244.6965
|
|
24
|
+
and `(2,1,1)` −685.169 identical to before, full timeseries suite 540
|
|
25
|
+
passed, and the two seasonal `auto_arima` tests pass with `RuntimeWarning`
|
|
26
|
+
promoted to error.
|
|
27
|
+
|
|
28
|
+
- **timeseries: seasonal ARIMA information criteria counted the wrong
|
|
29
|
+
parameters (RIGOR R18 showstopper).** `arima(..., seasonal=...)` in
|
|
30
|
+
`_arima_fit.py` computed `aic`/`aicc`/`bic` with `k = len(opt_params) + 1`,
|
|
31
|
+
where `opt_params` is the EXPANDED multiplicative polynomial — the airline
|
|
32
|
+
model `(0,1,1)(0,1,1)[12]` was counted as k=15 (expanded MA order 13 + mean
|
|
33
|
+
+ sigma2) instead of the free-parameter k=3 (ma1, sma1, sigma2), inflating
|
|
34
|
+
its AIC from 1021.00 to 1044.90; `(1,0,1)(1,0,1)[12]` was counted k=28
|
|
35
|
+
instead of 6. `ARIMASolution` was internally inconsistent: `.n_params`
|
|
36
|
+
(already the free count) disagreed with the k inside `.aic`. Now
|
|
37
|
+
`k = p + q + P + Q + (1 if mean estimated) + 1`, matching R `stats::arima`'s
|
|
38
|
+
`length(coef) + 1` convention, and `.aic == -2*loglik + 2*n_params` holds
|
|
39
|
+
for every model (seasonal, non-seasonal, differenced, degenerate).
|
|
40
|
+
Verified on AirPassengers vs R 4.5.2: airline AIC 1021.0030 vs R 1021.0029,
|
|
41
|
+
AICc 1021.1919 (exact), `(2,1,1)(0,1,0)[12]` AICc 1018.1655 vs R 1018.1652.
|
|
42
|
+
|
|
43
|
+
- **timeseries: `arima()` estimated a mean for differenced models; R drops
|
|
44
|
+
it.** `stats::arima` ignores `include.mean` when d + D > 0; we estimated
|
|
45
|
+
one anyway (e.g. `(2,1,1)` on AirPassengers got mean=2.669, acting as an
|
|
46
|
+
implicit drift term), which both mis-counted k and changed the fit
|
|
47
|
+
(loglik −675.85 with spurious mean vs R's −685.17 without). `arima()` now
|
|
48
|
+
forces `include_mean=False` when d + D > 0. After the change the differenced
|
|
49
|
+
fits match R exactly: `(2,1,1)` loglik −685.1690 (R −685.1690), airline
|
|
50
|
+
−507.5015 (R −507.5014). Consequence for forecasts: differenced models no
|
|
51
|
+
longer carry an implicit drift (matches R `stats::arima`; explicit drift à
|
|
52
|
+
la `forecast::Arima(include.drift=)` remains unsupported).
|
|
53
|
+
|
|
54
|
+
- **timeseries: degenerate `(0,d,0)` AICc correction fixed** in
|
|
55
|
+
`_arima_fit.py`: was `AIC + 2/(n-2)`, correct k=1 formula is
|
|
56
|
+
`AIC + 2k(k+1)/(n-k-1) = AIC + 4/(n-2)`. Matters now that `(0,1,0)`-type
|
|
57
|
+
candidates (mean-free) hit this path during `auto_arima` search.
|
|
58
|
+
|
|
59
|
+
- **timeseries: `auto_arima` seasonal search never varied (P, Q)** —
|
|
60
|
+
`_stepwise_search`/`_grid_search` in `_arima_order.py` pinned the seasonal
|
|
61
|
+
order at `(1, D, 1)`, so R's AirPassengers pick `(2,1,1)(0,1,0)[12]` was
|
|
62
|
+
unreachable. Stepwise now follows Hyndman–Khandakar: initial candidates
|
|
63
|
+
`(2,d,2)(1,D,1)/(0,d,0)(0,D,0)/(1,d,0)(1,D,0)/(0,d,1)(0,D,1)` and ±1 moves
|
|
64
|
+
on P/Q (alone and jointly) next to the existing p/q moves; grid search
|
|
65
|
+
iterates the full P/Q grid. `AutoARIMAParams.best_seasonal` now reports the
|
|
66
|
+
SEARCHED seasonal order; seasonal `search_results` entries are
|
|
67
|
+
`((p,d,q), (P,D,Q,m))` pairs. Combined effect of the three ARIMA fixes:
|
|
68
|
+
`auto_arima(AirPassengers, period=12, ic='aicc')` selects
|
|
69
|
+
`(2,1,1)(0,1,0)[12]` AICc 1018.17 — identical to
|
|
70
|
+
`forecast::auto.arima` — where it previously selected
|
|
71
|
+
`(2,1,2)(1,1,1)[12]` (reported AICc 1088.4; R-correct AICc 1025.7, i.e.
|
|
72
|
+
7.5 worse than R's pick). Non-seasonal AirPassengers now selects `(2,1,3)`
|
|
73
|
+
AICc 1350.22 (R's own `arima()` reproduces our fit and AICc to 4 decimals);
|
|
74
|
+
R's greedy no-drift stepwise stops at `(4,1,2)` AICc 1374.39, so we beat it
|
|
75
|
+
by R's own criterion — we do NOT add a drift feature to chase R's
|
|
76
|
+
with-drift pick `(4,1,2)+drift` (AICc 1357.22).
|
|
77
|
+
|
|
78
|
+
- **timeseries: ADF p-value was materially wrong in the fail-to-reject
|
|
79
|
+
region.** `_adf_pvalue` in `_stationarity.py` linearly interpolated between
|
|
80
|
+
the 1%/5%/10% critical values and extrapolated above the 10% point: a
|
|
81
|
+
near-unit-root series (stat −1.1426, ct) got p=0.4433 where MacKinnon says
|
|
82
|
+
0.9216 (tseries: 0.9144). Replaced with the MacKinnon (1994) response
|
|
83
|
+
surface in new module `_adf_mackinnon.py` (same surface statsmodels
|
|
84
|
+
`adfuller` uses), valid across the whole range — no 0.01 floor. Verified vs
|
|
85
|
+
statsmodels 0.14.6: max |p diff| 3e-16 on a dense τ grid across nc/c/ct;
|
|
86
|
+
36 series/lag/regression configs max diff 4e-13. Statistic untouched
|
|
87
|
+
(already exact vs tseries AND statsmodels). Reported critical values
|
|
88
|
+
upgraded from the MacKinnon 1996 two-term adjustment to the 2010
|
|
89
|
+
finite-sample response surface (matches statsmodels `mackinnoncrit`).
|
|
90
|
+
|
|
91
|
+
- **timeseries: `adf_test` default `regression` changed 'c' → 'ct'.** The
|
|
92
|
+
docstring claimed "'c' matches R" — false: `tseries::adf.test` always uses
|
|
93
|
+
constant + trend. With the 'ct' default the statistic reproduces tseries
|
|
94
|
+
exactly (verified 4 series, d < 1e-6). 'nc'/'c'/'ct' all remain available.
|
|
95
|
+
`ndiffs` in `_differencing.py` pins its internal call to `regression='c'`
|
|
96
|
+
(the drift variant forecast::ndiffs uses), so the new default does not
|
|
97
|
+
leak into ndiffs; the MacKinnon p-value surface itself flips no
|
|
98
|
+
ndiffs(test='adf') decision on an 18-series battery (see the ndiffs
|
|
99
|
+
bullet below).
|
|
100
|
+
|
|
101
|
+
- **timeseries: `kpss_test` default bandwidth aligned to
|
|
102
|
+
`tseries::kpss.test`.** Was `floor(3*sqrt(n)/13)` (lag 3 at n=200, 2 at
|
|
103
|
+
n=100); tseries uses `trunc(4*(n/100)^(1/4))` (`lshort=TRUE`; 4 at both).
|
|
104
|
+
New `lshort: bool = True` parameter mirrors tseries (`lshort=False` →
|
|
105
|
+
`trunc(12*(n/100)^(1/4))`); explicit `n_lags` overrides it. At matched
|
|
106
|
+
bandwidth statistic and interpolated p-value reproduce tseries exactly
|
|
107
|
+
(adversarially verified: 36/36 cases across 9 series × Level/Trend ×
|
|
108
|
+
lshort TRUE/FALSE, lag equal to tseries' in every case, stat diff
|
|
109
|
+
≤ 2e-13, p diff ≤ 4e-15). Removed a dead duplicate `critical_values`
|
|
110
|
+
construction in `kpss_test`.
|
|
111
|
+
|
|
112
|
+
- **timeseries: `ndiffs` KPSS bandwidth pinned to forecast's rule.**
|
|
113
|
+
`forecast::ndiffs` does NOT use the tseries/urca `lags="short"`
|
|
114
|
+
bandwidth — it passes `use.lag = trunc(3*sqrt(n)/13)` (the OLD
|
|
115
|
+
pystatistics default). Cross-verification caught `ndiffs(WWWusage)`
|
|
116
|
+
flipping 1 → 0 (away from forecast) when kpss_test's new default
|
|
117
|
+
leaked in; `ndiffs` now passes `n_lags=trunc(3*sqrt(n)/13)`
|
|
118
|
+
explicitly. Verified against `forecast::ndiffs` on 18 series
|
|
119
|
+
(including the WWWusage borderline case, now pinned in the fixture).
|
|
120
|
+
Note the ADF-path p-value change flips NO ndiffs decision on that
|
|
121
|
+
battery (old vs new identical on all 18).
|
|
122
|
+
|
|
123
|
+
- **timeseries: `kpss_test` fails loud on degenerate input.** An exactly
|
|
124
|
+
constant series (or exactly linear series with `regression='ct'`)
|
|
125
|
+
produced a 0/0 statistic reported as confident rounding noise
|
|
126
|
+
(stat 4.4, p=0.01 — "rejects stationarity" for a constant); now raises
|
|
127
|
+
`ValidationError`. The unreachable `return 0.05` interpolation
|
|
128
|
+
fallback in `_kpss_pvalue` now raises instead of silently reporting
|
|
129
|
+
p=0.05.
|
|
130
|
+
|
|
131
|
+
- **timeseries: seasonal-AR exact-ML log-likelihood was ~80 units below R
|
|
132
|
+
(silent diffuse-init fallback).** `_stationary_init` in `_arima_kalman.py`
|
|
133
|
+
solved the Lyapunov equation `P = TPT' + RR'` by linear fixed-point
|
|
134
|
+
iteration with max_iter=200 and ABSOLUTE tol 1e-12; a moderately
|
|
135
|
+
persistent seasonal AR (sar1=-0.47 at lag 12 → spectral radius 0.94,
|
|
136
|
+
rate 0.88/iter) converged to within 1.4e-11 of the exact solution but
|
|
137
|
+
missed the tolerance, so the near-perfect P was DISCARDED for the
|
|
138
|
+
diffuse kappa=1e6 init — shifting loglik by ~80 units on
|
|
139
|
+
`(1,1,1)(1,1,0)[12]` models (log-AirPassengers: py 160.5 vs R 241.7;
|
|
140
|
+
nottem: −614.5 vs −536.9) and corrupting IC ranking of seasonal-AR
|
|
141
|
+
candidates. Replaced with a doubling iteration (S_{j+1} = S_j + A_j S_j
|
|
142
|
+
A_j', A_{j+1} = A_j²; quadratic in horizon) with RELATIVE tolerance;
|
|
143
|
+
diffuse fallback now only for genuinely non-stationary points, matching
|
|
144
|
+
R (which solves Q0 exactly and never falls back for stationary models).
|
|
145
|
+
Both models now match R: loglik 241.7298 vs 241.7332 / −536.8834 vs
|
|
146
|
+
−536.8839, coefficients to ~5 decimals. Removed the now-dead
|
|
147
|
+
`_sparse_T_times_M_times_TT` helper and scipy `solve_discrete_lyapunov`
|
|
148
|
+
import/fallback (`_initial_covariance`).
|
|
149
|
+
|
|
150
|
+
- **timeseries: seasonal ARIMA forecasts dropped the seasonal
|
|
151
|
+
coefficients; SEs ignored differencing and state uncertainty.**
|
|
152
|
+
`forecast_arima` in `_arima_forecast.py` fed `fitted.ar/.ma` — the
|
|
153
|
+
factored NON-seasonal coefficients — into the point-forecast recursion
|
|
154
|
+
and psi weights (airline forecasts up to ~5.4 off R `predict()`), and
|
|
155
|
+
computed SEs as `sigma*sqrt(cumsum(psi²))` of the differenced-scale ARMA
|
|
156
|
+
only (a random walk reported flat se=sigma at every horizon instead of
|
|
157
|
+
sigma*sqrt(h)). Rewritten: point forecasts come from the exact Kalman
|
|
158
|
+
filtered state via new `kalman_arma_forecast` in `_arima_kalman.py`
|
|
159
|
+
(R's `KalmanForecast` approach; the CSS-residual recursion carries
|
|
160
|
+
conditioning error at the sample end when an MA root is near the unit
|
|
161
|
+
circle — (2,1,1)(0,1,0)[12] with ma1=-0.98 was ~1.4 off R even with
|
|
162
|
+
the right polynomials), using the multiplied-out effective polynomials;
|
|
163
|
+
SEs aggregate the full h×h Kalman forecast-error covariance through the
|
|
164
|
+
integration operator `1/((1-B)^d (1-B^m)^D)`. Verified vs R
|
|
165
|
+
`predict.Arima` on airline, (2,1,1)(0,1,0)[12], (2,1,1), (0,1,0), and
|
|
166
|
+
both (1,1,1)(1,1,0)[12] fits: max |mean diff| 0.0014, max se rel diff
|
|
167
|
+
0.002%. The dead `_forecast_differenced` recursion was removed.
|
|
168
|
+
|
|
169
|
+
- **timeseries: `sigma2` now reports the Kalman profile estimate for
|
|
170
|
+
ML-family fits** in `_arima_fit.py` (was CSS-residual SSE/n for all
|
|
171
|
+
methods, 2.9% high on the near-unit-MA model: 133.09 vs R's 129.31 —
|
|
172
|
+
the residual source of forecast-SE error). Matches R `stats::arima`
|
|
173
|
+
to 4 decimals on the reference fits; pure-CSS fits keep SSE/n (R's CSS
|
|
174
|
+
convention).
|
|
175
|
+
|
|
176
|
+
- **timeseries: seasonal `vcov`/`summary()` standard errors were read
|
|
177
|
+
from the wrong matrix.** The Hessian was computed over the EXPANDED
|
|
178
|
+
polynomial parameters, so `summary()` printed seasonal s.e. from
|
|
179
|
+
structurally-zero expanded lags (airline sma1: 0.38 printed vs R's
|
|
180
|
+
0.0828). `_compute_hessian` now takes a callable and seasonal fits
|
|
181
|
+
differentiate in the FACTORED parameterization (ar, ma, sar, sma,
|
|
182
|
+
mean) using the exact-ML objective; airline and (1,1,1)(1,1,0)[12]
|
|
183
|
+
s.e. now match R to 4 decimals. Non-seasonal fits keep the existing
|
|
184
|
+
CSS-Hessian convention. `vcov` docstring ordering is now actually true.
|
|
185
|
+
|
|
186
|
+
- **timeseries: ML stage of CSS-ML is now better-of-two-starts for
|
|
187
|
+
mean-carrying fits.** The exact stationary init exposed a flat canyon
|
|
188
|
+
in the (ar, mean) surface toward the AR unit root: the CSS stage can
|
|
189
|
+
hand ML a drifted-mean basin L-BFGS-B cannot leave (AirPassengers
|
|
190
|
+
(1,0,1): mean 115.7, loglik 1.84 below R). `_optimize_arima` and
|
|
191
|
+
`optimize_arima_factored` now also run the ML stage from the original
|
|
192
|
+
Yule-Walker/sample-mean start and keep the better optimum — same
|
|
193
|
+
pattern as the 4.6.3 damped-ETS fix; fits improve or stay identical.
|
|
194
|
+
(1,0,1) now matches R: loglik −700.8744 vs −700.8741 at the same
|
|
195
|
+
coefficients. Only `include_mean` fits pay the extra ML run.
|
|
196
|
+
|
|
197
|
+
- **timeseries: `auto_arima` now applies forecast::auto.arima's
|
|
198
|
+
near-unit-root candidate veto and replicates its stepwise walk.** With
|
|
199
|
+
the corrected seasonal-AR likelihood, boundary models (AR/MA root
|
|
200
|
+
pile-up at the unit circle chasing the differencing operator) started
|
|
201
|
+
winning raw AICc — AirPassengers briefly selected (3,1,3)(1,1,2)[12]
|
|
202
|
+
at 1004.8. forecast deliberately excludes candidates whose expanded
|
|
203
|
+
AR or MA polynomial has a root with modulus < 1.01 (`myarima` sets
|
|
204
|
+
ic=Inf); `_try_fit` now does the same (`_has_near_unit_roots`), and
|
|
205
|
+
the stepwise search now replicates forecast's exact move priority
|
|
206
|
+
(seasonal P/Q moves first, singles before joint moves) with
|
|
207
|
+
first-improvement restart — the walk's PATH determines which local
|
|
208
|
+
optimum a greedy search reaches, and an all-neighbours sweep stopped
|
|
209
|
+
at (0,1,1)(2,1,0)[12] AICc 1019.5 where R's walk reaches
|
|
210
|
+
(2,1,1)(0,1,0)[12] at 1018.2. AirPassengers seasonal selection again
|
|
211
|
+
matches R exactly. `arima()` itself still fits whatever is requested
|
|
212
|
+
(veto applies to automatic selection only, exactly like R).
|
|
213
|
+
|
|
214
|
+
- **timeseries: point forecasts for d ≥ 2 (or seasonal D ≥ 2) were
|
|
215
|
+
catastrophically wrong.** `_undifference` in `_arima_forecast.py`
|
|
216
|
+
walked the integration ladder in reverse (first cumsum seeded with the
|
|
217
|
+
tail of the RAW series instead of the most-differenced one) — invisible
|
|
218
|
+
for d + D ≤ 1, but an ARIMA(1,2,1) 12-step mean was off by ~13,600
|
|
219
|
+
while its (fixed) SEs matched R to 7.7e-5. Pre-existing, caught by the
|
|
220
|
+
adversarial review of the forecast rewrite. Integration now proceeds
|
|
221
|
+
from the most-differenced scale outward; verified vs R `predict()`:
|
|
222
|
+
(1,2,1) mean diff 0.0006, (0,2,0) exact, (0,1,1)(0,2,1)[12] 0.006.
|
|
223
|
+
|
|
224
|
+
- **timeseries: `auto_arima` now determines d with the KPSS test,
|
|
225
|
+
matching `forecast::auto.arima`'s default.** `_determine_d` hardcoded
|
|
226
|
+
`ndiffs(test='adf')`; on series where ADF and KPSS disagree the search
|
|
227
|
+
ran at the wrong d and could not reach R's model class (wineind: adf
|
|
228
|
+
d=0 vs R/KPSS d=1 → pick 41 AICc worse by R's own accounting;
|
|
229
|
+
WWWusage: adf d=2 → over-differenced (2,2,0) vs R's (1,1,1)). Cross-
|
|
230
|
+
verification proved forcing R's d reproduces R's exact picks on both.
|
|
231
|
+
With KPSS-based d, both now match; the other six benchmark series
|
|
232
|
+
(already KPSS-consistent) are unchanged.
|
|
233
|
+
|
|
234
|
+
- **timeseries: spurious `ConvergenceError` when the CSS warm-start
|
|
235
|
+
aborts but ML refinement converges.** In `_optimize_arima` the
|
|
236
|
+
`converged` flag kept the CSS stage's failure even after a successful
|
|
237
|
+
ML stage (co2 (2,1,1): ML at −466.830 = R's −466.830, yet arima()
|
|
238
|
+
raised). Pre-existing bookkeeping, newly exposed by the mean-drop
|
|
239
|
+
change; `converged` now reflects the accepted ML result, and the
|
|
240
|
+
factored two-start prefers a converged second optimum over a failed
|
|
241
|
+
first one.
|
|
242
|
+
|
|
243
|
+
- **timeseries: `sigma2` failure sentinel no longer silent.**
|
|
244
|
+
`kalman_arma_loglik` signals failure with a placeholder sigma2 of 1.0;
|
|
245
|
+
`arima()` would have reported it as a real variance. Now raises
|
|
246
|
+
`ConvergenceError` (unreachable in practice — the ML stage just
|
|
247
|
+
evaluated those parameters — but the silent default violated the
|
|
248
|
+
fail-loud rule).
|
|
249
|
+
|
|
250
|
+
- **timeseries: removed the dead innovations-algorithm ML path**
|
|
251
|
+
(`_exact_loglik_innovations`, `_innovations_algorithm`,
|
|
252
|
+
`_arma_autocovariance` in `_arima_likelihood.py`; the scipy
|
|
253
|
+
`solve_discrete_lyapunov` fallback in `_arima_kalman.py`). No callers
|
|
254
|
+
since the Kalman path landed, and review found `_arma_autocovariance`
|
|
255
|
+
computes a wrong gamma(0) for mixed ARMA (2.1915 vs true 2.1353 for
|
|
256
|
+
ar=(0.6,−0.3), ma=0.4) — its docstring claimed it was a 1e-6-accurate
|
|
257
|
+
second-source reference. Dead AND wrong code removed rather than
|
|
258
|
+
fixed. `_stationary_init` also symmetrizes its result (float matmul
|
|
259
|
+
drift ~1e-12 on near-unit systems), and stale "innovations algorithm"
|
|
260
|
+
docstrings now say Kalman filter.
|
|
261
|
+
|
|
262
|
+
- **timeseries: exact-ML fits now report the invertible (canonical) MA
|
|
263
|
+
representation.** The exact-ML likelihood is invariant under
|
|
264
|
+
reflecting MA roots across the unit circle (theta → 1/theta with a
|
|
265
|
+
matching sigma2 rescale), so the optimizer landed on the
|
|
266
|
+
non-invertible mirror on ~10% of boundary-ish fits (AirPassengers
|
|
267
|
+
(1,1,1)(1,1,1)[12]: sma1=1.19, sigma2 30% below R; co2 (1,0,1)+mean:
|
|
268
|
+
ma1=1.46, sigma2 53% below). Statistically the invertible
|
|
269
|
+
representative is the identified/fundamental (Wold) one: only its
|
|
270
|
+
sigma2 is the one-step prediction-error variance, and the
|
|
271
|
+
non-invertible representation made the CSS residual recursion
|
|
272
|
+
diverge. R does exactly this: `stats::arima`'s internal `maInvert`
|
|
273
|
+
normalizes the fitted MA blocks of ML-family fits post-fit and
|
|
274
|
+
recomputes the Hessian/sigma2 at the inverted coefficients — so this
|
|
275
|
+
is required R parity, not an extra nicety (verified by seeding R's
|
|
276
|
+
optimizer in the mirror basin via `init=`: R still reports the
|
|
277
|
+
invertible fit). New `normalize_ma_coefficients` in `_arima_factored.py`
|
|
278
|
+
reflects inside-circle roots per MA FACTOR (preserving the
|
|
279
|
+
multiplicative seasonal structure); roots on the circle are left
|
|
280
|
+
alone (the MA unit-root pile-up under over-differencing is a genuine
|
|
281
|
+
boundary optimum where both representatives coincide); a
|
|
282
|
+
likelihood-invariance guard reverts loudly if the flip is not
|
|
283
|
+
numerically neutral. NOT applied to pure-CSS fits — the CSS criterion
|
|
284
|
+
is not reflection-invariant, so the flipped parameters would not be
|
|
285
|
+
the optimum of the fitted criterion (R's split too). All downstream
|
|
286
|
+
artifacts (sigma2, residuals, vcov, the auto_arima root veto) are
|
|
287
|
+
computed at the normalized point; sigma2 on the previously-mirror
|
|
288
|
+
fits now matches R (0.09% worst), and mirror candidates now survive
|
|
289
|
+
the selection veto exactly when R keeps them. Likelihood, AICc, and
|
|
290
|
+
forecasts are unchanged (equivalence class).
|
|
291
|
+
|
|
292
|
+
- **timeseries: ML-family `residuals` are now the standardized Kalman
|
|
293
|
+
innovations `v_t/sqrt(F_t)`,** matching R `stats::arima`'s
|
|
294
|
+
`residuals()` (arima.c scales by `sqrt(gain)`). These are the
|
|
295
|
+
model's actual innovations with CONSTANT variance sigma2 at every t —
|
|
296
|
+
the homoscedastic white noise Ljung-Box/ACF/normality diagnostics
|
|
297
|
+
assume — and satisfy `mean(residuals**2) == sigma2` identically
|
|
298
|
+
(verified to machine precision on every reference fit). CSS
|
|
299
|
+
residuals approximate them only up to a conditioning transient
|
|
300
|
+
decaying like the largest MA root modulus^t (~7% still alive at
|
|
301
|
+
t=131 for ma1=−0.98), and diverged outright on the mirror fits.
|
|
302
|
+
Verified against R `residuals()` on the reference battery (aligned
|
|
303
|
+
after the d+D·m observations differencing consumes): max diff ≤6e-4
|
|
304
|
+
at matched fits. `sigma2` for ML fits is now computed as
|
|
305
|
+
`mean(residuals**2)` directly (algebraically identical to the Kalman
|
|
306
|
+
profile estimator; removes a redundant filter pass and the silent
|
|
307
|
+
failure sentinel — `kalman_arma_innovations` raises loudly instead).
|
|
308
|
+
Pure-CSS fits keep the CSS recursion and sigma2 = SSE/n (R's CSS
|
|
309
|
+
convention). New `kalman_arma_innovations` in `_arima_kalman.py`;
|
|
310
|
+
the normalization orchestration lives in
|
|
311
|
+
`_arima_factored.normalize_to_invertible` (keeps `_arima_fit.py`
|
|
312
|
+
under the LOC limit and dedupes the seasonal/non-seasonal guard).
|
|
313
|
+
`kalman_arma_forecast`/`kalman_arma_innovations` raise
|
|
314
|
+
`ConvergenceError` (not `ValidationError`) on internal numerical
|
|
315
|
+
failure — these are not user-input errors.
|
|
316
|
+
|
|
317
|
+
- **timeseries: `arima()` gains R's `init=` parameter** (new module
|
|
318
|
+
`_arima_init.py`). Layout follows R `coef()` order
|
|
319
|
+
`[ar, ma, sar, sma, mean?]` (mean slot only when a mean is actually
|
|
320
|
+
estimated, i.e. d + D = 0 and include_mean); `numpy.nan` entries are
|
|
321
|
+
filled with defaults (zeros for coefficients, sample mean of the
|
|
322
|
+
differenced series for the mean); non-stationary AR/seasonal-AR
|
|
323
|
+
inits raise ValidationError (R errors "non-stationary AR part");
|
|
324
|
+
non-invertible MA inits are normalized to the invertible
|
|
325
|
+
representative before optimization — R's documented maInvert-on-init
|
|
326
|
+
intent; empirically R's own implementation ERRORS on such inits
|
|
327
|
+
(its CSS/optim stage diverges first), so accepting them is a strict
|
|
328
|
+
improvement over the reference. Rejected loudly for
|
|
329
|
+
method='Whittle'. R-parity pinned in the fixture: the airline warm
|
|
330
|
+
start lands at R's optimum (ma1/sma1 to 1e-5, loglik to 1e-4).
|
|
331
|
+
|
|
332
|
+
- **timeseries: `arima()` docstring no longer overclaims interface
|
|
333
|
+
parity.** The old text said "Matches the interface and numerical
|
|
334
|
+
approach of R's stats::arima()" while the interface lacked xreg,
|
|
335
|
+
transform.pars, fixed, init, n.cond, SSinit, optim.method/control,
|
|
336
|
+
kappa, with no disclosed reason — a violation of the "do it or give
|
|
337
|
+
a principled reason" promise. The docstring now states the claim
|
|
338
|
+
precisely: numerical-behaviour parity (verified), a documented
|
|
339
|
+
supported subset (order/seasonal/include_mean/method/init),
|
|
340
|
+
not-yet-implemented parameters (fixed, xreg incl. drift), and the
|
|
341
|
+
by-design exclusions with reasons (transform.pars/SSinit/kappa/
|
|
342
|
+
n.cond/optim.* are knobs over R's optimizer and state-space
|
|
343
|
+
internals; we guarantee results parity, not knob parity). The
|
|
344
|
+
timeseries module index claim was likewise corrected. Also
|
|
345
|
+
documents the pure-CSS conditioning difference vs R (we
|
|
346
|
+
zero-initialize over all observations; R conditions on and excludes
|
|
347
|
+
the first n.cond — measured: airline seasonal CSS identical to R,
|
|
348
|
+
(2,1,1) coefficients ~1e-3 apart with sigma2 ~1.3%, weakly
|
|
349
|
+
identified fits may reach different CSS optima; CSS-ML/ML results
|
|
350
|
+
are unaffected and remain covered by the parity guarantee).
|
|
351
|
+
|
|
352
|
+
- **timeseries: remaining convention notes:** `arima_batch` (Whittle)
|
|
353
|
+
still reports a documented per-series sample mean under d > 0;
|
|
354
|
+
drift/intercept terms for d + D = 1 models remain unsupported
|
|
355
|
+
(`fixed=` and `xreg=` are the tracked interface gaps, disclosed in
|
|
356
|
+
the `arima()` docstring).
|
|
357
|
+
|
|
358
|
+
- **tests:** new `tests/timeseries/test_arima_kalman_r_parity.py`
|
|
359
|
+
(SAR loglik/coef/IC parity on both failing models, stationary-init
|
|
360
|
+
doubling normal/edge/failure incl. Lyapunov residual and scipy
|
|
361
|
+
agreement, forecast mean+se parity on NINE models vs R
|
|
362
|
+
`predict.Arima` incl. d=2 and seasonal D=2, analytic random-walk se,
|
|
363
|
+
loud forecast failure on non-finite params, sigma2 profile parity,
|
|
364
|
+
factored-vcov s.e. parity and dimensions, near-unit-root veto
|
|
365
|
+
normal/boundary/empty cases, converged-flag guard on the co2 (2,1,1)
|
|
366
|
+
CSS-abort case) with fixture `arima_kalman_r_reference.json` +
|
|
367
|
+
generator (R 4.5.2); `test_arima_ic.py` gains the WWWusage
|
|
368
|
+
KPSS-d-selection regression test. Full timeseries suite incl.
|
|
369
|
+
slow-marked: 521 passed, 0 failures.
|
|
370
|
+
|
|
371
|
+
- **tests:** new `tests/timeseries/test_arima_ic.py` (IC self-consistency,
|
|
372
|
+
R free-k parity, mean-under-differencing, degenerate AICc, auto_arima
|
|
373
|
+
seasonal selection = R, validation failures) and
|
|
374
|
+
`tests/timeseries/test_stationarity_mackinnon.py` (ADF default/statistic/
|
|
375
|
+
p-value vs statsmodels fixtures incl. near-unit-root ≈0.92, saturation,
|
|
376
|
+
monotonicity, CV failure cases; KPSS bandwidth rules, tseries parity,
|
|
377
|
+
lshort validation). Reference fixtures + generator scripts under
|
|
378
|
+
`tests/fixtures/` (R 4.5.2, tseries 0.10-58, statsmodels 0.14.6). Full
|
|
379
|
+
timeseries suite: 459 passed, 0 failures.
|
|
@@ -1,5 +1,181 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 4.6.4
|
|
4
|
+
|
|
5
|
+
Seasonal ARIMA information criteria, likelihoods, forecasts, and standard
|
|
6
|
+
errors fixed — `auto_arima` now selects the same models as R's
|
|
7
|
+
`forecast::auto.arima`, and forecasts reproduce R's `predict()`; ADF
|
|
8
|
+
p-values corrected across their full range; stationarity-test defaults
|
|
9
|
+
aligned with R's `tseries`.
|
|
10
|
+
|
|
11
|
+
- **Seasonal ARIMA models reported inflated AIC/AICc/BIC — fixed.**
|
|
12
|
+
`arima(..., seasonal=...)` counted the coefficients of the expanded
|
|
13
|
+
multiplicative AR/MA polynomials instead of the free estimated parameters:
|
|
14
|
+
the airline model `(0,1,1)(0,1,1)[12]` on AirPassengers was penalised for
|
|
15
|
+
15 parameters instead of 3, reporting AIC 1044.9 where R's `stats::arima`
|
|
16
|
+
gives 1021.0. The fitted coefficients and log-likelihood were always
|
|
17
|
+
correct — only the information criteria (and the `n_params`-vs-`aic`
|
|
18
|
+
consistency of the result object) were wrong. All criteria now use the
|
|
19
|
+
free-parameter count (`p + q + P + Q`, plus the mean if one is estimated,
|
|
20
|
+
plus one for the innovation variance), matching R exactly, and
|
|
21
|
+
`aic == -2*log_likelihood + 2*n_params` holds on every model. The AICc
|
|
22
|
+
correction of the trivial `(0,d,0)` model was also off (used `2/(n-2)`
|
|
23
|
+
instead of `4/(n-2)`) and is fixed.
|
|
24
|
+
- **Differenced ARIMA models no longer estimate a mean.** R's `stats::arima`
|
|
25
|
+
ignores `include.mean` whenever the model has any differencing
|
|
26
|
+
(`d + D > 0`); pystatistics estimated one anyway, which acted as an
|
|
27
|
+
implicit drift term and shifted both the fit and the parameter count.
|
|
28
|
+
Differenced fits now reproduce R's log-likelihoods exactly (e.g.
|
|
29
|
+
`(2,1,1)` on AirPassengers: −685.169 both). Forecasts from differenced
|
|
30
|
+
models consequently no longer carry an implicit drift.
|
|
31
|
+
- **`auto_arima` now searches the seasonal orders and matches R.** The
|
|
32
|
+
seasonal search previously kept `(P, Q)` pinned at `(1, 1)`, so many of R's
|
|
33
|
+
selections were unreachable; combined with the inflated criteria it could
|
|
34
|
+
silently return a materially worse model — on AirPassengers it selected
|
|
35
|
+
`(2,1,2)(1,1,1)[12]`, which is 7.5 AICc worse than R's pick by R's own
|
|
36
|
+
accounting. The stepwise search now varies P and Q (alone and jointly,
|
|
37
|
+
Hyndman–Khandakar moves) and the exhaustive search iterates the full
|
|
38
|
+
P/Q grid: `auto_arima(AirPassengers, period=12)` now selects
|
|
39
|
+
`(2,1,1)(0,1,0)[12]` with AICc 1018.17 — identical to
|
|
40
|
+
`forecast::auto.arima`. On the non-seasonal AirPassengers benchmark the
|
|
41
|
+
search finds `(2,1,3)` (AICc 1350.2, confirmed by R's own `arima()`),
|
|
42
|
+
a better model under the shared criterion than the `(4,1,2)` R's greedy
|
|
43
|
+
no-drift search stops at (1374.4). Drift terms remain unsupported.
|
|
44
|
+
`best_seasonal` on the result now reports the seasonal order the search
|
|
45
|
+
actually selected, and seasonal `search_results` entries are
|
|
46
|
+
`((p,d,q), (P,D,Q,m))` pairs.
|
|
47
|
+
- **Seasonal models with a persistent seasonal AR term reported
|
|
48
|
+
log-likelihoods ~80 units below R — fixed.** The Kalman filter's
|
|
49
|
+
stationary initial covariance was solved by an iteration whose budget a
|
|
50
|
+
moderately persistent seasonal AR term exceeded; the near-converged
|
|
51
|
+
solution was silently discarded for a diffuse initialization, shifting
|
|
52
|
+
the reported log-likelihood (and all information criteria) far from R's
|
|
53
|
+
on models such as `(1,1,1)(1,1,0)[12]` even though the fitted
|
|
54
|
+
coefficients were essentially correct. The initialization now uses a
|
|
55
|
+
doubling iteration that converges for any stationary model;
|
|
56
|
+
`(1,1,1)(1,1,0)[12]` on log(AirPassengers) and nottem now reproduces
|
|
57
|
+
R's log-likelihood to three decimals.
|
|
58
|
+
- **Seasonal ARIMA forecasts ignored the seasonal coefficients — fixed.**
|
|
59
|
+
Point forecasts used only the non-seasonal AR/MA coefficients (airline-
|
|
60
|
+
model forecasts were up to ~5.4 off R's `predict()`), and forecast
|
|
61
|
+
standard errors ignored both the differencing operators (a random walk
|
|
62
|
+
reported the same standard error at every horizon instead of growing
|
|
63
|
+
with sqrt(h)) and end-of-sample state uncertainty. Forecasts now come
|
|
64
|
+
from the exact Kalman filtered state with the full multiplied-out
|
|
65
|
+
polynomials, and standard errors aggregate the exact forecast-error
|
|
66
|
+
covariance through the un-differencing — matching R's `predict.Arima`
|
|
67
|
+
to 0.002% on the reference battery. `sigma2` on ML-family fits now
|
|
68
|
+
reports the profile maximum-likelihood estimate (R's convention; the
|
|
69
|
+
previous residual-based value was 2.9% high on a near-unit-MA model).
|
|
70
|
+
- **Maximum-likelihood fits now always report the invertible MA
|
|
71
|
+
representation.** The exact likelihood cannot distinguish an MA
|
|
72
|
+
polynomial from its reflection across the unit circle (with a
|
|
73
|
+
matching innovation-variance rescale), and the optimizer sometimes
|
|
74
|
+
returned the non-invertible mirror — same fit, but with `sigma2` up
|
|
75
|
+
to 53% below the one-step prediction-error variance (which is what
|
|
76
|
+
R reports and what prediction intervals need) and coefficients that
|
|
77
|
+
could not be compared with R or the literature. Fits are now
|
|
78
|
+
normalized to the invertible representative — the standard,
|
|
79
|
+
identified parameterization, and exactly what R's `arima` does
|
|
80
|
+
internally — per seasonal factor; genuine unit-root boundary fits
|
|
81
|
+
(e.g. from over-differencing) are left untouched, and the
|
|
82
|
+
likelihood, information criteria, and forecasts are unchanged.
|
|
83
|
+
CSS-only fits are not normalized (the CSS criterion is not
|
|
84
|
+
reflection-invariant; R skips them too).
|
|
85
|
+
- **Residuals from maximum-likelihood fits are now the standardized
|
|
86
|
+
Kalman innovations,** matching R's `residuals()` for `arima`. These
|
|
87
|
+
have constant variance `sigma2` at every time point — the
|
|
88
|
+
homoscedastic white noise that Ljung-Box/ACF/normality diagnostics
|
|
89
|
+
assume — and satisfy `mean(residuals**2) == sigma2` exactly. The
|
|
90
|
+
previous CSS-based residuals differed from the true innovations by a
|
|
91
|
+
conditioning transient that matters precisely near an MA unit root
|
|
92
|
+
(a very common fit region after differencing) and diverged on
|
|
93
|
+
non-invertible fits. CSS-only fits keep CSS residuals, as in R.
|
|
94
|
+
- **Point forecasts from twice-differenced models diverged — fixed.**
|
|
95
|
+
Undoing the differencing integrated in the wrong order, which was
|
|
96
|
+
invisible for `d + D <= 1` but produced wildly wrong point forecasts
|
|
97
|
+
for `d >= 2` or seasonal `D >= 2` (an ARIMA(1,2,1) 12-step forecast
|
|
98
|
+
was off by four orders of magnitude). Verified against R for d=2 and
|
|
99
|
+
seasonal D=2 models. A related bookkeeping bug that raised a spurious
|
|
100
|
+
convergence error when the CSS warm-start aborted but the maximum-
|
|
101
|
+
likelihood refinement converged is also fixed.
|
|
102
|
+
- **`auto_arima` chooses the differencing order with the KPSS test,**
|
|
103
|
+
matching `forecast::auto.arima`'s default (it previously used the ADF
|
|
104
|
+
test, which disagrees with KPSS on some series and sent the search to
|
|
105
|
+
the wrong model class — on one benchmark the selected model was 41
|
|
106
|
+
AICc worse than R's by R's own accounting; both such benchmark series
|
|
107
|
+
now reproduce R's selection exactly).
|
|
108
|
+
- **Seasonal coefficient standard errors were wrong — fixed.** The
|
|
109
|
+
variance-covariance matrix was computed over the expanded product
|
|
110
|
+
polynomial, so `summary()` printed seasonal standard errors from the
|
|
111
|
+
wrong entries (airline `sma1`: 0.38 printed vs R's 0.083). The Hessian
|
|
112
|
+
is now taken in the factored parameterization; standard errors match R
|
|
113
|
+
to four decimals on the reference models. `vcov` rows/columns now
|
|
114
|
+
correspond to the reported coefficients (ar, ma, sar, sma, mean).
|
|
115
|
+
- **`auto_arima` applies R's near-unit-root candidate veto and follows
|
|
116
|
+
its exact stepwise walk.** Like `forecast::auto.arima`, candidates
|
|
117
|
+
whose fitted AR or MA polynomial has a root within 1.01 of the unit
|
|
118
|
+
circle are excluded from automatic selection (they win raw AICc by
|
|
119
|
+
degenerating toward the differencing operator but are numerically
|
|
120
|
+
unstable and forecast poorly), and the stepwise search now uses
|
|
121
|
+
forecast's move priority and first-improvement policy. Fits requested
|
|
122
|
+
explicitly via `arima()` are unaffected. Mean-carrying fits also gain a
|
|
123
|
+
second maximum-likelihood start (kept only when better), fixing a stall
|
|
124
|
+
where `(1,0,1)` on AirPassengers converged 1.8 log-likelihood units
|
|
125
|
+
short of R.
|
|
126
|
+
- **`arima()` gains R's `init=` parameter** for user-supplied starting
|
|
127
|
+
values (warm starts for rolling re-estimation, basin control on hard
|
|
128
|
+
likelihoods). Semantics follow R: values in `coef()` order, `nan`
|
|
129
|
+
entries filled with defaults, non-stationary AR inits rejected, and
|
|
130
|
+
non-invertible MA inits normalized to the invertible representation
|
|
131
|
+
before optimization. Not available for `method='Whittle'`.
|
|
132
|
+
- **Documentation now states R-interface coverage precisely.** The
|
|
133
|
+
`arima()` docstring previously claimed to match R's interface while
|
|
134
|
+
several R parameters were absent with no stated reason. It now
|
|
135
|
+
enumerates what is supported (`order`, `seasonal`, `include_mean`,
|
|
136
|
+
`method`, `init`), what is not yet implemented (`fixed`, `xreg` —
|
|
137
|
+
including drift terms), and what is deliberately not exposed with
|
|
138
|
+
the reason (R's optimizer and state-space internals; pystatistics
|
|
139
|
+
guarantees parity of results, not of internal knobs). The
|
|
140
|
+
documentation also discloses that `method='CSS'` uses a different
|
|
141
|
+
conditioning convention than R's CSS (results typically agree to
|
|
142
|
+
~1e-3 but are not covered by the parity guarantee; CSS-ML and ML
|
|
143
|
+
results are).
|
|
144
|
+
- **`adf_test` p-values were wrong in the fail-to-reject region — fixed.**
|
|
145
|
+
The p-value interpolated between the 1%/5%/10% critical values and
|
|
146
|
+
extrapolated beyond them: a near-unit-root series with statistic −1.14
|
|
147
|
+
(constant + trend) reported p ≈ 0.44 where the correct value is ≈ 0.92 —
|
|
148
|
+
understating the evidence *for* a unit root exactly where the test is
|
|
149
|
+
used to decide differencing. P-values now come from the MacKinnon (1994)
|
|
150
|
+
response surface (the same used by statsmodels' `adfuller` and, for its
|
|
151
|
+
critical values, R's `urca`), valid across the whole range with no 0.01
|
|
152
|
+
floor; they match statsmodels to machine precision across all regression
|
|
153
|
+
types. The test statistic was already exact and is unchanged. Reported
|
|
154
|
+
critical values now use MacKinnon's 2010 finite-sample surface.
|
|
155
|
+
- **`adf_test` defaults to `regression="ct"` (constant + trend), matching
|
|
156
|
+
`tseries::adf.test`,** which always includes a trend. The previous default
|
|
157
|
+
`"c"` was documented as matching R — it does not. All three regression
|
|
158
|
+
variants (`"nc"`, `"c"`, `"ct"`) remain available. `ndiffs` is unaffected:
|
|
159
|
+
it pins the constant-only variant that `forecast::ndiffs` uses.
|
|
160
|
+
- **`kpss_test` default bandwidth now matches `tseries::kpss.test`.** The
|
|
161
|
+
Bartlett-kernel lag truncation was `floor(3*sqrt(n)/13)`; tseries uses
|
|
162
|
+
`trunc(4*(n/100)^(1/4))`. A new `lshort` parameter mirrors tseries
|
|
163
|
+
(`lshort=False` gives the long rule `trunc(12*(n/100)^(1/4))`; an explicit
|
|
164
|
+
`n_lags` overrides both). At matched bandwidth the statistic and
|
|
165
|
+
interpolated p-value reproduce tseries exactly for both the level and
|
|
166
|
+
trend nulls; p-values remain clamped to the published table's
|
|
167
|
+
[0.01, 0.10] range, as in tseries. `ndiffs` keeps `forecast::ndiffs`'s
|
|
168
|
+
own bandwidth (`trunc(3*sqrt(n)/13)`) and its answers are unchanged —
|
|
169
|
+
verified against `forecast::ndiffs` on an 18-series battery.
|
|
170
|
+
`kpss_test` now raises on degenerate input (an exactly constant series,
|
|
171
|
+
or an exactly linear one with `regression="ct"`) instead of returning a
|
|
172
|
+
rounding-noise statistic.
|
|
173
|
+
- **A spurious `RuntimeWarning: invalid value encountered in subtract` no
|
|
174
|
+
longer prints during `arima()` / `auto_arima()` fitting.** It came from
|
|
175
|
+
the optimizer's internal finite-difference gradient probing infeasible
|
|
176
|
+
(non-stationary / non-invertible) parameters; it never affected results.
|
|
177
|
+
Fitted coefficients, likelihoods, and model selections are unchanged.
|
|
178
|
+
|
|
3
179
|
## 4.6.3
|
|
4
180
|
|
|
5
181
|
Damped-trend ETS fits no longer stall; ETS-vs-R verification strengthened.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pystatistics
|
|
3
|
-
Version: 4.6.
|
|
3
|
+
Version: 4.6.4
|
|
4
4
|
Summary: GPU-accelerated statistical computing for Python
|
|
5
5
|
Project-URL: Homepage, https://sgcx.org/technology/pystatistics/
|
|
6
6
|
Project-URL: Documentation, https://sgcx.org/docs/pystatistics/
|
|
@@ -418,6 +418,43 @@ pip install pystatistics[dev]
|
|
|
418
418
|
|
|
419
419
|
## What's New
|
|
420
420
|
|
|
421
|
+
### 4.6.4 — seasonal ARIMA criteria, likelihoods and forecasts fixed; ADF p-values corrected
|
|
422
|
+
|
|
423
|
+
Seasonal ARIMA fits reported inflated AIC/AICc/BIC: the criteria counted
|
|
424
|
+
the expanded multiplicative polynomial coefficients instead of the free
|
|
425
|
+
estimated parameters (the airline model was penalised for 15 parameters
|
|
426
|
+
instead of 3). The criteria now use the free-parameter count and match R's
|
|
427
|
+
`stats::arima` exactly, with `aic == -2*log_likelihood + 2*n_params`
|
|
428
|
+
holding on every result. Differenced models no longer estimate a mean
|
|
429
|
+
(R ignores `include.mean` when `d + D > 0`). Models with a persistent
|
|
430
|
+
seasonal AR term also reported log-likelihoods ~80 units below R's (a
|
|
431
|
+
silently-degraded Kalman initialization) — fixed; such fits now reproduce
|
|
432
|
+
R to three decimals. Seasonal forecasts previously dropped the seasonal
|
|
433
|
+
coefficients and their standard errors ignored differencing; forecasts now
|
|
434
|
+
come from the exact Kalman state and match R's `predict()` (means and
|
|
435
|
+
standard errors) to well under a percent, seasonal coefficient standard
|
|
436
|
+
errors match R to four decimals, and `sigma2` reports the profile ML
|
|
437
|
+
estimate. ML fits are normalized to the invertible MA representation
|
|
438
|
+
(the identified parameterization whose `sigma2` is the prediction-error
|
|
439
|
+
variance), and their residuals are now the standardized Kalman
|
|
440
|
+
innovations — constant variance, `mean(residuals**2) == sigma2` exactly,
|
|
441
|
+
matching R's `residuals()`. `arima()` gains R's `init=` parameter
|
|
442
|
+
(warm starts / user starting values, with R's fill and validation
|
|
443
|
+
semantics), and its documentation now states precisely which R
|
|
444
|
+
parameters are supported, which are not yet implemented (`fixed`,
|
|
445
|
+
`xreg`/drift), and which are deliberately not exposed and why. `auto_arima` searches the seasonal orders (P, Q), chooses the
|
|
446
|
+
differencing order with the KPSS test, applies the same near-unit-root
|
|
447
|
+
candidate veto as `forecast::auto.arima`, and follows its stepwise
|
|
448
|
+
walk — on AirPassengers it selects `(2,1,1)(0,1,0)[12]`,
|
|
449
|
+
identical to R, where it previously returned a model 7.5 AICc worse by
|
|
450
|
+
R's own accounting. `adf_test` p-values now come from the MacKinnon
|
|
451
|
+
response surface and match statsmodels' `adfuller` to machine precision
|
|
452
|
+
across the whole range — previously a near-unit-root series could report
|
|
453
|
+
p ≈ 0.44 where the correct value is ≈ 0.92 — and the default regression is
|
|
454
|
+
now `"ct"` (constant + trend), matching `tseries::adf.test`. `kpss_test`'s
|
|
455
|
+
default bandwidth now matches `tseries::kpss.test` (with a new `lshort`
|
|
456
|
+
parameter); at matched bandwidth it reproduces tseries exactly.
|
|
457
|
+
|
|
421
458
|
### 4.6.3 — damped-trend ETS fits no longer stall
|
|
422
459
|
|
|
423
460
|
Damped-trend ETS models (`Ad`) could stop short of their optimum and report
|
|
@@ -371,6 +371,43 @@ pip install pystatistics[dev]
|
|
|
371
371
|
|
|
372
372
|
## What's New
|
|
373
373
|
|
|
374
|
+
### 4.6.4 — seasonal ARIMA criteria, likelihoods and forecasts fixed; ADF p-values corrected
|
|
375
|
+
|
|
376
|
+
Seasonal ARIMA fits reported inflated AIC/AICc/BIC: the criteria counted
|
|
377
|
+
the expanded multiplicative polynomial coefficients instead of the free
|
|
378
|
+
estimated parameters (the airline model was penalised for 15 parameters
|
|
379
|
+
instead of 3). The criteria now use the free-parameter count and match R's
|
|
380
|
+
`stats::arima` exactly, with `aic == -2*log_likelihood + 2*n_params`
|
|
381
|
+
holding on every result. Differenced models no longer estimate a mean
|
|
382
|
+
(R ignores `include.mean` when `d + D > 0`). Models with a persistent
|
|
383
|
+
seasonal AR term also reported log-likelihoods ~80 units below R's (a
|
|
384
|
+
silently-degraded Kalman initialization) — fixed; such fits now reproduce
|
|
385
|
+
R to three decimals. Seasonal forecasts previously dropped the seasonal
|
|
386
|
+
coefficients and their standard errors ignored differencing; forecasts now
|
|
387
|
+
come from the exact Kalman state and match R's `predict()` (means and
|
|
388
|
+
standard errors) to well under a percent, seasonal coefficient standard
|
|
389
|
+
errors match R to four decimals, and `sigma2` reports the profile ML
|
|
390
|
+
estimate. ML fits are normalized to the invertible MA representation
|
|
391
|
+
(the identified parameterization whose `sigma2` is the prediction-error
|
|
392
|
+
variance), and their residuals are now the standardized Kalman
|
|
393
|
+
innovations — constant variance, `mean(residuals**2) == sigma2` exactly,
|
|
394
|
+
matching R's `residuals()`. `arima()` gains R's `init=` parameter
|
|
395
|
+
(warm starts / user starting values, with R's fill and validation
|
|
396
|
+
semantics), and its documentation now states precisely which R
|
|
397
|
+
parameters are supported, which are not yet implemented (`fixed`,
|
|
398
|
+
`xreg`/drift), and which are deliberately not exposed and why. `auto_arima` searches the seasonal orders (P, Q), chooses the
|
|
399
|
+
differencing order with the KPSS test, applies the same near-unit-root
|
|
400
|
+
candidate veto as `forecast::auto.arima`, and follows its stepwise
|
|
401
|
+
walk — on AirPassengers it selects `(2,1,1)(0,1,0)[12]`,
|
|
402
|
+
identical to R, where it previously returned a model 7.5 AICc worse by
|
|
403
|
+
R's own accounting. `adf_test` p-values now come from the MacKinnon
|
|
404
|
+
response surface and match statsmodels' `adfuller` to machine precision
|
|
405
|
+
across the whole range — previously a near-unit-root series could report
|
|
406
|
+
p ≈ 0.44 where the correct value is ≈ 0.92 — and the default regression is
|
|
407
|
+
now `"ct"` (constant + trend), matching `tseries::adf.test`. `kpss_test`'s
|
|
408
|
+
default bandwidth now matches `tseries::kpss.test` (with a new `lshort`
|
|
409
|
+
parameter); at matched bandwidth it reproduces tseries exactly.
|
|
410
|
+
|
|
374
411
|
### 4.6.3 — damped-trend ETS fits no longer stall
|
|
375
412
|
|
|
376
413
|
Damped-trend ETS models (`Ad`) could stop short of their optimum and report
|