From 17c4b2e1fa44d9a727c42bb5eed4cceb21afa7bc Mon Sep 17 00:00:00 2001 From: Jan Tilly Date: Tue, 17 Mar 2026 20:32:39 +0100 Subject: [PATCH 1/4] Add test for inverse_derivative2. --- tests/glm/test_link.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/glm/test_link.py b/tests/glm/test_link.py index 7c4095d5..dc795791 100644 --- a/tests/glm/test_link.py +++ b/tests/glm/test_link.py @@ -32,6 +32,15 @@ def test_link_properties(link): assert link.inverse_derivative2(x).shape == link.inverse_derivative(x).shape + # Check inverse_derivative2 against numerical second derivative + h = 1e-7 + numerical_d2 = (link.inverse_derivative(x + h) - link.inverse_derivative(x - h)) / ( + 2 * h + ) + np.testing.assert_allclose( + link.inverse_derivative2(x), numerical_d2, rtol=1e-4, atol=1e-8 + ) + def test_equality(): assert IdentityLink() == IdentityLink() From 44d0ea9c45682b6487cbf6f8f1aab74379413a39 Mon Sep 17 00:00:00 2001 From: Jan Tilly Date: Tue, 17 Mar 2026 20:38:27 +0100 Subject: [PATCH 2/4] Fix inverse_derivative2 for cloglog. --- src/glum/_link.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/glum/_link.py b/src/glum/_link.py index 5dd6de47..7fc3e962 100644 --- a/src/glum/_link.py +++ b/src/glum/_link.py @@ -253,7 +253,7 @@ def inverse_derivative2(self, lin_pred): # noqa D class CloglogLink(Link): - """The complementary log-log link function ``log(-log(-p))``.""" + """The complementary log-log link function ``log(-log(1-mu))``.""" def __eq__(self, other): # noqa D return isinstance(other, self.__class__) @@ -279,5 +279,4 @@ def inverse_derivative(self, lin_pred): # noqa D return np.exp(lin_pred - np.exp(lin_pred)) def inverse_derivative2(self, lin_pred): # noqa D - # TODO: check if numerical stability can be improved - return np.exp(np.exp(lin_pred) - lin_pred) * np.expm1(lin_pred) + return -np.exp(lin_pred - np.exp(lin_pred)) * np.expm1(lin_pred) From b6093a1df25120280583d18d07b13b922a8b70e1 Mon Sep 17 00:00:00 2001 From: Jan Tilly Date: Tue, 17 Mar 2026 20:42:10 +0100 Subject: [PATCH 3/4] Add changelog entry. --- CHANGELOG.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index eadf0ecd..44c3b3cb 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -7,6 +7,13 @@ Changelog ========= +3.2.2 - 2026-03-18 +------------------ + +**Bug fix:** + +- Fixed incorrect formula in :meth:`~glum.CloglogLink.inverse_derivative2`. This affected observed information matrix computation and robust/clustered standard errors for models using the complementary log-log link. + 3.2.1 - 2026-03-16 ------------------ From 600a17eea5c8119518353c9c0ca10bbfc3e489c3 Mon Sep 17 00:00:00 2001 From: Jan Tilly Date: Tue, 17 Mar 2026 21:52:36 +0100 Subject: [PATCH 4/4] Apply suggestion from @jtilly --- CHANGELOG.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 44c3b3cb..9b4105d7 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -7,7 +7,7 @@ Changelog ========= -3.2.2 - 2026-03-18 +3.2.2 - 2026-03-17 ------------------ **Bug fix:**