pystatistics 4.6.2__tar.gz → 4.6.3__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.3/.release/UNRELEASED.md +69 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/CHANGELOG.md +31 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/PKG-INFO +16 -1
- {pystatistics-4.6.2 → pystatistics-4.6.3}/README.md +15 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pyproject.toml +1 -1
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/__init__.py +1 -1
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_ets_fit.py +54 -8
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_ets_select.py +23 -9
- pystatistics-4.6.3/tests/fixtures/ets_py_params.json +237 -0
- pystatistics-4.6.3/tests/fixtures/ets_r_reference.json +1 -0
- pystatistics-4.6.3/tests/fixtures/generate_ets_py_params.py +74 -0
- pystatistics-4.6.3/tests/fixtures/generate_ets_r_reference.R +155 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/timeseries/test_ets.py +0 -305
- pystatistics-4.6.3/tests/timeseries/test_ets_selection.py +402 -0
- pystatistics-4.6.2/.release/UNRELEASED.md +0 -12
- pystatistics-4.6.2/tests/fixtures/ets_r_reference.json +0 -1
- pystatistics-4.6.2/tests/fixtures/generate_ets_r_reference.R +0 -72
- {pystatistics-4.6.2 → pystatistics-4.6.3}/.github/workflows/publish.yml +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/.github/workflows/trigger-docs-rebuild.yml +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/.gitignore +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/.release/CHECKLIST.md +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/.release/release.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/LICENSE +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/benchmarks/mvnmle_bench.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/benchmarks/mvnmle_gpu_per_eval.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/DESIGN.md +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/GPU_NOTES.md +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/Makefile +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/ROADMAP.md +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/_static/custom.css +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/anova.rst +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/conf.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/core.rst +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/descriptive.rst +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/gam.rst +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/hypothesis.rst +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/index.rst +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/mixed.rst +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/montecarlo.rst +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/multinomial.rst +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/multivariate.rst +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/mvnmle.rst +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/ordinal.rst +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/regression.rst +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/survival.rst +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/timeseries.rst +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/CONVENTIONS.md +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/anova/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/anova/_common.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/anova/_contrasts.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/anova/_levene.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/anova/_posthoc.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/anova/_repeated.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/anova/_ss.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/anova/design.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/anova/solution.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/anova/solvers.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/capabilities.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/compute/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/compute/backend.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/compute/device.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/compute/linalg/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/compute/linalg/batched.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/compute/linalg/cholesky.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/compute/linalg/determinant.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/compute/linalg/qr.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/compute/linalg/solve.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/compute/linalg/svd.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/compute/linalg/triangular.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/compute/optimization/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/compute/optimization/convergence.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/compute/precision.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/compute/timing.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/compute/tolerances.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/compute/torch_interop.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/datasource.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/encoding.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/exceptions.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/protocols.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/result.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/validation.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/descriptive/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/descriptive/_missing.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/descriptive/_quantile_types.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/descriptive/backends/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/descriptive/backends/cpu.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/descriptive/backends/gpu.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/descriptive/design.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/descriptive/solution.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/descriptive/solvers.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/gam/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/gam/_basis.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/gam/_basis_common.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/gam/_basis_cr.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/gam/_basis_tp.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/gam/_common.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/gam/_constraints.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/gam/_criteria.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/gam/_edf.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/gam/_gam.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/gam/_gradient.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/gam/_pirls.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/gam/_smooth.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/gam/_smooth_test.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/gam/solution.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/hypothesis/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/hypothesis/_common.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/hypothesis/_design_factories.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/hypothesis/_p_adjust.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/hypothesis/backends/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/hypothesis/backends/_chisq_test.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/hypothesis/backends/_fisher_test.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/hypothesis/backends/_ks_test.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/hypothesis/backends/_prop_test.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/hypothesis/backends/_t_test.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/hypothesis/backends/_var_test.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/hypothesis/backends/_wilcox_test.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/hypothesis/backends/cpu.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/hypothesis/backends/gpu.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/hypothesis/design.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/hypothesis/solution.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/hypothesis/solvers.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/_chain.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/_encode.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/_rng.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/_visit.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/backends/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/backends/_gpu_encode.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/backends/_gpu_linreg.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/backends/_gpu_logreg.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/backends/_gpu_methods.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/backends/_gpu_polr.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/backends/_gpu_polyreg.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/backends/_gpu_spd.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/backends/cpu.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/backends/gpu.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/datasets.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/design.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/methods/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/methods/_draw.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/methods/_linreg.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/methods/base.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/methods/logreg.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/methods/norm.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/methods/pmm.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/methods/polr.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/methods/polyreg.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/methods/registry.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/pooling.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/solution.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/solvers.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mixed/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mixed/_common.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mixed/_deviance.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mixed/_glmm_optimizer.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mixed/_glmm_pirls.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mixed/_grm_cpu.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mixed/_optimizer.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mixed/_pls.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mixed/_pls_structured.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mixed/_random_effects.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mixed/_satterthwaite.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mixed/_struct_batched.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mixed/_struct_sparse.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mixed/backends/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mixed/backends/grm_gpu.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mixed/design.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mixed/grm.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mixed/grm_solution.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mixed/solution.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mixed/solvers.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/montecarlo/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/montecarlo/_ci.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/montecarlo/_common.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/montecarlo/_influence.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/montecarlo/backends/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/montecarlo/backends/cpu.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/montecarlo/backends/gpu.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/montecarlo/design.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/montecarlo/solution.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/montecarlo/solvers.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/multinomial/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/multinomial/_common.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/multinomial/_likelihood.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/multinomial/_solver.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/multinomial/backends/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/multinomial/backends/gpu_likelihood.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/multinomial/solution.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/multivariate/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/multivariate/_common.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/multivariate/_factor.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/multivariate/_pca.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/multivariate/_rotation.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/multivariate/backends/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/multivariate/backends/gpu_pca.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/multivariate/backends/gpu_pca_randomized.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/_degeneracy.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/_monotone.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/_objectives/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/_objectives/_batched_cholesky.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/_objectives/base.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/_objectives/cpu.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/_objectives/gpu_fp32.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/_objectives/gpu_fp64.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/_objectives/parameterizations.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/_utils.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/backends/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/backends/_direct.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/backends/_em_batched.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/backends/_em_batched_np.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/backends/_em_batched_patterns.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/backends/_em_batched_torch.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/backends/_optimize.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/backends/_squarem.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/backends/cpu.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/backends/em.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/backends/gpu.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/datasets.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/design.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/mcar_test.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/patterns.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/solution.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/solvers.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/ordinal/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/ordinal/_common.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/ordinal/_information.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/ordinal/_likelihood.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/ordinal/_solver.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/ordinal/backends/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/ordinal/backends/gpu_likelihood.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/ordinal/solution.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/py.typed +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/regression/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/regression/_formatting.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/regression/_glm.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/regression/_inputs.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/regression/_linear.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/regression/_nb_theta.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/regression/_penalty.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/regression/backends/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/regression/backends/_irls_step.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/regression/backends/cpu.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/regression/backends/cpu_glm.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/regression/backends/gpu.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/regression/backends/gpu_glm.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/regression/design.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/regression/families.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/regression/solution.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/regression/solvers.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/regression/terms.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/survival/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/survival/_common.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/survival/_cox.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/survival/_discrete.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/survival/_km.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/survival/_logrank.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/survival/backends/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/survival/backends/cpu.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/survival/backends/gpu.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/survival/design.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/survival/solution.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/survival/solvers.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_acf.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_arima_batch.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_arima_factored.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_arima_fit.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_arima_forecast.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_arima_kalman.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_arima_likelihood.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_arima_order.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_arima_solution.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_common.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_decomposition.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_differencing.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_ets_forecast.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_ets_models.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_ets_result.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_loess.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_stationarity.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_stl.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_stl_core.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_stl_robust.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_whittle.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/backends/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/backends/whittle_batch_gpu.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/backends/whittle_gpu.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/anova/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/anova/conftest.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/anova/test_contrasts.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/anova/test_design.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/anova/test_factorial.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/anova/test_levene.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/anova/test_oneway.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/anova/test_posthoc.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/anova/test_r_validation.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/anova/test_repeated_measures.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/benchmark_gpu.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/conftest.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/core/test_backend.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/core/test_datasource.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/core/test_exceptions.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/core/test_qr_solve.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/core/test_repr_html.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/core/test_result.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/core/test_torch_interop.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/core/test_validation.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/descriptive/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/descriptive/conftest.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/descriptive/test_backend_convention.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/descriptive/test_cor.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/descriptive/test_cov.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/descriptive/test_describe.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/descriptive/test_gpu.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/descriptive/test_missing.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/descriptive/test_moments.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/descriptive/test_quantile.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/descriptive/test_r_validation.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_ancova_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_ancova_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_bonferroni_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_bonferroni_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_eta_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_eta_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_levene_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_levene_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_oneway_balanced_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_oneway_balanced_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_oneway_unbalanced_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_oneway_unbalanced_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_rm_mixed_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_rm_mixed_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_rm_within_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_rm_within_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_tukey_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_tukey_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_twoway_balanced_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_twoway_balanced_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_twoway_unbalanced_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_twoway_unbalanced_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/basic_100x3.csv +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/basic_100x3_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/basic_100x3_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/collinear_almost.csv +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/collinear_almost_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/collinear_almost_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_basic_100x5.csv +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_basic_100x5_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_basic_100x5_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_constant_column.csv +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_constant_column_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_constant_column_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_extreme_values.csv +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_extreme_values_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_extreme_values_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_large_1000x10.csv +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_large_1000x10_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_large_1000x10_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_nan_columnwise.csv +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_nan_columnwise_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_nan_columnwise_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_nan_scattered.csv +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_nan_scattered_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_nan_scattered_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_negative_correlation.csv +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_negative_correlation_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_negative_correlation_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_perfect_correlation.csv +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_perfect_correlation_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_perfect_correlation_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_single_column.csv +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_single_column_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_single_column_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_ties.csv +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_ties_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_ties_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/different_scales.csv +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/different_scales_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/different_scales_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/generate_anova_fixtures.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/generate_descriptive_fixtures.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/generate_fixtures.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/generate_glm_fixtures.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/generate_hypothesis_fixtures.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/generate_mixed_fixtures.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/generate_montecarlo_fixtures.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/generate_nb_autotheta_fixtures.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/generate_stl_r_reference.R +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/generate_survival_fixtures.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/generate_weights_offset_fixtures.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_binomial_balanced.csv +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_binomial_balanced_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_binomial_balanced_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_binomial_basic.csv +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_binomial_basic_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_binomial_basic_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_binomial_large.csv +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_binomial_large_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_binomial_large_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_binomial_separated.csv +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_binomial_separated_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_binomial_separated_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_gaussian_basic.csv +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_gaussian_basic_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_gaussian_basic_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_gaussian_large.csv +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_gaussian_large_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_gaussian_large_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_poisson_basic.csv +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_poisson_basic_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_poisson_basic_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_poisson_large_counts.csv +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_poisson_large_counts_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_poisson_large_counts_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_poisson_zeros.csv +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_poisson_zeros_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_poisson_zeros_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/high_noise.csv +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/high_noise_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/high_noise_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_chisq_2x2_yates_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_chisq_2x2_yates_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_chisq_3x3_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_chisq_3x3_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_chisq_gof_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_chisq_gof_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_chisq_gof_unequal_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_chisq_gof_unequal_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_fisher_2x2_less_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_fisher_2x2_less_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_fisher_2x2_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_fisher_2x2_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_fisher_3x3_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_fisher_3x3_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_ks_onesample_norm_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_ks_onesample_norm_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_ks_twosample_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_ks_twosample_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_prop_onesample_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_prop_onesample_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_prop_twosample_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_prop_twosample_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_t_onesample_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_t_onesample_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_t_paired_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_t_paired_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_t_pooled_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_t_pooled_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_t_welch_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_t_welch_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_var_basic_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_var_basic_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_wilcox_ranksum_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_wilcox_ranksum_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_wilcox_signed_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_wilcox_signed_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/ill_conditioned.csv +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/ill_conditioned_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/ill_conditioned_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/large_coeffs.csv +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/large_coeffs_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/large_coeffs_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mc_boot_ci_90_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mc_boot_ci_90_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mc_boot_ci_normal_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mc_boot_ci_normal_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mc_boot_ci_skewed_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mc_boot_ci_skewed_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mc_boot_mean_balanced_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mc_boot_mean_balanced_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mc_boot_mean_ordinary_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mc_boot_mean_ordinary_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mc_boot_median_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mc_boot_median_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mc_boot_variance_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mc_boot_variance_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mc_perm_greater_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mc_perm_greater_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mc_perm_not_significant_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mc_perm_not_significant_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mc_perm_significant_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mc_perm_significant_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mixed/glmm_binomial.csv +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mixed/glmm_poisson.csv +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mixed/lmm_crossed.csv +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mixed/lmm_intercept.csv +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mixed/lmm_ml.csv +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mixed/lmm_no_effect.csv +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mixed/lmm_slope.csv +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mixed/mixed_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mixed/mixed_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/nb_autotheta_cases.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/nb_autotheta_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/near_square.csv +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/near_square_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/near_square_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/no_intercept.csv +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/no_intercept_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/no_intercept_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/run_r_anova_validation.R +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/run_r_descriptive_validation.R +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/run_r_glm_validation.R +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/run_r_hypothesis_validation.R +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/run_r_mixed_validation.R +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/run_r_montecarlo_validation.R +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/run_r_nb_autotheta_validation.R +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/run_r_survival_validation.R +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/run_r_validation.R +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/run_r_weights_offset_validation.R +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/run_validation.sh +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/small_noise.csv +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/small_noise_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/small_noise_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/stl_r_reference.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_cox_breslow_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_cox_breslow_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_cox_single_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_cox_single_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_cox_ties_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_cox_ties_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_cox_two_cov_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_cox_two_cov_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_km_basic_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_km_basic_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_km_heavy_cens_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_km_heavy_cens_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_km_loglog_ci_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_km_loglog_ci_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_km_no_cens_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_km_no_cens_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_km_plain_ci_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_km_plain_ci_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_km_ties_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_km_ties_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_lr_peto_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_lr_peto_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_lr_three_group_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_lr_three_group_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_lr_two_group_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_lr_two_group_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/tall_skinny.csv +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/tall_skinny_meta.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/tall_skinny_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/validate_against_r.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/weights_offset_cases.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/weights_offset_r_results.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/gam/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/gam/test_gam.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/hypothesis/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/hypothesis/conftest.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/hypothesis/test_backend_convention.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/hypothesis/test_chisq_test.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/hypothesis/test_design_split.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/hypothesis/test_fisher_test.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/hypothesis/test_gpu.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/hypothesis/test_ks_test.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/hypothesis/test_p_adjust.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/hypothesis/test_prop_test.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/hypothesis/test_r_validation.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/hypothesis/test_t_test.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/hypothesis/test_var_test.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/hypothesis/test_wilcox_test.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/references/generate_categorical_fixtures.R +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/references/generate_mice_fixtures.R +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/references/mice_categorical_data.csv +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/references/mice_categorical_reference.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/references/mice_reference.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/references/mice_validation_complete.csv +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/references/mice_validation_data.csv +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/test_categorical.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/test_datasets.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/test_design.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/test_gpu.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/test_gpu_glm_separation.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/test_gpu_mps.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/test_gpu_polr_draw.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/test_gpu_polr_separation.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/test_methods.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/test_mice.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/test_polr_ridge_characterization.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/test_pooling.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/test_r_validation.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/test_r_validation_categorical.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/test_rng.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/test_visit.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mixed/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mixed/conftest.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mixed/test_compute_se.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mixed/test_conf_int.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mixed/test_glmm.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mixed/test_grm.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mixed/test_lmm_crossed.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mixed/test_lmm_extreme_ratio.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mixed/test_lmm_intercept.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mixed/test_lmm_nested.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mixed/test_lmm_slope.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mixed/test_pls.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mixed/test_r_validation.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mixed/test_random_effects.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mixed/test_satterthwaite.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mixed/test_singular.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mixed/test_structured.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/montecarlo/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/montecarlo/conftest.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/montecarlo/test_backend_convention.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/montecarlo/test_batched_solver.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/montecarlo/test_boot_ci.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/montecarlo/test_bootstrap.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/montecarlo/test_gpu.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/montecarlo/test_influence.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/montecarlo/test_permutation.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/montecarlo/test_r_validation.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/multinomial/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/multinomial/test_conf_int.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/multinomial/test_multinom.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/multivariate/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/multivariate/test_multivariate.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/references/apple_em_reference.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/references/apple_reference.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/references/generate_em_fixtures.R +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/references/little_mcar_apple.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/references/little_mcar_complete.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/references/little_mcar_extreme.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/references/little_mcar_missvals.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/references/little_mcar_simple_mcar.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/references/little_mcar_summary.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/references/missvals_em_reference.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/references/missvals_reference.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/references/small_test_reference.json +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/test_backend_routing.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/test_degeneracy.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/test_em.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/test_gpu.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/test_gpu_batched_equiv.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/test_gpu_unpack_equiv.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/test_mcar.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/test_mlest.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/test_monotone.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/test_no_silent_fallback.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/test_optimize.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/test_pattern_codes_large_p.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/test_squarem.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/ordinal/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/ordinal/test_conf_int.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/ordinal/test_information.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/ordinal/test_ordinal.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/benchmark.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/benchmark.r +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/conftest.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_conf_int.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_fit.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_gamma_nb.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_glm.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_glm_gpu.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_glm_r_validation.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_gpu_fp32_acceptance.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_gpu_mps_cg.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_gpu_se_ill_conditioned.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_ic_dispersion_r_match.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_irls_step.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_module_split.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_nb_autotheta_r_validation.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_r_validation.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_ridge.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_stress_gpu.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_terms.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_terms_gpu.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_weights_offset.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_weights_offset_gpu.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_weights_offset_r_validation.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/survival/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/survival/conftest.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/survival/test_conf_int.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/survival/test_coxph.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/survival/test_discrete_conf_int.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/survival/test_discrete_time.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/survival/test_gpu.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/survival/test_kaplan_meier.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/survival/test_logrank.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/survival/test_r_validation.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/survival/test_uniform_accessors_and_errors.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/survival/test_warnings.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/test_code_quality.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/timeseries/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/timeseries/test_acf_stationarity.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/timeseries/test_arima.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/timeseries/test_decomposition.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/timeseries/test_loess.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/timeseries/test_stl_r_parity.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/timeseries/test_stl_robust.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/validation/README.md +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/validation/pyproject.toml +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/validation/pystatsval/__init__.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/validation/pystatsval/device.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/validation/pystatsval/estimates.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/validation/pystatsval/measure.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/validation/pystatsval/record.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/validation/pystatsval/rrunner.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/validation/pystatsval/serialize.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/validation/pystatsval/timing.py +0 -0
- {pystatistics-4.6.2 → pystatistics-4.6.3}/validation/tests/test_harness.py +0 -0
|
@@ -0,0 +1,69 @@
|
|
|
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: damped-trend ETS fits no longer stall (damped fits improve
|
|
13
|
+
or stay identical; every other fit changes only if it previously ran out
|
|
14
|
+
of optimiser budget).** Two compounding defects in
|
|
15
|
+
`timeseries/_ets_fit.py`: (1) R's `initparam` starts `phi` at 0.9782 —
|
|
16
|
+
99% of the way to the 0.98 usual-region bound — which is fine for R's
|
|
17
|
+
derivative-free Nelder-Mead but saturates our logit transform, so the
|
|
18
|
+
numerical gradient in the phi direction was ~4% of mid-range (sigmoid
|
|
19
|
+
derivative 0.0099 vs 0.25) and L-BFGS-B crawled; (2) scipy's default
|
|
20
|
+
`maxfun=15000` allows only ~830 iterations for a 17-parameter seasonal
|
|
21
|
+
model (numerical gradient = n+1 evals/iteration), so the requested
|
|
22
|
+
`maxiter=1000` was unreachable and co2 `MAdM` died with "EVALUATIONS
|
|
23
|
+
EXCEEDS LIMIT" at `converged=False`, ~1.7 AICc worse than its true
|
|
24
|
+
optimum. Fix: damped models now optimise from BOTH a mid-range phi start
|
|
25
|
+
(0.9) and R's initparam start (0.9782), keeping the better optimum, and
|
|
26
|
+
`maxfun = max(15000, max_iter*(n_free+1)*2)` — floored at scipy's old
|
|
27
|
+
default so no fit ever gets a smaller budget than 4.6.2 gave it. That
|
|
28
|
+
floor makes the guarantee provable: the R-start leg reproduces the 4.6.2
|
|
29
|
+
trajectory (deterministic, with at least the old budget), so damped
|
|
30
|
+
results are never worse, and any fit that terminated within the old
|
|
31
|
+
budget (every reference fit does) is bit-identical unless damped. The
|
|
32
|
+
phi bounds stay R's (0.8, 0.98). Verified at full precision on 15 damped
|
|
33
|
+
reference fits: 7 improved (co2 MAdM aicc 172.592→170.898 and now
|
|
34
|
+
converged, beating R's own damped optimum; usaccdeaths MAdA −0.25), 8
|
|
35
|
+
bit-identical, zero worse, all `converged=True`; all non-damped
|
|
36
|
+
reference fits bit-identical; all 10 reference ZZZ selections unchanged
|
|
37
|
+
(on non-reference series a damped candidate whose fit improved can now
|
|
38
|
+
legitimately win a selection it previously lost — that is the point of
|
|
39
|
+
the fix).
|
|
40
|
+
- **timeseries: `converged=False` false-negative on damped ETS fits fixed**
|
|
41
|
+
— it was the evaluation-budget exhaustion above, not a flag-logic bug; a
|
|
42
|
+
damped fit that reaches its optimum now reports `converged=True` (new
|
|
43
|
+
regression tests pin this for co2/airpassengers/usaccdeaths/lynx/nile/
|
|
44
|
+
wwwusage damped fits).
|
|
45
|
+
- **timeseries/tests: honest cross-engine ETS verification encoded as a
|
|
46
|
+
regression gate.** A prior review claimed our ZZZ selections were worse
|
|
47
|
+
than R's because refitting our picked model string in R gave a higher
|
|
48
|
+
AICc — but that only re-runs R's own Nelder-Mead (the optimiser being
|
|
49
|
+
compared) and reproduces its stall. The fair test — evaluating OUR fitted
|
|
50
|
+
parameters with R's own likelihood code `forecast:::pegelsresid.C`
|
|
51
|
+
(seasonal states reversed into R's ordering) — shows our pick has strictly
|
|
52
|
+
lower AICc under R's own criterion on all 6 divergent reference datasets
|
|
53
|
+
(e.g. co2: our M,A,M scores 1697.2 in R vs 1722.6 for R's chosen M,Ad,M)
|
|
54
|
+
and equal-or-better on the 4 agreeing ones, with every pick admissible
|
|
55
|
+
under R's `admissible()`. The fixture regeneration is now two-stage
|
|
56
|
+
(`tests/fixtures/generate_ets_py_params.py` dumps our fitted parameters,
|
|
57
|
+
`generate_ets_r_reference.R` cross-scores them; the transplant harness
|
|
58
|
+
self-validates by reproducing R's own fits' log-likelihoods before
|
|
59
|
+
scoring foreign parameters, and stores `py_pick`/`py_pick_aicc_in_r`/
|
|
60
|
+
`py_pick_admissible` per dataset). New tests
|
|
61
|
+
(`test_selection_dominates_r_under_r_own_likelihood`, drift-guarded on
|
|
62
|
+
the stored pick) fail if any future change degrades a selection to
|
|
63
|
+
something R's own numbers call worse. `_ets_select.py`'s parity
|
|
64
|
+
documentation now states this verification method explicitly instead of
|
|
65
|
+
a vague "better than R". The selection/parity/damped-convergence tests
|
|
66
|
+
moved to a new `tests/timeseries/test_ets_selection.py` (`test_ets.py`
|
|
67
|
+
had exceeded the 500-LoC limit; now 382 + 262). The R generator now
|
|
68
|
+
refuses to run without the stage-1 params dump instead of silently
|
|
69
|
+
writing a fixture missing the fields ten tests require.
|
|
@@ -1,5 +1,36 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 4.6.3
|
|
4
|
+
|
|
5
|
+
Damped-trend ETS fits no longer stall; ETS-vs-R verification strengthened.
|
|
6
|
+
|
|
7
|
+
- **Damped-trend ETS models (`Ad`) could stall short of their optimum and
|
|
8
|
+
report `converged=False` — fixed.** The damping parameter started so close
|
|
9
|
+
to its upper bound that the optimiser could barely move it, and larger
|
|
10
|
+
seasonal models could also exhaust their evaluation budget mid-fit (e.g.
|
|
11
|
+
`ets(co2, model="MAdM", period=12)` returned `converged=False` about 1.7
|
|
12
|
+
AICc above its true optimum). Damped models are now optimised from two
|
|
13
|
+
starting points with the better result kept — one of them reproduces the
|
|
14
|
+
previous behaviour with at least the previous evaluation budget, so
|
|
15
|
+
damped fits improve or stay identical, never worse — and the evaluation
|
|
16
|
+
budget now scales with model size (never below its old value). Converged
|
|
17
|
+
damped fits now say so. Any fit that finished within the old budget is
|
|
18
|
+
bit-identical unless damped; on every reference dataset all non-damped
|
|
19
|
+
fits are bit-identical and automatic `"ZZZ"` selection picks the same
|
|
20
|
+
model as before. On other series a damped candidate whose fit improved
|
|
21
|
+
can now win a selection it previously lost — the intended effect.
|
|
22
|
+
- **The claim that `ets()` model selection beats `forecast::ets` on
|
|
23
|
+
divergent picks is now verified the fair way and enforced by tests.**
|
|
24
|
+
Where automatic selection differs from R (6 of 10 reference datasets),
|
|
25
|
+
our selected model's fitted parameters are evaluated by *R's own
|
|
26
|
+
likelihood code* and score a strictly lower AICc there than the model R
|
|
27
|
+
selects (e.g. monthly CO2: 1697.2 vs 1722.6), while remaining in R's
|
|
28
|
+
admissible (forecast-stable) parameter region. Refitting the same model
|
|
29
|
+
string in R understates our fit because it re-runs R's optimiser, which
|
|
30
|
+
is what stalls in the first place. The cross-scored values ship in the
|
|
31
|
+
test fixtures and regression tests fail if a future change makes any
|
|
32
|
+
selection worse under R's own numbers.
|
|
33
|
+
|
|
3
34
|
## 4.6.2
|
|
4
35
|
|
|
5
36
|
STL decomposition rewritten to match R exactly and now as fast as R's
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pystatistics
|
|
3
|
-
Version: 4.6.
|
|
3
|
+
Version: 4.6.3
|
|
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,21 @@ pip install pystatistics[dev]
|
|
|
418
418
|
|
|
419
419
|
## What's New
|
|
420
420
|
|
|
421
|
+
### 4.6.3 — damped-trend ETS fits no longer stall
|
|
422
|
+
|
|
423
|
+
Damped-trend ETS models (`Ad`) could stop short of their optimum and report
|
|
424
|
+
`converged=False` (the damping parameter started nearly pinned to its upper
|
|
425
|
+
bound, and large seasonal fits could exhaust their evaluation budget).
|
|
426
|
+
Damped models are now optimised from two starting points with the better
|
|
427
|
+
result kept; damped fits improve or stay identical, non-damped fits are
|
|
428
|
+
unchanged, and automatic `"ZZZ"` selection picks the same models on every
|
|
429
|
+
reference dataset (elsewhere an improved damped fit can now win a selection
|
|
430
|
+
it previously lost — the intended effect). Where that
|
|
431
|
+
selection differs from R's `forecast::ets`, the choice is now verified by
|
|
432
|
+
evaluating the fitted parameters under R's own likelihood code — our pick
|
|
433
|
+
scores a strictly lower AICc there on every divergent reference dataset —
|
|
434
|
+
and regression tests enforce that this stays true.
|
|
435
|
+
|
|
421
436
|
### 4.6.2 — STL matches R exactly and runs as fast; ETS automatic model selection
|
|
422
437
|
|
|
423
438
|
`stl()` was rewritten after validation showed it leaking trend into the
|
|
@@ -371,6 +371,21 @@ pip install pystatistics[dev]
|
|
|
371
371
|
|
|
372
372
|
## What's New
|
|
373
373
|
|
|
374
|
+
### 4.6.3 — damped-trend ETS fits no longer stall
|
|
375
|
+
|
|
376
|
+
Damped-trend ETS models (`Ad`) could stop short of their optimum and report
|
|
377
|
+
`converged=False` (the damping parameter started nearly pinned to its upper
|
|
378
|
+
bound, and large seasonal fits could exhaust their evaluation budget).
|
|
379
|
+
Damped models are now optimised from two starting points with the better
|
|
380
|
+
result kept; damped fits improve or stay identical, non-damped fits are
|
|
381
|
+
unchanged, and automatic `"ZZZ"` selection picks the same models on every
|
|
382
|
+
reference dataset (elsewhere an improved damped fit can now win a selection
|
|
383
|
+
it previously lost — the intended effect). Where that
|
|
384
|
+
selection differs from R's `forecast::ets`, the choice is now verified by
|
|
385
|
+
evaluating the fitted parameters under R's own likelihood code — our pick
|
|
386
|
+
scores a strictly lower AICc there on every divergent reference dataset —
|
|
387
|
+
and regression tests enforce that this stays true.
|
|
388
|
+
|
|
374
389
|
### 4.6.2 — STL matches R exactly and runs as fast; ETS automatic model selection
|
|
375
390
|
|
|
376
391
|
`stl()` was rewritten after validation showed it leaking trend into the
|
|
@@ -542,8 +542,21 @@ def fit_ets_model(
|
|
|
542
542
|
g0 = _EPS + 0.05 * (min(1.0 - _EPS, 1.0 - a0) - _EPS)
|
|
543
543
|
theta_smooth0[i] = _logit(g0, _EPS, 1.0 - a0)
|
|
544
544
|
i += 1
|
|
545
|
-
|
|
546
|
-
|
|
545
|
+
phi_free = spec.damped and phi is None
|
|
546
|
+
if phi_free:
|
|
547
|
+
# R's initparam starts phi at 0.9782 — 99% of the way to the 0.98
|
|
548
|
+
# bound. That is fine for R's derivative-free Nelder-Mead but
|
|
549
|
+
# saturates the logit transform for L-BFGS-B: the sigmoid
|
|
550
|
+
# derivative there is ~4% of mid-range (0.0099 vs 0.25), so the
|
|
551
|
+
# numerical gradient in the phi direction all but vanishes and
|
|
552
|
+
# damped fits crawl (co2 MAdM exhausted its evaluation budget
|
|
553
|
+
# unconverged). A
|
|
554
|
+
# mid-range start keeps the phi gradient alive but can land in the
|
|
555
|
+
# other phi basin on some series, so damped fits are run from BOTH
|
|
556
|
+
# starts and the better optimum kept (see the optimiser call) —
|
|
557
|
+
# provably never worse than the single R start. The bounds
|
|
558
|
+
# themselves stay R's (0.8, 0.98) usual region.
|
|
559
|
+
p0 = 0.9
|
|
547
560
|
theta_smooth0[i] = _logit(p0, _PHI_BOUNDS[0], _PHI_BOUNDS[1])
|
|
548
561
|
|
|
549
562
|
# Free initial states (unbounded). Seasonal models optimise m - 1
|
|
@@ -570,12 +583,45 @@ def fit_ets_model(
|
|
|
570
583
|
theta_full, y_arr, spec, fixed_smooth, alpha_box, n_smooth
|
|
571
584
|
)
|
|
572
585
|
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
586
|
+
# Damped models are optimised from two phi starts (mid-range 0.9 and
|
|
587
|
+
# R's initparam 0.9782 — see the phi_free comment above) and the
|
|
588
|
+
# better optimum kept; other models run once.
|
|
589
|
+
starts = [theta0]
|
|
590
|
+
if phi_free:
|
|
591
|
+
alt = theta0.copy()
|
|
592
|
+
alt[n_smooth - 1] = _logit(
|
|
593
|
+
_PHI_BOUNDS[0] + 0.99 * (_PHI_BOUNDS[1] - _PHI_BOUNDS[0]),
|
|
594
|
+
_PHI_BOUNDS[0],
|
|
595
|
+
_PHI_BOUNDS[1],
|
|
596
|
+
)
|
|
597
|
+
starts.append(alt)
|
|
598
|
+
|
|
599
|
+
# maxfun must scale with dimension or it, not maxiter, becomes the
|
|
600
|
+
# binding limit: scipy's default (15000) allows only ~830 iterations
|
|
601
|
+
# for a 17-parameter seasonal model (numerical gradient = n+1 evals
|
|
602
|
+
# per iteration), so requesting maxiter=1000 was unreachable and large
|
|
603
|
+
# damped fits died with "EVALUATIONS EXCEEDS LIMIT" (converged=False).
|
|
604
|
+
# (n+1) evals per gradient, x2 headroom for line searches; floored at
|
|
605
|
+
# scipy's old default so no fit ever gets a SMALLER budget than
|
|
606
|
+
# before — that floor is what makes the two-start damped strategy
|
|
607
|
+
# provably never worse (the R-start leg reproduces the old
|
|
608
|
+
# trajectory) and keeps every other fit bit-identical.
|
|
609
|
+
maxfun = max(15000, max_iter * (len(free_idx) + 1) * 2)
|
|
610
|
+
result = None
|
|
611
|
+
for start in starts:
|
|
612
|
+
res = minimize(
|
|
613
|
+
_objective,
|
|
614
|
+
start[free_idx],
|
|
615
|
+
method="L-BFGS-B",
|
|
616
|
+
options={
|
|
617
|
+
"maxiter": max_iter,
|
|
618
|
+
"maxfun": maxfun,
|
|
619
|
+
"ftol": tol,
|
|
620
|
+
"gtol": tol,
|
|
621
|
+
},
|
|
622
|
+
)
|
|
623
|
+
if result is None or res.fun < result.fun:
|
|
624
|
+
result = res
|
|
579
625
|
converged = result.success
|
|
580
626
|
|
|
581
627
|
# Reconstruct full theta and map back to bounded values
|
|
@@ -57,15 +57,29 @@ with the remaining one fixed by normalisation — see ``_ets_fit.py``),
|
|
|
57
57
|
so per-candidate parameter counts and log-likelihoods are directly
|
|
58
58
|
comparable to R's. The *selected model* usually matches but can still
|
|
59
59
|
differ, because the engines optimise differently: PyStatistics uses
|
|
60
|
-
L-BFGS-B on logit-transformed parameters
|
|
61
|
-
seasonal candidates R's optimiser
|
|
62
|
-
optimum (tens of log-likelihood
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
60
|
+
L-BFGS-B on logit-transformed parameters (damped models from two phi
|
|
61
|
+
starts), R uses Nelder-Mead, and on seasonal candidates R's optimiser
|
|
62
|
+
frequently stalls well short of the optimum (tens of log-likelihood
|
|
63
|
+
units on the classic benchmark series).
|
|
64
|
+
|
|
65
|
+
Every divergence is verified by the only fair cross-engine test:
|
|
66
|
+
PyStatistics' *fitted parameters* are evaluated by **R's own likelihood
|
|
67
|
+
code** (``forecast:::pegelsresid.C``, with the seasonal states reversed
|
|
68
|
+
into R's ordering; the transplant harness is self-validated by first
|
|
69
|
+
reproducing R's own fits' log-likelihoods to 1e-8 relative tolerance).
|
|
70
|
+
Refitting the same
|
|
71
|
+
model string in R would merely re-run R's Nelder-Mead — the very
|
|
72
|
+
optimiser being compared — and reproduce its stall. Under that test,
|
|
73
|
+
on all six divergent reference selections (AirPassengers, co2, lynx and
|
|
74
|
+
variants in ``tests/fixtures/ets_r_reference.json``) the PyStatistics
|
|
75
|
+
pick has a strictly lower AICc under R's own likelihood than the model
|
|
76
|
+
``forecast::ets`` selects, and its parameters are admissible
|
|
77
|
+
(forecast-stable) under R's own ``admissible()`` check. The scored
|
|
78
|
+
values are stored in the fixture (``py_pick_aicc_in_r``) and pinned by
|
|
79
|
+
regression tests; regenerate with ``generate_ets_py_params.py`` then
|
|
80
|
+
``generate_ets_r_reference.R``. The tables disagree about the optima,
|
|
81
|
+
not the criterion. Each returned solution discloses its full candidate
|
|
82
|
+
IC table in ``info["selection"]``, so any selection can be audited.
|
|
69
83
|
"""
|
|
70
84
|
|
|
71
85
|
from __future__ import annotations
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
{
|
|
2
|
+
"airpassengers": {
|
|
3
|
+
"picked": "ETS(M,A,M)",
|
|
4
|
+
"error": "M",
|
|
5
|
+
"trend": "A",
|
|
6
|
+
"season": "M",
|
|
7
|
+
"damped": false,
|
|
8
|
+
"period": 12,
|
|
9
|
+
"alpha": 0.7409340242098023,
|
|
10
|
+
"beta": 0.00010000076169295685,
|
|
11
|
+
"gamma": 0.00010005920080370926,
|
|
12
|
+
"phi": null,
|
|
13
|
+
"init_level": 122.79644644403064,
|
|
14
|
+
"init_trend": 2.129237987080646,
|
|
15
|
+
"init_season": [
|
|
16
|
+
0.9065254936956091,
|
|
17
|
+
0.8885773704991264,
|
|
18
|
+
1.012442088634839,
|
|
19
|
+
0.9820704726765775,
|
|
20
|
+
0.9810735260927437,
|
|
21
|
+
1.1101215440958783,
|
|
22
|
+
1.2318886786272436,
|
|
23
|
+
1.2201103859365203,
|
|
24
|
+
1.056876738889878,
|
|
25
|
+
0.9199475432085753,
|
|
26
|
+
0.7968985140153373,
|
|
27
|
+
0.8934676436276712
|
|
28
|
+
],
|
|
29
|
+
"aicc_py_convention": 1083.85273722301,
|
|
30
|
+
"converged": true
|
|
31
|
+
},
|
|
32
|
+
"usaccdeaths": {
|
|
33
|
+
"picked": "ETS(A,N,A)",
|
|
34
|
+
"error": "A",
|
|
35
|
+
"trend": "N",
|
|
36
|
+
"season": "A",
|
|
37
|
+
"damped": false,
|
|
38
|
+
"period": 12,
|
|
39
|
+
"alpha": 0.5786178234192573,
|
|
40
|
+
"beta": null,
|
|
41
|
+
"gamma": 0.0001,
|
|
42
|
+
"phi": null,
|
|
43
|
+
"init_level": 9741.666419160323,
|
|
44
|
+
"init_trend": null,
|
|
45
|
+
"init_season": [
|
|
46
|
+
-792.958856989011,
|
|
47
|
+
-1544.866345494225,
|
|
48
|
+
-758.2273234609411,
|
|
49
|
+
-536.1023594337732,
|
|
50
|
+
322.07088058544423,
|
|
51
|
+
802.4044677641663,
|
|
52
|
+
1668.926889520922,
|
|
53
|
+
974.1591215399224,
|
|
54
|
+
-66.02205748708626,
|
|
55
|
+
232.711277283187,
|
|
56
|
+
-282.0077245809384,
|
|
57
|
+
-20.087969247666628
|
|
58
|
+
],
|
|
59
|
+
"aicc_py_convention": 1039.4141176863654,
|
|
60
|
+
"converged": true
|
|
61
|
+
},
|
|
62
|
+
"co2": {
|
|
63
|
+
"picked": "ETS(M,A,M)",
|
|
64
|
+
"error": "M",
|
|
65
|
+
"trend": "A",
|
|
66
|
+
"season": "M",
|
|
67
|
+
"damped": false,
|
|
68
|
+
"period": 12,
|
|
69
|
+
"alpha": 0.6621853124252347,
|
|
70
|
+
"beta": 0.010608746654465878,
|
|
71
|
+
"gamma": 0.0007307829692142658,
|
|
72
|
+
"phi": null,
|
|
73
|
+
"init_level": 315.3608726579102,
|
|
74
|
+
"init_trend": 0.08480820178629678,
|
|
75
|
+
"init_season": [
|
|
76
|
+
0.9998757011060313,
|
|
77
|
+
1.0018551346557558,
|
|
78
|
+
1.0040645319341568,
|
|
79
|
+
1.0074253427806026,
|
|
80
|
+
1.008857198520008,
|
|
81
|
+
1.006905738849209,
|
|
82
|
+
1.0024116732983697,
|
|
83
|
+
0.9962849951627571,
|
|
84
|
+
0.9908973218114535,
|
|
85
|
+
0.9903511862513498,
|
|
86
|
+
0.9938810738299224,
|
|
87
|
+
0.997190101800384
|
|
88
|
+
],
|
|
89
|
+
"aicc_py_convention": 147.8320733184404,
|
|
90
|
+
"converged": true
|
|
91
|
+
},
|
|
92
|
+
"nile": {
|
|
93
|
+
"picked": "ETS(M,N,N)",
|
|
94
|
+
"error": "M",
|
|
95
|
+
"trend": "N",
|
|
96
|
+
"season": "N",
|
|
97
|
+
"damped": false,
|
|
98
|
+
"period": 1,
|
|
99
|
+
"alpha": 0.15120889034467438,
|
|
100
|
+
"beta": null,
|
|
101
|
+
"gamma": null,
|
|
102
|
+
"phi": null,
|
|
103
|
+
"init_level": 1087.754615467445,
|
|
104
|
+
"init_trend": null,
|
|
105
|
+
"init_season": null,
|
|
106
|
+
"aicc_py_convention": 1281.822594111822,
|
|
107
|
+
"converged": true
|
|
108
|
+
},
|
|
109
|
+
"wwwusage": {
|
|
110
|
+
"picked": "ETS(A,Ad,N)",
|
|
111
|
+
"error": "A",
|
|
112
|
+
"trend": "Ad",
|
|
113
|
+
"season": "N",
|
|
114
|
+
"damped": true,
|
|
115
|
+
"period": 1,
|
|
116
|
+
"alpha": 0.9998999990820521,
|
|
117
|
+
"beta": 0.9998998503151512,
|
|
118
|
+
"gamma": null,
|
|
119
|
+
"phi": 0.8066680914946358,
|
|
120
|
+
"init_level": 92.9583864776785,
|
|
121
|
+
"init_trend": -6.14670285926298,
|
|
122
|
+
"init_season": null,
|
|
123
|
+
"aicc_py_convention": 540.9123279450281,
|
|
124
|
+
"converged": true
|
|
125
|
+
},
|
|
126
|
+
"lynx": {
|
|
127
|
+
"picked": "ETS(M,A,N)",
|
|
128
|
+
"error": "M",
|
|
129
|
+
"trend": "A",
|
|
130
|
+
"season": "N",
|
|
131
|
+
"damped": false,
|
|
132
|
+
"period": 1,
|
|
133
|
+
"alpha": 0.9999,
|
|
134
|
+
"beta": 0.0001,
|
|
135
|
+
"gamma": null,
|
|
136
|
+
"phi": null,
|
|
137
|
+
"init_level": 104.80092766288334,
|
|
138
|
+
"init_trend": 89.34198077164446,
|
|
139
|
+
"init_season": null,
|
|
140
|
+
"aicc_py_convention": 1825.536853187305,
|
|
141
|
+
"converged": true
|
|
142
|
+
},
|
|
143
|
+
"diff_nile": {
|
|
144
|
+
"picked": "ETS(A,N,N)",
|
|
145
|
+
"error": "A",
|
|
146
|
+
"trend": "N",
|
|
147
|
+
"season": "N",
|
|
148
|
+
"damped": false,
|
|
149
|
+
"period": 1,
|
|
150
|
+
"alpha": 0.00010008018498308305,
|
|
151
|
+
"beta": null,
|
|
152
|
+
"gamma": null,
|
|
153
|
+
"phi": null,
|
|
154
|
+
"init_level": -3.837001886361001,
|
|
155
|
+
"init_trend": null,
|
|
156
|
+
"init_season": null,
|
|
157
|
+
"aicc_py_convention": 1300.907562564694,
|
|
158
|
+
"converged": true
|
|
159
|
+
},
|
|
160
|
+
"airpassengers_zzn": {
|
|
161
|
+
"picked": "ETS(M,A,N)",
|
|
162
|
+
"error": "M",
|
|
163
|
+
"trend": "A",
|
|
164
|
+
"season": "N",
|
|
165
|
+
"damped": false,
|
|
166
|
+
"period": 1,
|
|
167
|
+
"alpha": 0.9998997260462488,
|
|
168
|
+
"beta": 0.00010000511832230999,
|
|
169
|
+
"gamma": null,
|
|
170
|
+
"phi": null,
|
|
171
|
+
"init_level": 106.6432773543166,
|
|
172
|
+
"init_trend": 4.165946497198817,
|
|
173
|
+
"init_season": null,
|
|
174
|
+
"aicc_py_convention": 1366.4125174351261,
|
|
175
|
+
"converged": true
|
|
176
|
+
},
|
|
177
|
+
"airpassengers_azz": {
|
|
178
|
+
"picked": "ETS(A,A,A)",
|
|
179
|
+
"error": "A",
|
|
180
|
+
"trend": "A",
|
|
181
|
+
"season": "A",
|
|
182
|
+
"damped": false,
|
|
183
|
+
"period": 12,
|
|
184
|
+
"alpha": 0.25276704707869657,
|
|
185
|
+
"beta": 0.00010000741679970583,
|
|
186
|
+
"gamma": 0.7472328134083621,
|
|
187
|
+
"phi": null,
|
|
188
|
+
"init_level": 117.90776886286908,
|
|
189
|
+
"init_trend": 2.5946657964894193,
|
|
190
|
+
"init_season": [
|
|
191
|
+
-8.500669715398159,
|
|
192
|
+
-2.928236169263969,
|
|
193
|
+
9.55479917171517,
|
|
194
|
+
4.317353244662001,
|
|
195
|
+
-4.423572632956558,
|
|
196
|
+
9.679454457800507,
|
|
197
|
+
21.866719726803083,
|
|
198
|
+
19.38694357550404,
|
|
199
|
+
5.159781796259593,
|
|
200
|
+
-13.774991234367437,
|
|
201
|
+
-28.379683743002367,
|
|
202
|
+
-11.957898477755913
|
|
203
|
+
],
|
|
204
|
+
"aicc_py_convention": 1168.8597581594572,
|
|
205
|
+
"converged": true
|
|
206
|
+
},
|
|
207
|
+
"airpassengers_mzz": {
|
|
208
|
+
"picked": "ETS(M,A,M)",
|
|
209
|
+
"error": "M",
|
|
210
|
+
"trend": "A",
|
|
211
|
+
"season": "M",
|
|
212
|
+
"damped": false,
|
|
213
|
+
"period": 12,
|
|
214
|
+
"alpha": 0.7409340242098023,
|
|
215
|
+
"beta": 0.00010000076169295685,
|
|
216
|
+
"gamma": 0.00010005920080370926,
|
|
217
|
+
"phi": null,
|
|
218
|
+
"init_level": 122.79644644403064,
|
|
219
|
+
"init_trend": 2.129237987080646,
|
|
220
|
+
"init_season": [
|
|
221
|
+
0.9065254936956091,
|
|
222
|
+
0.8885773704991264,
|
|
223
|
+
1.012442088634839,
|
|
224
|
+
0.9820704726765775,
|
|
225
|
+
0.9810735260927437,
|
|
226
|
+
1.1101215440958783,
|
|
227
|
+
1.2318886786272436,
|
|
228
|
+
1.2201103859365203,
|
|
229
|
+
1.056876738889878,
|
|
230
|
+
0.9199475432085753,
|
|
231
|
+
0.7968985140153373,
|
|
232
|
+
0.8934676436276712
|
|
233
|
+
],
|
|
234
|
+
"aicc_py_convention": 1083.85273722301,
|
|
235
|
+
"converged": true
|
|
236
|
+
}
|
|
237
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"selection":{"airpassengers":{"name":"airpassengers","x":[112,118,132,129,121,135,148,148,136,119,104,118,115,126,141,135,125,149,170,170,158,133,114,140,145,150,178,163,172,178,199,199,184,162,146,166,171,180,193,181,183,218,230,242,209,191,172,194,196,196,236,235,229,243,264,272,237,211,180,201,204,188,235,227,234,264,302,293,259,229,203,229,242,233,267,269,270,315,364,347,312,274,237,278,284,277,317,313,318,374,413,405,355,306,271,306,315,301,356,348,355,422,465,467,404,347,305,336,340,318,362,348,363,435,491,505,404,359,310,337,360,342,406,396,420,472,548,559,463,407,362,405,417,391,419,461,472,535,622,606,508,461,390,432],"period":12,"model_arg":"ZZZ","method":"ETS(M,Ad,M)","components":["M","A","M","TRUE"],"loglik":-679.583216236962,"aic":1395.16643247392,"aicc":1400.63843247392,"bic":1448.62307186629,"n":144,"py_pick":"ETS(M,A,M)","py_pick_aicc_in_r":1390.85155479901,"py_pick_admissible":1},"usaccdeaths":{"name":"usaccdeaths","x":[9007,8106,8928,9137,10017,10826,11317,10744,9713,9938,9161,8927,7750,6981,8038,8422,8714,9512,10120,9823,8743,9129,8710,8680,8162,7306,8124,7870,9387,9556,10093,9620,8285,8466,8160,8034,7717,7461,7767,7925,8623,8945,10078,9179,8037,8488,7874,8647,7792,6957,7726,8106,8890,9299,10625,9302,8314,8850,8265,8796,7836,6892,7791,8192,9115,9434,10484,9827,9110,9070,8633,9240],"period":12,"model_arg":"ZZZ","method":"ETS(A,N,A)","components":["A","N","A","FALSE"],"loglik":-555.072335012621,"aic":1140.14467002524,"aicc":1148.71609859667,"bic":1174.29466181048,"n":72,"py_pick":"ETS(A,N,A)","py_pick_aicc_in_r":1143.00692947405,"py_pick_admissible":1},"co2":{"name":"co2","x":[315.42,316.31,316.5,317.56,318.13,318,316.39,314.65,313.68,313.18,314.66,315.43,316.27,316.81,317.42,318.87,319.87,319.43,318.01,315.74,314,313.68,314.84,316.03,316.73,317.54,318.38,319.31,320.42,319.61,318.42,316.63,314.83,315.16,315.94,316.85,317.78,318.4,319.53,320.42,320.85,320.45,319.45,317.25,316.11,315.27,316.53,317.53,318.58,318.92,319.7,321.22,322.08,321.31,319.58,317.61,316.05,315.83,316.91,318.2,319.41,320.07,320.74,321.4,322.06,321.73,320.27,318.54,316.54,316.71,317.53,318.55,319.27,320.28,320.73,321.97,322,321.71,321.05,318.71,317.66,317.14,318.7,319.25,320.46,321.43,322.23,323.54,323.91,323.59,322.24,320.2,318.48,317.94,319.63,320.87,322.17,322.34,322.88,324.25,324.83,323.93,322.38,320.76,319.1,319.24,320.56,321.8,322.4,322.99,323.73,324.86,325.4,325.2,323.98,321.95,320.18,320.09,321.16,322.74,323.83,324.26,325.47,326.5,327.21,326.54,325.72,323.5,322.22,321.62,322.69,323.95,324.89,325.82,326.77,327.97,327.91,327.5,326.18,324.53,322.93,322.9,323.85,324.96,326.01,326.51,327.01,327.62,328.76,328.4,327.2,325.27,323.2,323.4,324.63,325.85,326.6,327.47,327.58,329.56,329.9,328.92,327.88,326.16,324.68,325.04,326.34,327.39,328.37,329.4,330.14,331.33,332.31,331.9,330.7,329.15,327.35,327.02,327.99,328.48,329.18,330.55,331.32,332.48,332.92,332.08,331.01,329.23,327.27,327.21,328.29,329.41,330.23,331.25,331.87,333.14,333.8,333.43,331.73,329.9,328.4,328.17,329.32,330.59,331.58,332.39,333.33,334.41,334.71,334.17,332.89,330.77,329.14,328.78,330.14,331.52,332.75,333.24,334.53,335.9,336.57,336.1,334.76,332.59,331.42,330.98,332.24,333.68,334.8,335.22,336.47,337.59,337.84,337.72,336.37,334.51,332.6,332.38,333.75,334.78,336.05,336.59,337.79,338.71,339.3,339.12,337.56,335.92,333.75,333.7,335.12,336.56,337.84,338.19,339.91,340.6,341.29,341,339.39,337.43,335.72,335.84,336.93,338.04,339.06,340.3,341.21,342.33,342.74,342.08,340.32,338.26,336.52,336.68,338.19,339.44,340.57,341.44,342.53,343.39,343.96,343.18,341.88,339.65,337.81,337.69,339.09,340.32,341.2,342.35,342.93,344.77,345.58,345.14,343.81,342.21,339.69,339.82,340.98,342.82,343.52,344.33,345.11,346.88,347.25,346.62,345.22,343.11,340.9,341.18,342.8,344.04,344.79,345.82,347.25,348.17,348.74,348.07,346.38,344.51,342.92,342.62,344.06,345.38,346.11,346.78,347.68,349.37,350.03,349.37,347.76,345.73,344.68,343.99,345.48,346.72,347.84,348.29,349.23,350.8,351.66,351.07,349.33,347.92,346.27,346.18,347.64,348.78,350.25,351.54,352.05,353.41,354.04,353.62,352.22,350.27,348.55,348.72,349.91,351.18,352.6,352.92,353.53,355.26,355.52,354.97,353.75,351.52,349.64,349.83,351.14,352.37,353.5,354.55,355.23,356.04,357,356.07,354.67,352.76,350.82,351.04,352.69,354.07,354.59,355.63,357.03,358.48,359.22,358.12,356.06,353.92,352.05,352.11,353.64,354.89,355.88,356.63,357.72,359.07,359.58,359.17,356.94,354.92,352.94,353.23,354.09,355.33,356.63,357.1,358.32,359.41,360.23,359.55,357.53,355.48,353.67,353.95,355.3,356.78,358.34,358.89,359.95,361.25,361.67,360.94,359.55,357.49,355.84,356,357.59,359.05,359.98,361.03,361.66,363.48,363.82,363.3,361.94,359.5,358.11,357.8,359.61,360.74,362.09,363.29,364.06,364.76,365.45,365.01,363.7,361.54,359.51,359.65,360.8,362.38,363.23,364.06,364.61,366.4,366.84,365.68,364.52,362.57,360.24,360.83,362.49,364.34],"period":12,"model_arg":"ZZZ","method":"ETS(M,Ad,M)","components":["M","A","M","TRUE"],"loglik":-842.552382383843,"aic":1721.10476476769,"aicc":1722.62815006835,"bic":1795.7771940942,"n":468,"py_pick":"ETS(M,A,M)","py_pick_aicc_in_r":1697.18876872835,"py_pick_admissible":1},"nile":{"name":"nile","x":[1120,1160,963,1210,1160,1160,813,1230,1370,1140,995,935,1110,994,1020,960,1180,799,958,1140,1100,1210,1150,1250,1260,1220,1030,1100,774,840,874,694,940,833,701,916,692,1020,1050,969,831,726,456,824,702,1120,1100,832,764,821,768,845,864,862,698,845,744,796,1040,759,781,865,845,944,984,897,822,1010,771,676,649,846,812,742,801,1040,860,874,848,890,744,749,838,1050,918,986,797,923,975,815,1020,906,901,1170,912,746,919,718,714,740],"period":1,"model_arg":"ZZZ","method":"ETS(M,N,N)","components":["M","N","N","FALSE"],"loglik":-726.150957803148,"aic":1458.3019156063,"aicc":1458.5519156063,"bic":1466.11742616426,"n":100,"py_pick":"ETS(M,N,N)","py_pick_aicc_in_r":1458.5519060697,"py_pick_admissible":1},"wwwusage":{"name":"wwwusage","x":[88,84,85,85,84,85,83,85,88,89,91,99,104,112,126,138,146,151,150,148,147,149,143,132,131,139,147,150,148,145,140,134,131,131,129,126,126,132,137,140,142,150,159,167,170,171,172,172,174,175,172,172,174,174,169,165,156,142,131,121,112,104,102,99,99,95,88,84,84,87,89,88,85,86,89,91,91,94,101,110,121,135,145,149,156,165,171,175,177,182,193,204,208,210,215,222,228,226,222,220],"period":1,"model_arg":"ZZZ","method":"ETS(A,Ad,N)","components":["A","A","N","TRUE"],"loglik":-352.865490198892,"aic":717.730980397785,"aicc":718.634206204236,"bic":733.362001513713,"n":100,"py_pick":"ETS(A,Ad,N)","py_pick_aicc_in_r":717.641639902903,"py_pick_admissible":1},"lynx":{"name":"lynx","x":[269,321,585,871,1475,2821,3928,5943,4950,2577,523,98,184,279,409,2285,2685,3409,1824,409,151,45,68,213,546,1033,2129,2536,957,361,377,225,360,731,1638,2725,2871,2119,684,299,236,245,552,1623,3311,6721,4254,687,255,473,358,784,1594,1676,2251,1426,756,299,201,229,469,736,2042,2811,4431,2511,389,73,39,49,59,188,377,1292,4031,3495,587,105,153,387,758,1307,3465,6991,6313,3794,1836,345,382,808,1388,2713,3800,3091,2985,3790,674,81,80,108,229,399,1132,2432,3574,2935,1537,529,485,662,1000,1590,2657,3396],"period":1,"model_arg":"ZZZ","method":"ETS(M,N,N)","components":["M","N","N","FALSE"],"loglik":-1026.06877340561,"aic":2058.13754681123,"aicc":2058.35572862941,"bic":2066.34614215641,"n":114,"py_pick":"ETS(M,A,N)","py_pick_aicc_in_r":2041.94549073361,"py_pick_admissible":1},"diff_nile":{"name":"diff_nile","x":[40,-197,247,-50,0,-347,417,140,-230,-145,-60,175,-116,26,-60,220,-381,159,182,-40,110,-60,100,10,-40,-190,70,-326,66,34,-180,246,-107,-132,215,-224,328,30,-81,-138,-105,-270,368,-122,418,-20,-268,-68,57,-53,77,19,-2,-164,147,-101,52,244,-281,22,84,-20,99,40,-87,-75,188,-239,-95,-27,197,-34,-70,59,239,-180,14,-26,42,-146,5,89,212,-132,68,-189,126,52,-160,205,-114,-5,269,-258,-166,173,-201,-4,26],"period":1,"model_arg":"ZZZ","method":"ETS(A,N,N)","components":["A","N","N","FALSE"],"loglik":-734.310989958834,"aic":1474.62197991767,"aicc":1474.87461149662,"bic":1482.40733946807,"n":99,"py_pick":"ETS(A,N,N)","py_pick_aicc_in_r":1474.87459815349,"py_pick_admissible":1},"airpassengers_zzn":{"name":"airpassengers_zzn","x":[112,118,132,129,121,135,148,148,136,119,104,118,115,126,141,135,125,149,170,170,158,133,114,140,145,150,178,163,172,178,199,199,184,162,146,166,171,180,193,181,183,218,230,242,209,191,172,194,196,196,236,235,229,243,264,272,237,211,180,201,204,188,235,227,234,264,302,293,259,229,203,229,242,233,267,269,270,315,364,347,312,274,237,278,284,277,317,313,318,374,413,405,355,306,271,306,315,301,356,348,355,422,465,467,404,347,305,336,340,318,362,348,363,435,491,505,404,359,310,337,360,342,406,396,420,472,548,559,463,407,362,405,417,391,419,461,472,535,622,606,508,461,390,432],"period":12,"model_arg":"ZZN","method":"ETS(M,N,N)","components":["M","N","N","FALSE"],"loglik":-833.950130596089,"aic":1673.90026119218,"aicc":1674.07168976361,"bic":1682.80970109091,"n":144,"py_pick":"ETS(M,A,N)","py_pick_aicc_in_r":1673.41133501112,"py_pick_admissible":1},"airpassengers_azz":{"name":"airpassengers_azz","x":[112,118,132,129,121,135,148,148,136,119,104,118,115,126,141,135,125,149,170,170,158,133,114,140,145,150,178,163,172,178,199,199,184,162,146,166,171,180,193,181,183,218,230,242,209,191,172,194,196,196,236,235,229,243,264,272,237,211,180,201,204,188,235,227,234,264,302,293,259,229,203,229,242,233,267,269,270,315,364,347,312,274,237,278,284,277,317,313,318,374,413,405,355,306,271,306,315,301,356,348,355,422,465,467,404,347,305,336,340,318,362,348,363,435,491,505,404,359,310,337,360,342,406,396,420,472,548,559,463,407,362,405,417,391,419,461,472,535,622,606,508,461,390,432],"period":12,"model_arg":"AZZ","method":"ETS(A,N,A)","components":["A","N","A","FALSE"],"loglik":-767.429538964832,"aic":1564.85907792966,"aicc":1568.60907792966,"bic":1609.4062774233,"n":144,"py_pick":"ETS(A,A,A)","py_pick_aicc_in_r":1475.85857573546,"py_pick_admissible":1},"airpassengers_mzz":{"name":"airpassengers_mzz","x":[112,118,132,129,121,135,148,148,136,119,104,118,115,126,141,135,125,149,170,170,158,133,114,140,145,150,178,163,172,178,199,199,184,162,146,166,171,180,193,181,183,218,230,242,209,191,172,194,196,196,236,235,229,243,264,272,237,211,180,201,204,188,235,227,234,264,302,293,259,229,203,229,242,233,267,269,270,315,364,347,312,274,237,278,284,277,317,313,318,374,413,405,355,306,271,306,315,301,356,348,355,422,465,467,404,347,305,336,340,318,362,348,363,435,491,505,404,359,310,337,360,342,406,396,420,472,548,559,463,407,362,405,417,391,419,461,472,535,622,606,508,461,390,432],"period":12,"model_arg":"MZZ","method":"ETS(M,Ad,M)","components":["M","A","M","TRUE"],"loglik":-679.583216236962,"aic":1395.16643247392,"aicc":1400.63843247392,"bic":1448.62307186629,"n":144,"py_pick":"ETS(M,A,M)","py_pick_aicc_in_r":1390.85155479901,"py_pick_admissible":1}},"fixed":{"nile_ann":{"name":"nile_ann","x":[1120,1160,963,1210,1160,1160,813,1230,1370,1140,995,935,1110,994,1020,960,1180,799,958,1140,1100,1210,1150,1250,1260,1220,1030,1100,774,840,874,694,940,833,701,916,692,1020,1050,969,831,726,456,824,702,1120,1100,832,764,821,768,845,864,862,698,845,744,796,1040,759,781,865,845,944,984,897,822,1010,771,676,649,846,812,742,801,1040,860,874,848,890,744,749,838,1050,918,986,797,923,975,815,1020,906,901,1170,912,746,919,718,714,740],"period":1,"model_arg":"ANN","damped":false,"method":"ETS(A,N,N)","loglik":-726.390519999206,"aic":1458.78103999841,"aicc":1459.03103999841,"bic":1466.59655055638,"alpha":0.245533862697156,"n":100},"nile_aan":{"name":"nile_aan","x":[1120,1160,963,1210,1160,1160,813,1230,1370,1140,995,935,1110,994,1020,960,1180,799,958,1140,1100,1210,1150,1250,1260,1220,1030,1100,774,840,874,694,940,833,701,916,692,1020,1050,969,831,726,456,824,702,1120,1100,832,764,821,768,845,864,862,698,845,744,796,1040,759,781,865,845,944,984,897,822,1010,771,676,649,846,812,742,801,1040,860,874,848,890,744,749,838,1050,918,986,797,923,975,815,1020,906,901,1170,912,746,919,718,714,740],"period":1,"model_arg":"AAN","damped":false,"method":"ETS(A,A,N)","loglik":-725.956062244941,"aic":1461.91212448988,"aicc":1462.55042236222,"bic":1474.93797541982,"alpha":0.209488918876854,"n":100},"airpassengers_aaa":{"name":"airpassengers_aaa","x":[112,118,132,129,121,135,148,148,136,119,104,118,115,126,141,135,125,149,170,170,158,133,114,140,145,150,178,163,172,178,199,199,184,162,146,166,171,180,193,181,183,218,230,242,209,191,172,194,196,196,236,235,229,243,264,272,237,211,180,201,204,188,235,227,234,264,302,293,259,229,203,229,242,233,267,269,270,315,364,347,312,274,237,278,284,277,317,313,318,374,413,405,355,306,271,306,315,301,356,348,355,422,465,467,404,347,305,336,340,318,362,348,363,435,491,505,404,359,310,337,360,342,406,396,420,472,548,559,463,407,362,405,417,391,419,461,472,535,622,606,508,461,390,432],"period":12,"model_arg":"AAA","damped":false,"method":"ETS(A,A,A)","loglik":-765.935847511721,"aic":1565.87169502344,"aicc":1570.72883788059,"bic":1616.35852111623,"alpha":0.993480362872374,"n":144},"airpassengers_mam":{"name":"airpassengers_mam","x":[112,118,132,129,121,135,148,148,136,119,104,118,115,126,141,135,125,149,170,170,158,133,114,140,145,150,178,163,172,178,199,199,184,162,146,166,171,180,193,181,183,218,230,242,209,191,172,194,196,196,236,235,229,243,264,272,237,211,180,201,204,188,235,227,234,264,302,293,259,229,203,229,242,233,267,269,270,315,364,347,312,274,237,278,284,277,317,313,318,374,413,405,355,306,271,306,315,301,356,348,355,422,465,467,404,347,305,336,340,318,362,348,363,435,491,505,404,359,310,337,360,342,406,396,420,472,548,559,463,407,362,405,417,391,419,461,472,535,622,606,508,461,390,432],"period":12,"model_arg":"MAM","damped":false,"method":"ETS(M,A,M)","loglik":-682.403619057803,"aic":1398.80723811561,"aicc":1403.66438097275,"bic":1449.2940642084,"alpha":0.394996850495005,"n":144},"usaccdeaths_ana":{"name":"usaccdeaths_ana","x":[9007,8106,8928,9137,10017,10826,11317,10744,9713,9938,9161,8927,7750,6981,8038,8422,8714,9512,10120,9823,8743,9129,8710,8680,8162,7306,8124,7870,9387,9556,10093,9620,8285,8466,8160,8034,7717,7461,7767,7925,8623,8945,10078,9179,8037,8488,7874,8647,7792,6957,7726,8106,8890,9299,10625,9302,8314,8850,8265,8796,7836,6892,7791,8192,9115,9434,10484,9827,9110,9070,8633,9240],"period":12,"model_arg":"ANA","damped":false,"method":"ETS(A,N,A)","loglik":-555.072335012621,"aic":1140.14467002524,"aicc":1148.71609859667,"bic":1174.29466181048,"alpha":0.594589890836137,"n":72}}}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"""Dump PyStatistics' ZZZ-selected ETS fits for R cross-scoring.
|
|
2
|
+
|
|
3
|
+
Stage 1 of regenerating ``ets_r_reference.json``. Runs the package's own
|
|
4
|
+
``ets()`` auto-selection on every reference series already stored in the
|
|
5
|
+
fixture and writes the selected model plus its fitted parameters and
|
|
6
|
+
initial states to ``ets_py_params.json``. Stage 2
|
|
7
|
+
(``generate_ets_r_reference.R``) feeds these parameters through R
|
|
8
|
+
``forecast:::pegelsresid.C`` to score *our* fits under *R's own*
|
|
9
|
+
likelihood — the honest cross-engine comparison (refitting the same model
|
|
10
|
+
spec in R only re-runs R's optimiser, which is the thing being compared).
|
|
11
|
+
|
|
12
|
+
Run from the repo root (after the fixture exists, since it supplies the
|
|
13
|
+
input series)::
|
|
14
|
+
|
|
15
|
+
KMP_DUPLICATE_LIB_OK=TRUE PYTHONPATH=$PWD \
|
|
16
|
+
python tests/fixtures/generate_ets_py_params.py
|
|
17
|
+
|
|
18
|
+
then::
|
|
19
|
+
|
|
20
|
+
Rscript tests/fixtures/generate_ets_r_reference.R
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
from __future__ import annotations
|
|
24
|
+
|
|
25
|
+
import json
|
|
26
|
+
from pathlib import Path
|
|
27
|
+
|
|
28
|
+
import numpy as np
|
|
29
|
+
|
|
30
|
+
from pystatistics.timeseries import ets
|
|
31
|
+
|
|
32
|
+
FIXTURE_DIR = Path(__file__).parent
|
|
33
|
+
REFERENCE = FIXTURE_DIR / "ets_r_reference.json"
|
|
34
|
+
OUT = FIXTURE_DIR / "ets_py_params.json"
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def main() -> None:
|
|
38
|
+
reference = json.loads(REFERENCE.read_text())
|
|
39
|
+
out: dict[str, dict] = {}
|
|
40
|
+
for name, case in reference["selection"].items():
|
|
41
|
+
sol = ets(
|
|
42
|
+
np.asarray(case["x"], dtype=np.float64),
|
|
43
|
+
model=case["model_arg"],
|
|
44
|
+
period=case["period"],
|
|
45
|
+
)
|
|
46
|
+
spec = sol.spec
|
|
47
|
+
out[name] = {
|
|
48
|
+
"picked": spec.name,
|
|
49
|
+
"error": spec.error,
|
|
50
|
+
"trend": spec.trend,
|
|
51
|
+
"season": spec.season,
|
|
52
|
+
"damped": spec.damped,
|
|
53
|
+
"period": spec.period,
|
|
54
|
+
"alpha": sol.alpha,
|
|
55
|
+
"beta": sol.beta,
|
|
56
|
+
"gamma": sol.gamma,
|
|
57
|
+
"phi": sol.phi,
|
|
58
|
+
"init_level": sol.init_level,
|
|
59
|
+
"init_trend": sol.init_trend,
|
|
60
|
+
# Engine order: oldest first (s_{1-m} .. s_0). R's state
|
|
61
|
+
# vector wants most-recent first — the R script reverses.
|
|
62
|
+
"init_season": (
|
|
63
|
+
list(sol.init_season) if sol.init_season is not None else None
|
|
64
|
+
),
|
|
65
|
+
"aicc_py_convention": sol.aicc,
|
|
66
|
+
"converged": bool(sol.converged),
|
|
67
|
+
}
|
|
68
|
+
print(f" {name:24s} -> {spec.name}")
|
|
69
|
+
OUT.write_text(json.dumps(out, indent=1) + "\n")
|
|
70
|
+
print(f"wrote {OUT.relative_to(FIXTURE_DIR.parent.parent)}")
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
if __name__ == "__main__":
|
|
74
|
+
main()
|