From 7f579219986ab48e1117277839d4007c338ef234 Mon Sep 17 00:00:00 2001 From: Boris MUZELLEC Date: Fri, 28 Feb 2025 10:40:25 +0100 Subject: [PATCH] fix: improve the numerical stability of lfc_shrink --- pydeseq2/utils.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/pydeseq2/utils.py b/pydeseq2/utils.py index 5b031320..e21e29c1 100644 --- a/pydeseq2/utils.py +++ b/pydeseq2/utils.py @@ -56,9 +56,10 @@ def load_example_data( pandas.DataFrame Requested data modality. """ - assert modality in ["raw_counts", "metadata"], ( - "The modality argument must be one of the following: " "raw_counts, metadata" - ) + assert modality in [ + "raw_counts", + "metadata", + ], "The modality argument must be one of the following: raw_counts, metadata" assert dataset in [ "synthetic" @@ -1078,13 +1079,14 @@ def f(beta: np.ndarray, cnst: float = scale_cnst) -> float: def df(beta: np.ndarray, cnst: float = scale_cnst) -> np.ndarray: # Gradient of the function to optimize xbeta = design_matrix @ beta + exp_xbeta_off = np.exp(xbeta + offset) d_neg_prior = ( beta * no_shrink_mask / prior_no_shrink_scale**2 + 2 * beta * shrink_mask / (prior_scale**2 + beta[shrink_index] ** 2) ) d_nll = ( - counts - (counts + size) / (1 + size * np.exp(-xbeta - offset)) + size * (counts - exp_xbeta_off) / (size + exp_xbeta_off) ) @ design_matrix return (d_neg_prior - d_nll) / cnst