Skip to content

Commit b04d7dc

Browse files
committed
sampszcal: better handling of edge cases for testtype 't2'
1 parent 13e576d commit b04d7dc

File tree

1 file changed

+9
-7
lines changed

1 file changed

+9
-7
lines changed

inst/sampszcalc.m

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,9 @@
146146
end
147147
else
148148
STAT = abs (effsz);
149+
if (STAT >= 1)
150+
error ('sampszcalc: |r| must be < 1')
151+
end
149152
end
150153
STAT = atanh (STAT);
151154
testtype = 'z';
@@ -182,15 +185,14 @@
182185
% Create function to optimize sample size based on Student-t
183186
% distribution and n * k - k degrees of freedom
184187
if ((exist ('betaincinv', 'builtin')) || (exist ('betaincinv', 'file')))
185-
studinv = @(P, DF) sign (P - 0.5) * ...
186-
sqrt ( DF ./ betaincinv (2 * min (P, 1 - P), DF / 2, 0.5) - DF);
188+
studinv = @(P, DF) sign (P - 0.5) * sqrt ( DF ./ betaincinv ( ...
189+
2 * min (P, 1 - P), DF / 2, 0.5) - DF);
187190
else
188-
studinv = @(P, DF) sign (P - 0.5) * ...
189-
sqrt ( DF ./ betainv (2 * min (P, 1 - P), DF / 2, 0.5) - DF);
191+
studinv = @(P, DF) sign (P - 0.5) * sqrt ( DF ./ betainv ( ...
192+
2 * min (P, 1 - P), DF / 2, 0.5) - DF);
190193
end
191-
func = @(n) n - k * ...
192-
(((studinv (power, n * k - k) + ...
193-
studinv (1 - alpha / tails, n * k - k)) / STAT)^2 + c);
194+
func = @(n) n - k * (((studinv (power, max (1, n * k - k)) + ...
195+
studinv (1 - alpha / tails, max (1, n * k - k))) / STAT)^2 + c);
194196
n = ceil (fzero (func, n0) * deff); % Find the root using fzero
195197
end
196198

0 commit comments

Comments
 (0)