BUG: validate interval, alpha, and p_alt in binomial TOST helpers - #10406
Merged
bashtage merged 1 commit intoOct 4, 2026
Merged
Conversation
binom_tost_reject_interval silently returned a reversed rejection region (69, 22) for an inverted interval and (nan, nan) for alpha outside (0, 1); power_binom_tost returned a negative power (-0.9999) for an inverted interval and nan for p_alt outside [0, 1]. Raise ValueError in both, plus the shared implementation power_ztost_prop. Array-valued p_alt inputs are handled via np.any.
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>
bashtage
added a commit
that referenced
this pull request
Oct 5, 2026
binom_tost_reject_interval, power_binom_tost and power_ztost_prop did not check nobs. power_binom_tost(0.4, 0.6, nobs=0) returned a power of -1.0 and a negative nobs returned nan, or "nobs must be positive" in the other functions of the module. Reject nobs <= 0 and NaN, for arrays too. Follow-up to GH-10406
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.
Problem
The binomial TOST helpers silently accept impossible inputs:
This is the exact-binomial counterpart of the interval validation already added to `binom_tost`, `proportions_ztost`, and the weightstats TOST tests.
Fix
Raise `ValueError`:
Array-valued `p_alt` (used by the existing vectorized tests) is handled via `np.any`.
Tests
Added `test_binom_tost_helpers_invalid_inputs_raises` in `statsmodels/stats/tests/test_proportion.py` covering both functions and all three parameters. Verified red without the fix and green with it; the full test module passes (576 passed, 5 skipped) and the diff introduces no new `ruff check` findings.
AI Disclosure
Contributions comply with the statsmodels AI Policy. Completed option:
Tool(s): `ZCode (GLM-based coding agent)`.
Used for: `drafting the repro script, the implementation, the tests, and the PR text; I executed all code locally, verified the red/green test cycle, and reviewed every line of the diff`.
I have personally read, understood, and can explain every line of this diff, and
have verified the statistical/numerical correctness of the change.