pystatistics 4.6.0__tar.gz → 4.6.2__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.2/.release/UNRELEASED.md +12 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/CHANGELOG.md +103 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/PKG-INFO +30 -1
- {pystatistics-4.6.0 → pystatistics-4.6.2}/README.md +29 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pyproject.toml +1 -1
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/__init__.py +1 -1
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/gam/_criteria.py +64 -20
- pystatistics-4.6.2/pystatistics/gam/_gradient.py +139 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/__init__.py +15 -4
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/_decomposition.py +4 -278
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/_differencing.py +8 -5
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/_ets_fit.py +268 -330
- pystatistics-4.6.2/pystatistics/timeseries/_ets_result.py +275 -0
- pystatistics-4.6.2/pystatistics/timeseries/_ets_select.py +406 -0
- pystatistics-4.6.2/pystatistics/timeseries/_loess.py +323 -0
- pystatistics-4.6.2/pystatistics/timeseries/_stl.py +354 -0
- pystatistics-4.6.2/pystatistics/timeseries/_stl_core.py +158 -0
- pystatistics-4.6.2/pystatistics/timeseries/_stl_robust.py +226 -0
- pystatistics-4.6.2/tests/fixtures/ets_r_reference.json +1 -0
- pystatistics-4.6.2/tests/fixtures/generate_ets_r_reference.R +72 -0
- pystatistics-4.6.2/tests/fixtures/generate_stl_r_reference.R +66 -0
- pystatistics-4.6.2/tests/fixtures/stl_r_reference.json +1 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/gam/test_gam.py +116 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/timeseries/test_acf_stationarity.py +24 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/timeseries/test_decomposition.py +61 -5
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/timeseries/test_ets.py +341 -10
- pystatistics-4.6.2/tests/timeseries/test_loess.py +167 -0
- pystatistics-4.6.2/tests/timeseries/test_stl_r_parity.py +151 -0
- pystatistics-4.6.2/tests/timeseries/test_stl_robust.py +113 -0
- pystatistics-4.6.0/.release/UNRELEASED.md +0 -139
- {pystatistics-4.6.0 → pystatistics-4.6.2}/.github/workflows/publish.yml +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/.github/workflows/trigger-docs-rebuild.yml +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/.gitignore +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/.release/CHECKLIST.md +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/.release/release.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/LICENSE +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/benchmarks/mvnmle_bench.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/benchmarks/mvnmle_gpu_per_eval.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/DESIGN.md +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/GPU_NOTES.md +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/Makefile +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/ROADMAP.md +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/_static/custom.css +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/anova.rst +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/conf.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/core.rst +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/descriptive.rst +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/gam.rst +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/hypothesis.rst +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/index.rst +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/mixed.rst +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/montecarlo.rst +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/multinomial.rst +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/multivariate.rst +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/mvnmle.rst +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/ordinal.rst +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/regression.rst +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/survival.rst +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/timeseries.rst +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/CONVENTIONS.md +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/anova/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/anova/_common.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/anova/_contrasts.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/anova/_levene.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/anova/_posthoc.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/anova/_repeated.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/anova/_ss.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/anova/design.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/anova/solution.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/anova/solvers.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/capabilities.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/compute/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/compute/backend.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/compute/device.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/compute/linalg/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/compute/linalg/batched.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/compute/linalg/cholesky.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/compute/linalg/determinant.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/compute/linalg/qr.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/compute/linalg/solve.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/compute/linalg/svd.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/compute/linalg/triangular.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/compute/optimization/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/compute/optimization/convergence.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/compute/precision.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/compute/timing.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/compute/tolerances.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/compute/torch_interop.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/datasource.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/encoding.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/exceptions.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/protocols.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/result.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/validation.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/descriptive/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/descriptive/_missing.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/descriptive/_quantile_types.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/descriptive/backends/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/descriptive/backends/cpu.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/descriptive/backends/gpu.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/descriptive/design.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/descriptive/solution.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/descriptive/solvers.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/gam/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/gam/_basis.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/gam/_basis_common.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/gam/_basis_cr.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/gam/_basis_tp.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/gam/_common.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/gam/_constraints.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/gam/_edf.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/gam/_gam.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/gam/_pirls.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/gam/_smooth.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/gam/_smooth_test.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/gam/solution.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/hypothesis/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/hypothesis/_common.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/hypothesis/_design_factories.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/hypothesis/_p_adjust.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/hypothesis/backends/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/hypothesis/backends/_chisq_test.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/hypothesis/backends/_fisher_test.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/hypothesis/backends/_ks_test.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/hypothesis/backends/_prop_test.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/hypothesis/backends/_t_test.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/hypothesis/backends/_var_test.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/hypothesis/backends/_wilcox_test.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/hypothesis/backends/cpu.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/hypothesis/backends/gpu.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/hypothesis/design.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/hypothesis/solution.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/hypothesis/solvers.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/_chain.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/_encode.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/_rng.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/_visit.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/backends/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/backends/_gpu_encode.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/backends/_gpu_linreg.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/backends/_gpu_logreg.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/backends/_gpu_methods.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/backends/_gpu_polr.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/backends/_gpu_polyreg.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/backends/_gpu_spd.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/backends/cpu.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/backends/gpu.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/datasets.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/design.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/methods/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/methods/_draw.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/methods/_linreg.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/methods/base.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/methods/logreg.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/methods/norm.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/methods/pmm.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/methods/polr.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/methods/polyreg.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/methods/registry.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/pooling.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/solution.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/solvers.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mixed/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mixed/_common.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mixed/_deviance.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mixed/_glmm_optimizer.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mixed/_glmm_pirls.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mixed/_grm_cpu.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mixed/_optimizer.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mixed/_pls.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mixed/_pls_structured.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mixed/_random_effects.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mixed/_satterthwaite.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mixed/_struct_batched.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mixed/_struct_sparse.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mixed/backends/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mixed/backends/grm_gpu.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mixed/design.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mixed/grm.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mixed/grm_solution.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mixed/solution.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mixed/solvers.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/montecarlo/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/montecarlo/_ci.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/montecarlo/_common.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/montecarlo/_influence.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/montecarlo/backends/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/montecarlo/backends/cpu.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/montecarlo/backends/gpu.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/montecarlo/design.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/montecarlo/solution.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/montecarlo/solvers.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/multinomial/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/multinomial/_common.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/multinomial/_likelihood.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/multinomial/_solver.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/multinomial/backends/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/multinomial/backends/gpu_likelihood.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/multinomial/solution.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/multivariate/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/multivariate/_common.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/multivariate/_factor.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/multivariate/_pca.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/multivariate/_rotation.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/multivariate/backends/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/multivariate/backends/gpu_pca.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/multivariate/backends/gpu_pca_randomized.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/_degeneracy.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/_monotone.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/_objectives/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/_objectives/_batched_cholesky.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/_objectives/base.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/_objectives/cpu.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/_objectives/gpu_fp32.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/_objectives/gpu_fp64.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/_objectives/parameterizations.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/_utils.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/backends/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/backends/_direct.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/backends/_em_batched.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/backends/_em_batched_np.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/backends/_em_batched_patterns.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/backends/_em_batched_torch.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/backends/_optimize.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/backends/_squarem.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/backends/cpu.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/backends/em.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/backends/gpu.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/datasets.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/design.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/mcar_test.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/patterns.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/solution.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/solvers.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/ordinal/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/ordinal/_common.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/ordinal/_information.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/ordinal/_likelihood.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/ordinal/_solver.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/ordinal/backends/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/ordinal/backends/gpu_likelihood.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/ordinal/solution.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/py.typed +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/regression/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/regression/_formatting.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/regression/_glm.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/regression/_inputs.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/regression/_linear.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/regression/_nb_theta.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/regression/_penalty.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/regression/backends/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/regression/backends/_irls_step.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/regression/backends/cpu.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/regression/backends/cpu_glm.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/regression/backends/gpu.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/regression/backends/gpu_glm.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/regression/design.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/regression/families.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/regression/solution.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/regression/solvers.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/regression/terms.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/survival/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/survival/_common.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/survival/_cox.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/survival/_discrete.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/survival/_km.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/survival/_logrank.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/survival/backends/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/survival/backends/cpu.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/survival/backends/gpu.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/survival/design.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/survival/solution.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/survival/solvers.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/_acf.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/_arima_batch.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/_arima_factored.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/_arima_fit.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/_arima_forecast.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/_arima_kalman.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/_arima_likelihood.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/_arima_order.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/_arima_solution.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/_common.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/_ets_forecast.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/_ets_models.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/_stationarity.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/_whittle.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/backends/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/backends/whittle_batch_gpu.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/backends/whittle_gpu.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/anova/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/anova/conftest.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/anova/test_contrasts.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/anova/test_design.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/anova/test_factorial.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/anova/test_levene.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/anova/test_oneway.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/anova/test_posthoc.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/anova/test_r_validation.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/anova/test_repeated_measures.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/benchmark_gpu.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/conftest.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/core/test_backend.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/core/test_datasource.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/core/test_exceptions.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/core/test_qr_solve.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/core/test_repr_html.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/core/test_result.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/core/test_torch_interop.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/core/test_validation.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/descriptive/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/descriptive/conftest.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/descriptive/test_backend_convention.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/descriptive/test_cor.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/descriptive/test_cov.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/descriptive/test_describe.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/descriptive/test_gpu.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/descriptive/test_missing.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/descriptive/test_moments.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/descriptive/test_quantile.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/descriptive/test_r_validation.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_ancova_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_ancova_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_bonferroni_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_bonferroni_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_eta_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_eta_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_levene_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_levene_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_oneway_balanced_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_oneway_balanced_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_oneway_unbalanced_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_oneway_unbalanced_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_rm_mixed_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_rm_mixed_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_rm_within_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_rm_within_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_tukey_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_tukey_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_twoway_balanced_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_twoway_balanced_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_twoway_unbalanced_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_twoway_unbalanced_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/basic_100x3.csv +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/basic_100x3_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/basic_100x3_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/collinear_almost.csv +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/collinear_almost_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/collinear_almost_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_basic_100x5.csv +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_basic_100x5_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_basic_100x5_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_constant_column.csv +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_constant_column_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_constant_column_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_extreme_values.csv +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_extreme_values_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_extreme_values_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_large_1000x10.csv +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_large_1000x10_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_large_1000x10_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_nan_columnwise.csv +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_nan_columnwise_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_nan_columnwise_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_nan_scattered.csv +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_nan_scattered_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_nan_scattered_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_negative_correlation.csv +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_negative_correlation_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_negative_correlation_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_perfect_correlation.csv +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_perfect_correlation_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_perfect_correlation_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_single_column.csv +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_single_column_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_single_column_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_ties.csv +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_ties_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_ties_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/different_scales.csv +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/different_scales_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/different_scales_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/generate_anova_fixtures.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/generate_descriptive_fixtures.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/generate_fixtures.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/generate_glm_fixtures.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/generate_hypothesis_fixtures.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/generate_mixed_fixtures.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/generate_montecarlo_fixtures.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/generate_nb_autotheta_fixtures.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/generate_survival_fixtures.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/generate_weights_offset_fixtures.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_binomial_balanced.csv +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_binomial_balanced_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_binomial_balanced_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_binomial_basic.csv +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_binomial_basic_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_binomial_basic_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_binomial_large.csv +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_binomial_large_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_binomial_large_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_binomial_separated.csv +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_binomial_separated_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_binomial_separated_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_gaussian_basic.csv +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_gaussian_basic_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_gaussian_basic_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_gaussian_large.csv +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_gaussian_large_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_gaussian_large_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_poisson_basic.csv +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_poisson_basic_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_poisson_basic_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_poisson_large_counts.csv +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_poisson_large_counts_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_poisson_large_counts_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_poisson_zeros.csv +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_poisson_zeros_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_poisson_zeros_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/high_noise.csv +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/high_noise_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/high_noise_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_chisq_2x2_yates_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_chisq_2x2_yates_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_chisq_3x3_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_chisq_3x3_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_chisq_gof_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_chisq_gof_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_chisq_gof_unequal_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_chisq_gof_unequal_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_fisher_2x2_less_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_fisher_2x2_less_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_fisher_2x2_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_fisher_2x2_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_fisher_3x3_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_fisher_3x3_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_ks_onesample_norm_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_ks_onesample_norm_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_ks_twosample_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_ks_twosample_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_prop_onesample_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_prop_onesample_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_prop_twosample_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_prop_twosample_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_t_onesample_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_t_onesample_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_t_paired_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_t_paired_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_t_pooled_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_t_pooled_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_t_welch_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_t_welch_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_var_basic_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_var_basic_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_wilcox_ranksum_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_wilcox_ranksum_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_wilcox_signed_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_wilcox_signed_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/ill_conditioned.csv +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/ill_conditioned_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/ill_conditioned_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/large_coeffs.csv +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/large_coeffs_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/large_coeffs_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mc_boot_ci_90_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mc_boot_ci_90_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mc_boot_ci_normal_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mc_boot_ci_normal_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mc_boot_ci_skewed_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mc_boot_ci_skewed_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mc_boot_mean_balanced_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mc_boot_mean_balanced_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mc_boot_mean_ordinary_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mc_boot_mean_ordinary_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mc_boot_median_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mc_boot_median_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mc_boot_variance_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mc_boot_variance_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mc_perm_greater_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mc_perm_greater_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mc_perm_not_significant_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mc_perm_not_significant_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mc_perm_significant_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mc_perm_significant_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mixed/glmm_binomial.csv +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mixed/glmm_poisson.csv +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mixed/lmm_crossed.csv +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mixed/lmm_intercept.csv +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mixed/lmm_ml.csv +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mixed/lmm_no_effect.csv +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mixed/lmm_slope.csv +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mixed/mixed_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mixed/mixed_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/nb_autotheta_cases.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/nb_autotheta_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/near_square.csv +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/near_square_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/near_square_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/no_intercept.csv +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/no_intercept_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/no_intercept_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/run_r_anova_validation.R +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/run_r_descriptive_validation.R +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/run_r_glm_validation.R +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/run_r_hypothesis_validation.R +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/run_r_mixed_validation.R +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/run_r_montecarlo_validation.R +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/run_r_nb_autotheta_validation.R +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/run_r_survival_validation.R +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/run_r_validation.R +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/run_r_weights_offset_validation.R +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/run_validation.sh +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/small_noise.csv +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/small_noise_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/small_noise_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_cox_breslow_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_cox_breslow_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_cox_single_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_cox_single_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_cox_ties_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_cox_ties_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_cox_two_cov_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_cox_two_cov_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_km_basic_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_km_basic_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_km_heavy_cens_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_km_heavy_cens_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_km_loglog_ci_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_km_loglog_ci_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_km_no_cens_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_km_no_cens_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_km_plain_ci_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_km_plain_ci_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_km_ties_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_km_ties_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_lr_peto_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_lr_peto_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_lr_three_group_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_lr_three_group_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_lr_two_group_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_lr_two_group_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/tall_skinny.csv +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/tall_skinny_meta.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/tall_skinny_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/validate_against_r.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/weights_offset_cases.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/weights_offset_r_results.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/gam/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/hypothesis/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/hypothesis/conftest.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/hypothesis/test_backend_convention.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/hypothesis/test_chisq_test.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/hypothesis/test_design_split.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/hypothesis/test_fisher_test.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/hypothesis/test_gpu.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/hypothesis/test_ks_test.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/hypothesis/test_p_adjust.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/hypothesis/test_prop_test.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/hypothesis/test_r_validation.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/hypothesis/test_t_test.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/hypothesis/test_var_test.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/hypothesis/test_wilcox_test.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/references/generate_categorical_fixtures.R +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/references/generate_mice_fixtures.R +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/references/mice_categorical_data.csv +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/references/mice_categorical_reference.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/references/mice_reference.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/references/mice_validation_complete.csv +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/references/mice_validation_data.csv +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/test_categorical.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/test_datasets.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/test_design.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/test_gpu.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/test_gpu_glm_separation.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/test_gpu_mps.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/test_gpu_polr_draw.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/test_gpu_polr_separation.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/test_methods.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/test_mice.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/test_polr_ridge_characterization.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/test_pooling.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/test_r_validation.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/test_r_validation_categorical.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/test_rng.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/test_visit.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mixed/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mixed/conftest.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mixed/test_compute_se.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mixed/test_conf_int.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mixed/test_glmm.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mixed/test_grm.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mixed/test_lmm_crossed.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mixed/test_lmm_extreme_ratio.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mixed/test_lmm_intercept.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mixed/test_lmm_nested.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mixed/test_lmm_slope.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mixed/test_pls.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mixed/test_r_validation.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mixed/test_random_effects.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mixed/test_satterthwaite.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mixed/test_singular.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mixed/test_structured.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/montecarlo/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/montecarlo/conftest.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/montecarlo/test_backend_convention.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/montecarlo/test_batched_solver.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/montecarlo/test_boot_ci.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/montecarlo/test_bootstrap.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/montecarlo/test_gpu.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/montecarlo/test_influence.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/montecarlo/test_permutation.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/montecarlo/test_r_validation.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/multinomial/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/multinomial/test_conf_int.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/multinomial/test_multinom.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/multivariate/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/multivariate/test_multivariate.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/references/apple_em_reference.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/references/apple_reference.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/references/generate_em_fixtures.R +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/references/little_mcar_apple.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/references/little_mcar_complete.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/references/little_mcar_extreme.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/references/little_mcar_missvals.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/references/little_mcar_simple_mcar.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/references/little_mcar_summary.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/references/missvals_em_reference.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/references/missvals_reference.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/references/small_test_reference.json +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/test_backend_routing.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/test_degeneracy.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/test_em.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/test_gpu.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/test_gpu_batched_equiv.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/test_gpu_unpack_equiv.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/test_mcar.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/test_mlest.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/test_monotone.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/test_no_silent_fallback.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/test_optimize.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/test_pattern_codes_large_p.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/test_squarem.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/ordinal/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/ordinal/test_conf_int.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/ordinal/test_information.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/ordinal/test_ordinal.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/benchmark.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/benchmark.r +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/conftest.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_conf_int.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_fit.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_gamma_nb.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_glm.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_glm_gpu.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_glm_r_validation.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_gpu_fp32_acceptance.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_gpu_mps_cg.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_gpu_se_ill_conditioned.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_ic_dispersion_r_match.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_irls_step.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_module_split.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_nb_autotheta_r_validation.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_r_validation.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_ridge.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_stress_gpu.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_terms.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_terms_gpu.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_weights_offset.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_weights_offset_gpu.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_weights_offset_r_validation.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/survival/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/survival/conftest.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/survival/test_conf_int.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/survival/test_coxph.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/survival/test_discrete_conf_int.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/survival/test_discrete_time.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/survival/test_gpu.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/survival/test_kaplan_meier.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/survival/test_logrank.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/survival/test_r_validation.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/survival/test_uniform_accessors_and_errors.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/survival/test_warnings.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/test_code_quality.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/timeseries/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/timeseries/test_arima.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/validation/README.md +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/validation/pyproject.toml +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/validation/pystatsval/__init__.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/validation/pystatsval/device.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/validation/pystatsval/estimates.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/validation/pystatsval/measure.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/validation/pystatsval/record.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/validation/pystatsval/rrunner.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/validation/pystatsval/serialize.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/validation/pystatsval/timing.py +0 -0
- {pystatistics-4.6.0 → pystatistics-4.6.2}/validation/tests/test_harness.py +0 -0
|
@@ -0,0 +1,12 @@
|
|
|
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
|
+
*(empty — no unreleased changes yet)*
|
|
@@ -1,5 +1,108 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 4.6.2
|
|
4
|
+
|
|
5
|
+
STL decomposition rewritten to match R exactly and now as fast as R's
|
|
6
|
+
compiled implementation; ETS gains automatic model selection and R-matched
|
|
7
|
+
parameter estimation; `ndiffs` default aligned with R.
|
|
8
|
+
|
|
9
|
+
- **`stl()` returned a materially wrong decomposition on trending series —
|
|
10
|
+
fixed by a full rewrite.** On strongly trending data (e.g. the monthly CO2
|
|
11
|
+
benchmark) the previous implementation leaked much of the trend into the
|
|
12
|
+
seasonal component: the extracted "seasonal" had a range of ~83 where the
|
|
13
|
+
true seasonal amplitude is ~6, and the reported trend could *decrease* while
|
|
14
|
+
the data rose — the components always summed back to the data, so the error
|
|
15
|
+
was invisible without an external reference. `stl()` is now an exact
|
|
16
|
+
implementation of the STL procedure (Cleveland, Cleveland, McRae &
|
|
17
|
+
Terpenning, 1990) and reproduces R's `stats::stl` component-for-component:
|
|
18
|
+
across a reference suite (CO2, AirPassengers, monthly sunspots, lynx, Nile;
|
|
19
|
+
periodic, robust, custom-window, and partial-period variants) the largest
|
|
20
|
+
seasonal/trend/remainder difference vs R is below 1e-10.
|
|
21
|
+
- **`stl()` now exposes the full STL parameter set and uses R's defaults.**
|
|
22
|
+
New parameters: `seasonal_degree` (default 0, as in R — previously the
|
|
23
|
+
seasonal smoother was effectively degree 1), `trend_degree`,
|
|
24
|
+
`lowpass_window`, `lowpass_degree`, and the evaluation strides
|
|
25
|
+
`seasonal_jump` / `trend_jump` / `lowpass_jump` (R's `ceiling(window/10)`
|
|
26
|
+
defaults; set to 1 to evaluate the loess at every point instead of
|
|
27
|
+
interpolating). Behaviour changes: `seasonal_window` defaults to
|
|
28
|
+
`"periodic"` (R has no default and `"periodic"` is the standard published
|
|
29
|
+
choice); `robust=True` now runs R's iteration counts (1 inner, 15 outer
|
|
30
|
+
passes); the series must be longer than `2 * period` (R's rule); and window
|
|
31
|
+
spans must be odd integers >= 3 — even spans raise a `ValidationError`
|
|
32
|
+
where R silently rounds them up. The result's `info` now reports the
|
|
33
|
+
resolved windows/degrees/jumps and the final robustness weights.
|
|
34
|
+
- **`stl()` now matches R's speed.** The smoother is compiled with `numba`,
|
|
35
|
+
so it is as fast as R's Fortran `stats::stl` — non-robust decompositions
|
|
36
|
+
run faster than R and robust decompositions match it (previously it was
|
|
37
|
+
3-15x slower). Results are unchanged (still within 1e-10 of R). The
|
|
38
|
+
compiled kernel builds on first use in a session (a few seconds, once) and
|
|
39
|
+
is cached on disk for subsequent runs, the same one-time cost the ARIMA
|
|
40
|
+
routines already carry.
|
|
41
|
+
- **`ets()` now performs automatic model selection, matching
|
|
42
|
+
`forecast::ets`.** The model string accepts a `"Z"` wildcard per component
|
|
43
|
+
and defaults to `model="ZZZ"` (select everything), as in R. Candidates
|
|
44
|
+
consistent with the fixed letters are enumerated under R's rules (additive
|
|
45
|
+
error with multiplicative season excluded; multiplicative components
|
|
46
|
+
require strictly positive data; seasonal candidates need `2 <= period <=
|
|
47
|
+
24` and enough data), each is fitted, and the model minimising the new `ic`
|
|
48
|
+
parameter (`"aicc"` default, `"aic"`, `"bic"`) is returned. The full
|
|
49
|
+
candidate table, the criterion values, and any skipped candidates with
|
|
50
|
+
reasons are disclosed in `solution.info["selection"]`. Explicit requests
|
|
51
|
+
that cannot be honoured (e.g. `model="MZZ"` on data with zeros or
|
|
52
|
+
negatives, a seasonal letter with `period=1`) raise instead of being
|
|
53
|
+
silently adjusted. A fully specified model string (no `"Z"`) is always
|
|
54
|
+
fitted exactly as written. Note two consequences of the new default:
|
|
55
|
+
automatic AICc selection needs at least 5 observations (shorter series
|
|
56
|
+
raise with a suggested remedy — pick a concrete model or `ic="aic"`), and
|
|
57
|
+
`period` must now be a true integer (float periods raise a clear error
|
|
58
|
+
instead of crashing).
|
|
59
|
+
- **ETS parameter estimation aligned with `forecast::ets` (changes fitted
|
|
60
|
+
results).** The optimiser now searches R's parameter region exactly — the
|
|
61
|
+
smoothing parameters obey `beta <= alpha` and `gamma <= 1 - alpha`, the
|
|
62
|
+
damping `phi` is bounded to `[0.8, 0.98]`, and a seasonal model estimates
|
|
63
|
+
one fewer initial state (the last is fixed by the seasonal normalisation,
|
|
64
|
+
as in R). As a result the reported parameter count `k` for seasonal models
|
|
65
|
+
now matches R's, so AIC/AICc/BIC values line up with `forecast::ets`, and
|
|
66
|
+
fitted parameters/log-likelihoods for a given model can differ slightly
|
|
67
|
+
from earlier versions. Smoothing parameters fixed outside R's region now
|
|
68
|
+
raise a clear error instead of being quietly clamped. On automatic
|
|
69
|
+
selection the chosen model still occasionally differs from `forecast::ets`
|
|
70
|
+
on near-tied candidate tables, but now only because the two optimisers land
|
|
71
|
+
on different optima — in every such case the model this package selects
|
|
72
|
+
scores at least as well under R's own criterion; the disclosed candidate
|
|
73
|
+
table makes any selection auditable.
|
|
74
|
+
- **`ets()` no longer emits a spurious `RuntimeWarning` about overflow.** A
|
|
75
|
+
benign internal overflow warning could surface during fitting on some
|
|
76
|
+
series; the computation was always correct, and the warning is now gone.
|
|
77
|
+
Fitted results are unchanged.
|
|
78
|
+
- **`ndiffs()` now defaults to the KPSS test, matching `forecast::ndiffs`.**
|
|
79
|
+
KPSS and ADF have opposite null hypotheses and can recommend a different
|
|
80
|
+
number of differences on borderline series; pass `test="adf"` for the
|
|
81
|
+
previous behaviour. Both tests are numerically unchanged.
|
|
82
|
+
- **ETS log-likelihood reporting convention documented (no numeric
|
|
83
|
+
change).** `ets()` reports the full Gaussian log-likelihood; R's
|
|
84
|
+
`forecast::ets` prints Hyndman's concentrated form. The two differ by the
|
|
85
|
+
exact constant `0.5*n*[log(n/(2*pi)) - 1]` (e.g. 88.36 at n=100) with the
|
|
86
|
+
same parameter count, so AIC/AICc/BIC differences, model rankings, and
|
|
87
|
+
automatic selection are identical — only the printed numbers differ. The
|
|
88
|
+
convention is now stated on the result's `log_likelihood`/`aic`/`aicc`/
|
|
89
|
+
`bic` accessors.
|
|
90
|
+
|
|
91
|
+
## 4.6.1
|
|
92
|
+
|
|
93
|
+
Performance: faster automatic smoothing-parameter selection for Gaussian
|
|
94
|
+
additive models with more than one smooth term.
|
|
95
|
+
|
|
96
|
+
- `gam()` with the default Gaussian family now selects its smoothing parameters
|
|
97
|
+
using an exact analytic gradient of the GCV/REML criterion instead of a
|
|
98
|
+
finite-difference approximation. The old search cost grew with the number of
|
|
99
|
+
smooth terms; the new one does not. On a 2000-point cubic-regression-spline
|
|
100
|
+
benchmark the fit is roughly 2× faster with four smooths and 3× faster with
|
|
101
|
+
six. The selected model is unchanged — same smoothing parameters, effective
|
|
102
|
+
degrees of freedom, coefficients and fitted values as before. Single-smooth
|
|
103
|
+
fits and generalized (Poisson, binomial, Gamma) additive models are
|
|
104
|
+
unaffected.
|
|
105
|
+
|
|
3
106
|
## 4.6.0
|
|
4
107
|
|
|
5
108
|
Generalized additive models (`gam()`) received a full numerical rewrite. The
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pystatistics
|
|
3
|
-
Version: 4.6.
|
|
3
|
+
Version: 4.6.2
|
|
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,35 @@ pip install pystatistics[dev]
|
|
|
418
418
|
|
|
419
419
|
## What's New
|
|
420
420
|
|
|
421
|
+
### 4.6.2 — STL matches R exactly and runs as fast; ETS automatic model selection
|
|
422
|
+
|
|
423
|
+
`stl()` was rewritten after validation showed it leaking trend into the
|
|
424
|
+
seasonal component on trending series (on the monthly CO2 benchmark the old
|
|
425
|
+
"seasonal" had a range of ~83 where the truth is ~6). It is now an exact
|
|
426
|
+
implementation of the STL procedure and reproduces R's `stats::stl`
|
|
427
|
+
component-for-component (differences below 1e-10 across a reference suite
|
|
428
|
+
including robust fits), with the full STL parameter set exposed
|
|
429
|
+
(`seasonal_degree`, `trend_degree`, `lowpass_window`, jumps, and a
|
|
430
|
+
`"periodic"` default seasonal window). The smoother is compiled, so it now
|
|
431
|
+
runs as fast as R's Fortran implementation — faster for non-robust
|
|
432
|
+
decompositions, on par for robust ones. `ets()` now auto-selects its model
|
|
433
|
+
like `forecast::ets`: the new default `model="ZZZ"` tries every admissible
|
|
434
|
+
error/trend/season combination and returns the best by AICc, with the full
|
|
435
|
+
candidate table disclosed on the result; explicit component requests that
|
|
436
|
+
cannot be honoured raise instead of being silently adjusted. ETS parameter
|
|
437
|
+
estimation now matches R's parameter region as well, so fitted parameters
|
|
438
|
+
and information criteria (AIC/AICc/BIC) line up with `forecast::ets`.
|
|
439
|
+
`ndiffs()` now defaults to the KPSS test, matching `forecast::ndiffs`.
|
|
440
|
+
|
|
441
|
+
### 4.6.1 — faster multi-smooth Gaussian GAMs
|
|
442
|
+
|
|
443
|
+
`gam()` with the default Gaussian family now selects its smoothing parameters
|
|
444
|
+
with an exact analytic gradient of the GCV/REML criterion instead of finite
|
|
445
|
+
differences, so fits with several smooth terms no longer slow down as terms are
|
|
446
|
+
added — about 2× faster with four smooths and 3× with six on a typical fit.
|
|
447
|
+
Estimates are unchanged, and single-smooth and generalized (Poisson, binomial,
|
|
448
|
+
Gamma) additive models are unaffected.
|
|
449
|
+
|
|
421
450
|
### 4.6.0 — generalized additive models rewritten to match `mgcv`
|
|
422
451
|
|
|
423
452
|
`gam()` received a full numerical rewrite. Automatic smoothing-parameter
|
|
@@ -371,6 +371,35 @@ pip install pystatistics[dev]
|
|
|
371
371
|
|
|
372
372
|
## What's New
|
|
373
373
|
|
|
374
|
+
### 4.6.2 — STL matches R exactly and runs as fast; ETS automatic model selection
|
|
375
|
+
|
|
376
|
+
`stl()` was rewritten after validation showed it leaking trend into the
|
|
377
|
+
seasonal component on trending series (on the monthly CO2 benchmark the old
|
|
378
|
+
"seasonal" had a range of ~83 where the truth is ~6). It is now an exact
|
|
379
|
+
implementation of the STL procedure and reproduces R's `stats::stl`
|
|
380
|
+
component-for-component (differences below 1e-10 across a reference suite
|
|
381
|
+
including robust fits), with the full STL parameter set exposed
|
|
382
|
+
(`seasonal_degree`, `trend_degree`, `lowpass_window`, jumps, and a
|
|
383
|
+
`"periodic"` default seasonal window). The smoother is compiled, so it now
|
|
384
|
+
runs as fast as R's Fortran implementation — faster for non-robust
|
|
385
|
+
decompositions, on par for robust ones. `ets()` now auto-selects its model
|
|
386
|
+
like `forecast::ets`: the new default `model="ZZZ"` tries every admissible
|
|
387
|
+
error/trend/season combination and returns the best by AICc, with the full
|
|
388
|
+
candidate table disclosed on the result; explicit component requests that
|
|
389
|
+
cannot be honoured raise instead of being silently adjusted. ETS parameter
|
|
390
|
+
estimation now matches R's parameter region as well, so fitted parameters
|
|
391
|
+
and information criteria (AIC/AICc/BIC) line up with `forecast::ets`.
|
|
392
|
+
`ndiffs()` now defaults to the KPSS test, matching `forecast::ndiffs`.
|
|
393
|
+
|
|
394
|
+
### 4.6.1 — faster multi-smooth Gaussian GAMs
|
|
395
|
+
|
|
396
|
+
`gam()` with the default Gaussian family now selects its smoothing parameters
|
|
397
|
+
with an exact analytic gradient of the GCV/REML criterion instead of finite
|
|
398
|
+
differences, so fits with several smooth terms no longer slow down as terms are
|
|
399
|
+
added — about 2× faster with four smooths and 3× with six on a typical fit.
|
|
400
|
+
Estimates are unchanged, and single-smooth and generalized (Poisson, binomial,
|
|
401
|
+
Gamma) additive models are unaffected.
|
|
402
|
+
|
|
374
403
|
### 4.6.0 — generalized additive models rewritten to match `mgcv`
|
|
375
404
|
|
|
376
405
|
`gam()` received a full numerical rewrite. Automatic smoothing-parameter
|
|
@@ -33,6 +33,7 @@ from scipy.optimize import minimize
|
|
|
33
33
|
|
|
34
34
|
from pystatistics.core.exceptions import ValidationError
|
|
35
35
|
from pystatistics.gam._edf import influence_matrix, logdet_penalized, total_edf
|
|
36
|
+
from pystatistics.gam._gradient import gcv_gradient, reml_gradient_gauss
|
|
36
37
|
from pystatistics.gam._pirls import (
|
|
37
38
|
PenaltyRoot,
|
|
38
39
|
PirlsFit,
|
|
@@ -235,6 +236,33 @@ def select_lambdas(
|
|
|
235
236
|
return ubre_score(fit.deviance, n, edf, scale=1.0)
|
|
236
237
|
return gcv_score(fit.deviance, n, edf)
|
|
237
238
|
|
|
239
|
+
# Analytic-gradient path (Gaussian-identity only): the constant IRLS
|
|
240
|
+
# weights make the criterion an exact closed form of log(lambda), so the
|
|
241
|
+
# outer L-BFGS-B is driven by the analytic gradient (one inner fit per
|
|
242
|
+
# step) instead of scipy's finite differences (2m+1 fits per step). GLM
|
|
243
|
+
# families keep the finite-difference `objective` above (their weights
|
|
244
|
+
# depend on beta -> an implicit d beta/d rho term not implemented here).
|
|
245
|
+
use_analytic = _is_gauss_identity(family)
|
|
246
|
+
|
|
247
|
+
def value_and_grad(
|
|
248
|
+
log_lam: NDArray[np.floating[Any]],
|
|
249
|
+
) -> tuple[float, NDArray[np.floating[Any]]]:
|
|
250
|
+
lam = np.exp(np.asarray(log_lam, dtype=np.float64))
|
|
251
|
+
fit = fit_fixed_lambda(
|
|
252
|
+
y, X, roots, lam, family, tol_inner, max_iter,
|
|
253
|
+
smooth_names=smooth_names, gaussian_cache=gauss_cache,
|
|
254
|
+
)
|
|
255
|
+
edf = total_edf(influence_matrix(fit.R, fit.R_x, fit.piv, fit.rank))
|
|
256
|
+
if method_u == "REML":
|
|
257
|
+
return (
|
|
258
|
+
reml_score(fit, y, family, roots, lam),
|
|
259
|
+
reml_gradient_gauss(fit, roots, lam, n),
|
|
260
|
+
)
|
|
261
|
+
return (
|
|
262
|
+
gcv_score(fit.deviance, n, edf),
|
|
263
|
+
gcv_gradient(fit, roots, lam, n, edf),
|
|
264
|
+
)
|
|
265
|
+
|
|
238
266
|
# REML support check up front (fail before burning optimizer time).
|
|
239
267
|
if method_u == "REML" and not (
|
|
240
268
|
family.dispersion_is_fixed or _is_gauss_identity(family)
|
|
@@ -257,28 +285,44 @@ def select_lambdas(
|
|
|
257
285
|
# the same data in different units (panel-verified). Normalize by the
|
|
258
286
|
# objective at the starting point so the same fit is selected at every
|
|
259
287
|
# response scale.
|
|
260
|
-
f0 = objective(log_lam0)
|
|
288
|
+
f0 = value_and_grad(log_lam0)[0] if use_analytic else objective(log_lam0)
|
|
261
289
|
ref = max(abs(f0), 1e-300)
|
|
262
290
|
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
291
|
+
if use_analytic:
|
|
292
|
+
def fun_scaled(
|
|
293
|
+
log_lam: NDArray[np.floating[Any]],
|
|
294
|
+
) -> tuple[float, NDArray[np.floating[Any]]]:
|
|
295
|
+
val, grad = value_and_grad(log_lam)
|
|
296
|
+
return val / ref, grad / ref
|
|
297
|
+
|
|
298
|
+
result = minimize(
|
|
299
|
+
fun_scaled,
|
|
300
|
+
log_lam0,
|
|
301
|
+
method="L-BFGS-B",
|
|
302
|
+
jac=True,
|
|
303
|
+
bounds=bounds,
|
|
304
|
+
options={"maxiter": 200, "ftol": 1e-12, "gtol": 1e-9},
|
|
305
|
+
)
|
|
306
|
+
else:
|
|
307
|
+
def objective_scaled(log_lam: NDArray[np.floating[Any]]) -> float:
|
|
308
|
+
return objective(log_lam) / ref
|
|
309
|
+
|
|
310
|
+
# eps: the FD step must sit WELL above the inner P-IRLS convergence
|
|
311
|
+
# noise floor or the quasi-Newton curvature estimate is built from
|
|
312
|
+
# noise and the line search collapses short of the optimum (observed
|
|
313
|
+
# on the flat Gamma-log GCV surface: effective evaluation noise
|
|
314
|
+
# ~1e-9 relative even at tol_inner=1e-12, so eps=1e-6 gave gradient
|
|
315
|
+
# noise the SAME size as the true gradient). eps=1e-4 keeps gradient
|
|
316
|
+
# noise ~1e-5 while the induced position error (~eps/2 in log-lambda)
|
|
317
|
+
# is a ~0.005% sp perturbation — far inside the optimizer tolerance
|
|
318
|
+
# tier of the validation contract.
|
|
319
|
+
result = minimize(
|
|
320
|
+
objective_scaled,
|
|
321
|
+
log_lam0,
|
|
322
|
+
method="L-BFGS-B",
|
|
323
|
+
bounds=bounds,
|
|
324
|
+
options={"maxiter": 200, "ftol": 1e-12, "gtol": 1e-9, "eps": 1e-4},
|
|
325
|
+
)
|
|
282
326
|
|
|
283
327
|
# A coordinate sitting ON a search bound is fine when the criterion has
|
|
284
328
|
# asymptoted there (|gradient| small): lambda -> inf is the CORRECT
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"""Analytic gradient of the GAM smoothing-parameter criterion (Gaussian).
|
|
2
|
+
|
|
3
|
+
For the Gaussian-identity model the outer smoothing-parameter search can be
|
|
4
|
+
driven by the EXACT gradient of the GCV / Laplace-REML score with respect to
|
|
5
|
+
``rho = log(lambda)`` instead of finite differences, cutting the per-outer-step
|
|
6
|
+
cost from ``2m+1`` inner fits to a single fit for ``m`` smooths (mgcv's
|
|
7
|
+
``gam.fit3``/``newton`` does the same; this is the A.3 pattern of the mixed
|
|
8
|
+
module — Wood 2011 — specialised to constant IRLS weights).
|
|
9
|
+
|
|
10
|
+
Because the weights are constant (``W = I``), the criterion depends on ``rho``
|
|
11
|
+
only through the closed-form penalized solve, with no implicit
|
|
12
|
+
``d beta / d rho`` weight term. Writing ``A = X'X + S_lambda`` (``A = R'R`` for
|
|
13
|
+
the augmented triangle ``R``), ``H = A^{-1} X'X`` the influence matrix and
|
|
14
|
+
``beta`` the penalized coefficients:
|
|
15
|
+
|
|
16
|
+
d edf / d rho_j = -lambda_j * tr(A^{-1} S_j H)
|
|
17
|
+
d D / d rho_j = 2 * lambda_j * (A^{-1} S_lambda beta)' (S_j beta)
|
|
18
|
+
d(D + penalty)/d rho_j = lambda_j * beta' S_j beta (envelope theorem)
|
|
19
|
+
|
|
20
|
+
from which GCV = n D / (n - edf)^2 and the profiled Laplace-REML score follow
|
|
21
|
+
by the chain rule (see each function). Every term is an O(p^3) operation on the
|
|
22
|
+
p-by-p factors the fit already produced — ``A^{-1}`` is the posterior
|
|
23
|
+
covariance evaluated at unit scale. Pure numpy.
|
|
24
|
+
|
|
25
|
+
Scope: Gaussian-identity ONLY. For GLM families the IRLS weights depend on
|
|
26
|
+
``beta``, so the score gains an implicit ``d beta / d rho`` term (the full Wood
|
|
27
|
+
2011 form) that this module deliberately does not implement; those families
|
|
28
|
+
keep the finite-difference path in ``_criteria.select_lambdas``.
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
from __future__ import annotations
|
|
32
|
+
|
|
33
|
+
from typing import Any
|
|
34
|
+
|
|
35
|
+
import numpy as np
|
|
36
|
+
from numpy.typing import NDArray
|
|
37
|
+
|
|
38
|
+
from pystatistics.gam._edf import influence_matrix, posterior_covariance
|
|
39
|
+
from pystatistics.gam._pirls import PenaltyRoot, PirlsFit
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def _penalty_terms(
|
|
43
|
+
roots: list[PenaltyRoot],
|
|
44
|
+
lambdas: NDArray[np.floating[Any]],
|
|
45
|
+
p: int,
|
|
46
|
+
) -> tuple[list[tuple[float, NDArray[np.floating[Any]], int]],
|
|
47
|
+
NDArray[np.floating[Any]]]:
|
|
48
|
+
"""Per-smooth ``(lambda_j, S_j, rank_j)`` and the assembled ``S_lambda``.
|
|
49
|
+
|
|
50
|
+
``S_j`` is the full ``(p, p)`` penalty (zero outside the smooth's block),
|
|
51
|
+
reconstructed from the cached eigen square root (``rows' rows = S_j``);
|
|
52
|
+
``S_lambda = sum_j lambda_j S_j`` matches the fit's ``B_lam' B_lam``.
|
|
53
|
+
"""
|
|
54
|
+
terms: list[tuple[float, NDArray[np.floating[Any]], int]] = []
|
|
55
|
+
s_lam = np.zeros((p, p), dtype=np.float64)
|
|
56
|
+
for root, lam in zip(roots, lambdas):
|
|
57
|
+
s, e = root.block
|
|
58
|
+
sj = np.zeros((p, p), dtype=np.float64)
|
|
59
|
+
sj[s:e, s:e] = root.rows.T @ root.rows
|
|
60
|
+
s_lam += float(lam) * sj
|
|
61
|
+
terms.append((float(lam), sj, root.rank))
|
|
62
|
+
return terms, s_lam
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def gcv_gradient(
|
|
66
|
+
fit: PirlsFit,
|
|
67
|
+
roots: list[PenaltyRoot],
|
|
68
|
+
lambdas: NDArray[np.floating[Any]],
|
|
69
|
+
n: int,
|
|
70
|
+
edf: float,
|
|
71
|
+
) -> NDArray[np.floating[Any]]:
|
|
72
|
+
"""``d GCV / d rho`` for the Gaussian-identity model, ``rho = log lambda``.
|
|
73
|
+
|
|
74
|
+
``GCV = n D / (n - edf)^2`` so, with ``tau = n - edf``,
|
|
75
|
+
|
|
76
|
+
d GCV / d rho_j = n * D'_j / tau^2 + 2 n D * edf'_j / tau^3
|
|
77
|
+
|
|
78
|
+
using ``D'_j = 2 lambda_j (A^{-1} S_lambda beta)'(S_j beta)`` and
|
|
79
|
+
``edf'_j = -lambda_j tr(A^{-1} S_j H)``.
|
|
80
|
+
"""
|
|
81
|
+
p = fit.R.shape[0]
|
|
82
|
+
a_inv = posterior_covariance(fit.R, fit.piv, fit.rank, 1.0) # A^{-1}
|
|
83
|
+
h = influence_matrix(fit.R, fit.R_x, fit.piv, fit.rank)
|
|
84
|
+
terms, s_lam = _penalty_terms(roots, lambdas, p)
|
|
85
|
+
beta = fit.beta
|
|
86
|
+
d = fit.deviance
|
|
87
|
+
tau = n - edf
|
|
88
|
+
# p_vec = A^{-1} S_lambda beta (so D'_j = 2 lambda_j p_vec' S_j beta)
|
|
89
|
+
p_vec = a_inv @ (s_lam @ beta)
|
|
90
|
+
|
|
91
|
+
grad = np.empty(len(terms), dtype=np.float64)
|
|
92
|
+
for j, (lam, sj, _rank_j) in enumerate(terms):
|
|
93
|
+
sj_beta = sj @ beta
|
|
94
|
+
d_dev = 2.0 * lam * float(p_vec @ sj_beta)
|
|
95
|
+
# edf'_j = -lambda_j tr(A^{-1} S_j H)
|
|
96
|
+
d_edf = -lam * float(np.einsum("ab,ba->", a_inv @ sj, h))
|
|
97
|
+
grad[j] = n * d_dev / tau**2 + 2.0 * n * d * d_edf / tau**3
|
|
98
|
+
return grad
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def reml_gradient_gauss(
|
|
102
|
+
fit: PirlsFit,
|
|
103
|
+
roots: list[PenaltyRoot],
|
|
104
|
+
lambdas: NDArray[np.floating[Any]],
|
|
105
|
+
n: int,
|
|
106
|
+
) -> NDArray[np.floating[Any]]:
|
|
107
|
+
"""``d V / d rho`` for the Gaussian-identity Laplace-REML score.
|
|
108
|
+
|
|
109
|
+
The score reduces (constants dropped) to
|
|
110
|
+
|
|
111
|
+
V = (n - M_p)/2 * log(D + penalty) + (log|A| - log|S_lambda|_+)/2
|
|
112
|
+
|
|
113
|
+
so, with ``phi = (D + penalty)/(n - M_p)``, ``d(D+penalty)/d rho_j``
|
|
114
|
+
collapsing to ``lambda_j beta' S_j beta`` (envelope),
|
|
115
|
+
``d log|A|/d rho_j = lambda_j tr(A^{-1} S_j)`` and
|
|
116
|
+
``d log|S_lambda|_+/d rho_j = rank_j``:
|
|
117
|
+
|
|
118
|
+
d V / d rho_j = lambda_j beta'S_j beta / (2 phi)
|
|
119
|
+
+ lambda_j tr(A^{-1} S_j) / 2 - rank_j / 2
|
|
120
|
+
"""
|
|
121
|
+
p = fit.R.shape[0]
|
|
122
|
+
a_inv = posterior_covariance(fit.R, fit.piv, fit.rank, 1.0) # A^{-1}
|
|
123
|
+
terms, _s_lam = _penalty_terms(roots, lambdas, p)
|
|
124
|
+
beta = fit.beta
|
|
125
|
+
rank_s = sum(r.rank for r in roots)
|
|
126
|
+
m_p = max(fit.rank - rank_s, 0)
|
|
127
|
+
d_p = fit.deviance + fit.penalty
|
|
128
|
+
phi = d_p / (n - m_p)
|
|
129
|
+
|
|
130
|
+
grad = np.empty(len(terms), dtype=np.float64)
|
|
131
|
+
for j, (lam, sj, rank_j) in enumerate(terms):
|
|
132
|
+
b_sj_b = float(beta @ (sj @ beta))
|
|
133
|
+
tr_ainv_sj = float(np.einsum("ab,ba->", a_inv, sj))
|
|
134
|
+
grad[j] = (
|
|
135
|
+
lam * b_sj_b / (2.0 * phi)
|
|
136
|
+
+ 0.5 * lam * tr_ainv_sj
|
|
137
|
+
- 0.5 * rank_j
|
|
138
|
+
)
|
|
139
|
+
return grad
|
|
@@ -13,13 +13,22 @@ Public API:
|
|
|
13
13
|
ndiffs(x) - Estimate differences for stationarity (matches R forecast::ndiffs)
|
|
14
14
|
adf_test(x) - Augmented Dickey-Fuller unit root test (matches R tseries::adf.test)
|
|
15
15
|
kpss_test(x) - KPSS stationarity test (matches R tseries::kpss.test)
|
|
16
|
-
ets(y) - Fit an ETS state space model (matches R forecast::ets
|
|
16
|
+
ets(y) - Fit an ETS state space model (matches R forecast::ets,
|
|
17
|
+
including "Z"-wildcard automatic selection; default
|
|
18
|
+
model="ZZZ". Reported log-likelihood/AIC use the full-
|
|
19
|
+
Gaussian convention — R's concentrated numbers differ by
|
|
20
|
+
a constant in n; model rankings/selection are identical.
|
|
21
|
+
See timeseries._ets_fit and ._ets_select docstrings.)
|
|
17
22
|
forecast_ets(f) - Forecast from a fitted ETS model
|
|
18
23
|
arima(y) - Fit an ARIMA model (matches R stats::arima)
|
|
19
24
|
forecast_arima(f, y) - Forecast from a fitted ARIMA model
|
|
20
25
|
auto_arima(y) - Automatic ARIMA order selection (matches R forecast::auto.arima)
|
|
21
26
|
decompose(x) - Classical time series decomposition (matches R stats::decompose)
|
|
22
|
-
stl(x) - STL decomposition (matches R stats::stl
|
|
27
|
+
stl(x) - STL decomposition (matches R stats::stl; identical parameters
|
|
28
|
+
reproduce R's components to floating-point noise. Interface
|
|
29
|
+
divergences, both deliberate: seasonal_window defaults to
|
|
30
|
+
"periodic" where R requires it explicitly, and even/short
|
|
31
|
+
loess spans raise instead of being silently rounded up.)
|
|
23
32
|
"""
|
|
24
33
|
|
|
25
34
|
from pystatistics.timeseries._acf import acf, pacf
|
|
@@ -28,7 +37,8 @@ from pystatistics.timeseries._stationarity import adf_test, kpss_test
|
|
|
28
37
|
from pystatistics.timeseries._common import (
|
|
29
38
|
ACFParams, ACFSolution, StationarityParams, StationaritySolution,
|
|
30
39
|
)
|
|
31
|
-
from pystatistics.timeseries._ets_fit import
|
|
40
|
+
from pystatistics.timeseries._ets_fit import ETSParams, ETSSolution
|
|
41
|
+
from pystatistics.timeseries._ets_select import ets
|
|
32
42
|
from pystatistics.timeseries._ets_forecast import forecast_ets, ETSForecast
|
|
33
43
|
from pystatistics.timeseries._ets_models import ETSSpec
|
|
34
44
|
from pystatistics.timeseries._arima_solution import ARIMAParams, ARIMASolution
|
|
@@ -41,8 +51,9 @@ from pystatistics.timeseries._arima_order import (
|
|
|
41
51
|
auto_arima, AutoARIMAParams, AutoARIMASolution,
|
|
42
52
|
)
|
|
43
53
|
from pystatistics.timeseries._decomposition import (
|
|
44
|
-
decompose,
|
|
54
|
+
decompose, DecompositionParams, DecompositionSolution,
|
|
45
55
|
)
|
|
56
|
+
from pystatistics.timeseries._stl import stl
|
|
46
57
|
|
|
47
58
|
__all__ = [
|
|
48
59
|
"acf",
|