SUB CHI0SQ(NR,NC) DIM #3,B(250,15) \ DIM #5,W(250,15) COM V(7,15) ! ! THIS FUNCTION COMPUTES X FACTORAL ! DEF* FNF(X) IF X<=1. THEN FNF=1. ELSE FNF=X*FNF(X-1.) FNEND ! H9=.9E-38 ON ERROR GOTO <> AB$="PLEASE TYPE Y OR N" ! ! COMPUTE CHI SQUARE AND RELATED STATISTICS ! NZC=0 \ TSUM=0. \ PRINT FOR J=1 TO NC TSUM=TSUM+V(3,J) IF V(3,J)=0. THEN NZC=NZC+1 NEXT J NZR=0 \ X2=0. \ NL5=0 FOR I=1 TO NR RSUM=0. FOR J=1 TO NC IB=B(I,J) IF B(I,J)=H9 THEN PRINT "CHI-SQUARE SHOULD NOT BE CALCULATED "+ & "WITH MISSING OBSERVATIONS" \ PRINT \ GOTO <> IF B(I,J)<0. OR B(I,J)<>IB THEN PRINT "CHI-SQUARE SHOULD BE "+ & "CALCULATED FOR FREQUENCY COUNTS" \ PRINT "YOUR DATA CONTAINS"+ & " NEGATIVE OR NON-INTEGER NUMBERS" \ PRINT \ GOTO <> RSUM=RSUM+B(I,J) NEXT J IF RSUM=0. THEN NZR=NZR+1 \ W(I,J)=0. FOR J=1 TO NC \ GOTO <> FOR J=1 TO NC IF V(3,J)=0. THEN W(I,J)=0. ELSE & W(I,J)=(RSUM*V(3,J))/TSUM \ & X2=X2+(B(I,J)-W(I,J))**2/W(I,J) \ & IF W(I,J)<5. THEN NL5=NL5+1 NEXT J <<*NI1>> NEXT I NRG=NR-NZR \ NCG=NC-NZC \ & IF NRG<2 OR NCG<2 THEN PRINT "YOU HAVE ONLY";NRG;" ROW(S) AND";NCG; & " COLUMN(S) OF VALID DATA" \ PRINT "THIS IS INSUFFICIENT TO "+ & "COMPUTE CHI-SQUARE" \ PRINT \ GO TO <> NDF=(NRG-1)*(NCG-1) PRINT USING "CHI-SQUARE = #######.####",X2 \ & PRINT USING "DEGREES OF FREEDOM = ####",NDF \ PRINT IF NZR+NZC>0 THEN PRINT NZR;" ROW(S) AND";NZC;" COLUMN(S) HAVE ALL "+ & "0 ENTRIES AND WERE DISREGARDED" \ PRINT "IN THIS CALCULATION" \ PRINT IF NL5>0 THEN PRINT NL5;" CELL(S) USED IN CALCULATING CHI-SQUARE HA"+ & "VE AN EXPECTED FREQUENCY" \ PRINT "LESS THAN 5. "+ & "THEREFORE THE VALUE COMPUTED MAY BE MEANINGLESS" \ PRINT IF NRG>2 OR NCG>2 GOTO <> ! ! FLOATING POINT ERROR OCCURS FOR TSUM>33 ! IF TSUM>33. GOTO <> ! <<*TAG>> INPUT "DO YOU WISH TO COMPUTE THE FISHER EXACT PROBABILITY (Y/N)";L$ PRINT L$=LEFT(L$,1) IF L$="N" GOTO <> IF L$<>"Y" THEN PRINT AB$ \ GOTO <> K=0 \ FOR J=1 TO NC IF V(3,J)=0. GOTO <> L=0 FOR I=1 TO NR IF W(I,J)=0. GOTO <> IF K+L=0 THEN A=B(I,J) \ L=L+1 \ GOTO <> IF K+L=2 THEN D=B(I,J) \ GOTO <> IF K=0 AND L=1 THEN C=B(I,J) \ K=K+1 \ GO TO <> ELSE & B=B(I,J) \ L=L+1 <<*NI2>> NEXT I <<*NJ2>> NEXT J <<*OK2>> P1=FNF(A+B)*FNF(C+D)/FNF(TSUM) \ & P1=P1*FNF(A+C)*FNF(B+D)/(FNF(A)*FNF(B)*FNF(C)*FNF(D)) \ & PRINT USING "THE FISHER EXACT PROBABILITY = ###.####",P1 \ PRINT ! <<*PEF>> INPUT "DO YOU WISH TO PRINT EXPECTED FREQUENCIES (Y/N)";L$ \ PRINT \ & L$=LEFT(L$,1) IF L$="N" GOTO <> IF L$<>"Y" THEN PRINT "PLEASE TYPE Y OR N" \ GOTO <> PRINT " EXPECTED FREQUENCY FOR EACH CELL" \ PRINT \ & J9=0 <<*NXC>> J8=J9+1 J9=J9+6 IF J9>NC THEN J9=NC PRINT "ROW";TAB(37);"COLUMN" \ PRINT \ & K=10 FOR J=J8 TO J9 PRINT TAB(K);J; \ K=K+11 NEXT J PRINT \ PRINT FOR I=1 TO NR PRINT USING "### ",I; PRINT USING " #####.####",W(I,J); FOR J=J8 TO J9 PRINT NEXT I PRINT IF J9> GOTO <> ! ! ERROR RECOVERY ! <<*ERR>> PRINT \ PRINT "CALCULATIONS CANNOT BE COMPLETED BECAUSE COMPUTATION"+ & " CREATED NUMBERS" \ PRINT "OUTSIDE THE RANGE OF THIS COMPUTER" \ & PRINT \ PRINT "CHI0SQ ERROR";ERR;" AT LINE";ERL \ PRINT \ & PRINT "PLEASE RECORD THE ABOVE LINE AND CONTACT JOHN PENN IN BR "+ & "AT 3886" \ PRINT RESUME <> <<*END>> SUBEND