BUG: reject negative dispersion in power_equivalence_neginb_2indep - #10426
Merged
bashtage merged 2 commits intoOct 4, 2026
Merged
Conversation
A negative dispersion coefficient entered the variance term directly and silently produced a negative power. Reject negative values; dispersion=0 stays valid as the documented Poisson limiting case.
Member
|
Thanks. |
1 similar comment
Member
|
Thanks. |
4 of 5 tasks
bashtage
added a commit
that referenced
this pull request
Oct 5, 2026
The checks added in GH-10379, GH-10386, GH-10388, GH-10392, GH-10393, GH-10399, GH-10405, GH-10406, GH-10411, GH-10420, GH-10421, GH-10423, GH-10425, GH-10426 and GH-10431 compare the arguments with scalars, for example `if not 0 < alpha < 1`, `if low > upp` or `if dispersion < 0`. These raise "The truth value of an array with more than one element is ambiguous" for arrays and Series. The functions broadcast over these arguments and return the same values as the calls for the elements in 0.15.0, for example a confidence interval for several alpha, the power for several equivalence margins or a table of sample sizes. Test with np.all and the comparison ufuncs instead, which work for scalars, lists, arrays and Series, and which also reject NaN. The error messages are unchanged. A new test checks for 50 arguments that an array of two valid values gives the same result as the two calls with the scalars, and that one invalid element (including NaN) is rejected. Follow-up to GH-10379, GH-10386, GH-10388, GH-10392, GH-10393, GH-10399, GH-10405, GH-10406, GH-10411, GH-10420, GH-10421, GH-10423, GH-10425, GH-10426, GH-10431 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
bashtage
added a commit
that referenced
this pull request
Oct 5, 2026
The arguments that broadcast are documented as float or int, but arrays work, and the previous commit keeps them working. Document them as float or array_like in the functions of the previous commit and in chisquare_power, which says in its Notes that it works vectorized. Follow-up to GH-10379, GH-10386, GH-10388, GH-10392, GH-10393, GH-10399, GH-10405, GH-10406, GH-10411, GH-10420, GH-10421, GH-10423, GH-10425, GH-10426, GH-10431 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
power_equivalence_neginb_2indepmultiplies its variance terms by the dispersion coefficient but never checks it, so a negative value silently produces a negative power:The sibling rate-power functions (
power_poisson_ratio_2indep,power_negbin_ratio_2indep) already validate dispersion; the equivalence-power companion was missing the same guard.This PR adds it after the existing
nobs1/alphachecks:dispersion = 0deliberately stays valid — the docstring documents it as the Poisson limiting case ("The Poisson limiting case corresponds todispersion=0").Regression test:
test_power_equivalence_neginb_negative_dispersion_raisescovers the raise and the finite-power Poisson limit atdispersion=0.AI Disclosure
Tool(s):
ZCode (GLM-based coding agent).Used for: locating the missing validation by probing public API behavior, drafting the guard, regression test, and PR description.
All code was reviewed and tested by the author before submission, who remains responsible for the change.