diff --git a/locat/locat.py b/locat/locat.py index 2b4a934..d83e0ed 100755 --- a/locat/locat.py +++ b/locat/locat.py @@ -1453,11 +1453,15 @@ def logsidak_from_logp(logp_min: float, m_eff: int) -> float: log p_sidák = log(1 - (1 - p_min)^m_eff) = log(1 - exp(m_eff * log(1 - p_min))) with log(1 - p_min) = log1p(-exp(logp_min)). + + This preserves the original locat_condensed depletion-scan behavior, + where the Sidák correction is applied for ordinary negative log-p values + and only skipped when there is effectively a single test. """ - if m_eff <= 1 or logp_min <= 0: - return logp_min + if m_eff <= 1: + return float(logp_min) l1mp = np.log1p(-np.exp(logp_min)) - return np.log1p(-np.exp(m_eff * l1mp)) + return float(np.log1p(-np.exp(m_eff * l1mp))) @numba.njit diff --git a/tests/utils/test_simulations.py b/tests/utils/test_simulations.py index dea6ed3..240b500 100644 --- a/tests/utils/test_simulations.py +++ b/tests/utils/test_simulations.py @@ -21,7 +21,7 @@ def test_simulated_data(self): self.assertAlmostEqual(-1.512298, gene_0_results.bic, places=5) self.assertAlmostEqual(46.893, gene_0_results.zscore, places=2) self.assertAlmostEqual(1.0, gene_0_results.sens_score, places=5) - self.assertAlmostEqual(3.98127e-8, gene_0_results.depletion_pval, places=12) + self.assertAlmostEqual(5.1756511e-7, gene_0_results.depletion_pval, places=8) self.assertAlmostEqual(1e-15, gene_0_results.concentration_pval, places=14) self.assertAlmostEqual( 0.000970843, gene_0_results.pval, places=8) self.assertEqual(1, gene_0_results.K_components)