Program to calculate one- and two-way probabilities for t-tests
DEF FNt(x) = (1 + x^2/v)^(exponent)
DIM n9(16), t(136)
INPUT "enter n (v=n-2 will be computed) = ",n
v = n-2
x = (v+1)/2
GOSUB gamma
g1 = gamma
x = v/2
GOSUB gamma
g2 = gamma
g2 = SQR(v*pi)*g2
constant = g1/g2
exponent = -(v+1)/2
GOSUB t:
gamma:
pi = 3.14159
y = x + 2
g = SQR(2*pi/y) * EXP(y * LOG(y) + (1 - 1/(30*y^2))/(12*y) - y)
gamma = g/(x * (x+1))
RETURN
t:
lower = 0
INPUT "t = ",tstat
upper = ABS(tstat)
tol = .001
GOSUB integration
PRINT
PRINT "probability of"
PRINT
IF tstat < 0 THEN
PRINT " t <=";
PRINT tstat;
PRINT USING " = #.######"; .5 - sum*constant
ELSE
TABLE 10-4 (CONTINUED)
PRINT " t >=";
PRINT tstat;
PRINT USING " = #.######"; .5 - sum*constant
END IF
PRINT
PRINT " ";:
PRINT -tstat;
PRINT " < t < ";
PRINT tstat;
PRINT USING " = #.######"; (.5 - sum*constant)*2
a$ = INPUT$(1)
END
integration:
panels = 1
n9(1) = 1
delta = (upper - lower)/panels
c = (FNt(lower) + FNt(upper))/2
t(1) = delta * c
n = 1
n8 = 2
sum = c
again:
n = n+1
f3 = 4
n9(n) = n8
panels = panels*2
l = panels - 1
delta = (upper - lower)/panels
FOR ii = 1 TO (l+1)/2
i = ii*2 - 1
x = lower + i*delta
sum = sum + FNt(x)
NEXT ii
t(n8) = delta*sum
n7 = n9(n-1)
k = n-1
FOR m = 1 TO k
j = n8 + m
n6 = n9(n-1) + m - 1
t(j) = (f3*t(j-1) - t(n6))/(f3 - 1)
f3 = f3*4
NEXT m
IF n<=4 THEN more
IF t(n8 + 1) = 0 THEN more
IF ABS(t(n7 + 1) - t(n8 + 1)) <= ABS(t(n8+1)*tol) THEN out
IF ABS(t(n8-1) - t(j)) = ABS(t(j)*tol) THEN out
IF n > 15 THEN fail
TABLE 10-4 (CONTINUED)
more: n8 = j + 1
GOTO again
out: sum = t(j)
RETURN
fail: PRINT "no convergence"
RETURN
Parts of this program were adapted from Alan R. Miller,
BASIC Programs for Scientists and Engineers, Berkeley: Sybex, 1981.