c----------------------------------------------------------------------- c c MAINES2 Main program for calculating properties of selected c two-sided, error spending tests. c c C. Jennison, 9 September 1999 c c----------------------------------------------------------------------- c c The examples concern tests with error spending functions of the form c c f(t) = min(alpha t^rho,alpha) c c where t = inf/imax c c Constants defining these tests can be found in Table 7.1 c c in the book Group Sequential Methods with Applications to Clinical c Trials by Jennison & Turnbull. c c The expected sample sizes of the test run under design conditions c agree with the values displayed in Table 7.3 (any small difference c is because the constant rld has been rounded to 3 decimal places). c c Attained powers when information levels depart from their design c values agree with Table 7.4 for the cases "r=1 and pi=0.9 & 1.1" c in the notation of that table. c c----------------------------------------------------------------------- integer na,r,ierr,k real*8 inf(100),theta,zbdy(2,100),pu,pe,pl,pbya(3,100),einf, + alpha,beta,delta,rho,ifix,rld,imax,eratio,t1err, + cume(2,100), + invnor c Set number of analyses, Type I and II error probabilities, and value c of theta at which power 1-beta is required. na=5 alpha=0.05 beta=0.1 delta=2.0 rho=2.0 c Set the parameter controlling density of grid points in numerical c integrations. r=16 c Set constants for the tests. c rld is the factor which multiplies the fixed information level to c give the target maximum information level. rld=1.058 c Find information level needed by a fixed sample test ifix=(invnor(1-alpha/2)+invnor(1-beta))**2/delta**2 imax=ifix*rld write(6,1) alpha,beta,delta,ifix 1 format(/'A fixed sample, two-sided test with Type I' + ' error probability =',f6.3, + /'and Type II error probability =',f6.3,' at theta =',f6.3, + ' requires an' + /'information level =',f6.3,'.') c a) Lan & DeMets error spending test when information levels are exactly c equal to their design values do 110 k=1,na inf(k)=(k*imax)/na cume(2,k)=0.5*dmin1(alpha*(inf(k)/imax)**rho,alpha) cume(1,k)=0.5*dmin1(alpha*(inf(k)/imax)**rho,alpha) 110 continue call ersp2(na,inf,cume,r,zbdy,ierr) c Under the null hypothesis theta=0.0 call gst2(na,inf,theta,zbdy,r,pu,pe,pl,pbya,einf,ierr) eratio=einf/ifix t1err=pu+pl write(6,121) ierr,pu,pe,pl,t1err,einf,eratio 121 format(//'Two-sided error spending test' + /'-----------------------------' + //'theta=0:' + //'ierr=',i1 + //'Pr{Exit upper boundary} = ',f10.5 + /'Pr{Continue inside boundary} = ',f10.5 + /'Pr{Exit lower boundary} = ',f10.5 + //'Type I error probability = ',f10.5 + //'E{Information on termination} = ',f10.5 + /'E{Inf}/Fixed sample inf level = ',f10.5) write(6,122) 122 format(/'Probability of stopping by analysis'/) write(6,123) (pbya(3,k),k=1,na) 123 format(' upper boundary ',5f10.6) write(6,124) (pbya(2,k),k=1,na) 124 format(' between boundaries ',5f10.6) write(6,125) (pbya(1,k),k=1,na) 125 format(' lower boundary ',5f10.6) c At the positive alternative where power 1-beta is required theta=delta call gst2(na,inf,theta,zbdy,r,pu,pe,pl,pbya,einf,ierr) eratio=einf/ifix write(6,131) ierr,pu,pe,pl,pu,einf,eratio 131 format( /'theta=delta:' + //'ierr=',i1 + //'Pr{Exit upper boundary} = ',f10.5 + /'Pr{Continue inside boundary} = ',f10.5 + /'Pr{Exit lower boundary} = ',f10.5 + //'Power at theta=delta = ',f10.5 + //'E{Information on termination} = ',f10.5 + /'E{Inf}/Fixed sample inf level = ',f10.5) write(6,132) 132 format(/'Probability of stopping by analysis'/) write(6,133) (pbya(3,k),k=1,na) 133 format(' upper boundary ',5f10.6) write(6,134) (pbya(2,k),k=1,na) 134 format(' between boundaries ',5f10.6) write(6,135) (pbya(1,k),k=1,na) 135 format(' lower boundary ',5f10.6) c b) Maximum duration error spending test when information levels are c a little smaller than their design values. c c Note that the information sequence does not reach imax but, as c specified in the definition of a "maximum duration" test, the c Type I error is brought up to its overall value at the final c analysis. do 210 k=1,na inf(k)=0.9*(k*imax)/na cume(2,k)=0.5*dmin1(alpha*(inf(k)/imax)**rho,alpha) cume(1,k)=0.5*dmin1(alpha*(inf(k)/imax)**rho,alpha) if(k.eq.na) then cume(2,k)=0.5*alpha cume(1,k)=0.5*alpha endif 210 continue call ersp2(na,inf,cume,r,zbdy,ierr) c Under the null hypothesis theta=0.0 call gst2(na,inf,theta,zbdy,r,pu,pe,pl,pbya,einf,ierr) eratio=einf/ifix t1err=pu+pl write(6,221) ierr,pu,pe,pl,t1err,einf,eratio 221 format(//'Two-sided error spending test, low inf. levels' + /'----------------------------------------------' + //'theta=0:' + //'ierr=',i1 + //'Pr{Exit upper boundary} = ',f10.5 + /'Pr{Continue inside boundary} = ',f10.5 + /'Pr{Exit lower boundary} = ',f10.5 + //'Type I error probability = ',f10.5 + //'E{Information on termination} = ',f10.5 + /'E{Inf}/Fixed sample inf level = ',f10.5) write(6,222) 222 format(/'Probability of stopping by analysis'/) write(6,223) (pbya(3,k),k=1,na) 223 format(' upper boundary ',5f10.6) write(6,224) (pbya(2,k),k=1,na) 224 format(' between boundaries ',5f10.6) write(6,225) (pbya(1,k),k=1,na) 225 format(' lower boundary ',5f10.6) c At the positive alternative where power 1-beta is required theta=delta call gst2(na,inf,theta,zbdy,r,pu,pe,pl,pbya,einf,ierr) eratio=einf/ifix write(6,231) ierr,pu,pe,pl,pu,einf,eratio 231 format( /'theta=delta:' + //'ierr=',i1 + //'Pr{Exit upper boundary} = ',f10.5 + /'Pr{Continue inside boundary} = ',f10.5 + /'Pr{Exit lower boundary} = ',f10.5 + //'Power at theta=delta = ',f10.5 + //'E{Information on termination} = ',f10.5 + /'E{Inf}/Fixed sample inf level = ',f10.5) write(6,232) 232 format(/'Probability of stopping by analysis'/) write(6,233) (pbya(3,k),k=1,na) 233 format(' upper boundary ',5f10.6) write(6,234) (pbya(2,k),k=1,na) 234 format(' between boundaries ',5f10.6) write(6,235) (pbya(1,k),k=1,na) 235 format(' lower boundary ',5f10.6) c c) Maximum duration or maximum information error spending test when c information levels are a little larger than their design values. c c Since the information level imax is reached, the same test results c in either a "maximum duration" or "maximum information" formulation. do 310 k=1,na inf(k)=1.1*(k*imax)/na cume(2,k)=0.5*dmin1(alpha*(inf(k)/imax)**rho,alpha) cume(1,k)=0.5*dmin1(alpha*(inf(k)/imax)**rho,alpha) 310 continue call ersp2(na,inf,cume,r,zbdy,ierr) c Under the null hypothesis theta=0.0 call gst2(na,inf,theta,zbdy,r,pu,pe,pl,pbya,einf,ierr) eratio=einf/ifix t1err=pu+pl write(6,321) ierr,pu,pe,pl,t1err,einf,eratio 321 format(//'Two-sided error spending test, high inf. levels' + /'-----------------------------------------------' + //'theta=0:' + //'ierr=',i1 + //'Pr{Exit upper boundary} = ',f10.5 + /'Pr{Continue inside boundary} = ',f10.5 + /'Pr{Exit lower boundary} = ',f10.5 + //'Type I error probability = ',f10.5 + //'E{Information on termination} = ',f10.5 + /'E{Inf}/Fixed sample inf level = ',f10.5) write(6,322) 322 format(/'Probability of stopping by analysis'/) write(6,323) (pbya(3,k),k=1,na) 323 format(' upper boundary ',5f10.6) write(6,324) (pbya(2,k),k=1,na) 324 format(' between boundaries ',5f10.6) write(6,325) (pbya(1,k),k=1,na) 325 format(' lower boundary ',5f10.6) c At the positive alternative where power 1-beta is required theta=delta call gst2(na,inf,theta,zbdy,r,pu,pe,pl,pbya,einf,ierr) eratio=einf/ifix write(6,331) ierr,pu,pe,pl,pu,einf,eratio 331 format( /'theta=delta:' + //'ierr=',i1 + //'Pr{Exit upper boundary} = ',f10.5 + /'Pr{Continue inside boundary} = ',f10.5 + /'Pr{Exit lower boundary} = ',f10.5 + //'Power at theta=delta = ',f10.5 + //'E{Information on termination} = ',f10.5 + /'E{Inf}/Fixed sample inf level = ',f10.5) write(6,332) 332 format(/'Probability of stopping by analysis'/) write(6,333) (pbya(3,k),k=1,na) 333 format(' upper boundary ',5f10.6) write(6,334) (pbya(2,k),k=1,na) 334 format(' between boundaries ',5f10.6) write(6,335) (pbya(1,k),k=1,na) 335 format(' lower boundary ',5f10.6) stop end