From 582ce2186390e2bf7d98df1b0546cb823a79dbb2 Mon Sep 17 00:00:00 2001 From: Yan Wong Date: Mon, 9 Jan 2023 00:06:32 +0000 Subject: [PATCH] Better timeslices Finally fixes #7 and produces a much nicer looking fit for large tree sequences, but leads to slightly worse performance for tiny tree sequences such as those tested in test_accuracy.py, because of #230. When we fix that, this PR should provide uniformly better performance, I hope --- CHANGELOG.md | 3 +++ tsdate/prior.py | 6 ++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 21938fdb..10284a53 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,9 @@ - The default `min_branch_length` and `eps` have been set to 1e-8 rather than 1e-10, to avoid occasional issues with floating point error. +- A slight adjustement in the default timeslices used for the discrete-time method: see + https://github.com/tskit-dev/tsdate/pull/233 for a rationale. + ## [0.2.4] - 2025-09-18 - Add support for Python 3.13, minimum version is now 3.10. diff --git a/tsdate/prior.py b/tsdate/prior.py index 2cb0095f..753252c0 100644 --- a/tsdate/prior.py +++ b/tsdate/prior.py @@ -936,8 +936,10 @@ def create_timepoints(base_priors, n_points=21): # missing samples, otherwise we only have one set of priors anyway prior_params = base_priors.prior_with_max_total_tips() # Percentages - current day samples should be at time 0, so we omit this - # We can't include the top end point, as this leads to NaNs - percentiles = np.linspace(0, 1, n_points + 1)[1:-1] + # We can't include 1 at the top end as it will be at infinite time + # so we take the upper time point to be a fraction lower than 1 (as if we divided + # the last timeslice into n_points evenly picked quantiles and removed the last one) + percentiles = np.linspace(0, 1 - 1 / (n_points**2), n_points)[1:] # percentiles = np.append(percentiles, 0.999999) param_cols = np.where([f not in ("mean", "var") for f in PriorParams._fields])[0] """