SUB RANK0C(NR,NC) DIM #3,B(250,15) \ DIM A(250),C(250),R(250),T(250) H9=.9E-38 AB$="PLEASE TYPE Y OR N" ON ERROR GOTO <> ! <<*TYP>> PRINT "ENTER THE COLUMN NUMBERS OF TWO VARIABLES FOR RANK " \ & INPUT "CORRELATION. (FORM:XX,XX)";IA;IC \ PRINT IF IA<1 OR IC<1 OR IA>NC OR IC>NC OR IA=IC THEN & PRINT "COLUMN NUMBERS MUST BE BETWEEN 1 AND";NC;". PLEASE TRY "+ & "AGAIN" \ GOTO <> ! ! MOVE DATA PAIRS TO ARRAYS C AND A ! N=0 FOR I=1 TO NR IF B(I,IA)<>H9 AND B(I,IC)<>H9 THEN N=N+1 \ A(N)=B(I,IC) \ & C(N)=B(I,IA) NEXT I IF N<4 THEN PRINT "RANK CORRELATION IS NOT CALCULATED FOR LESS THAN"+ & " 4 PAIRS OF DATA" \ PRINT "SINCE RESULTS WOULD BE MEANINGLESS" \ & PRINT \ GOTO <> ! ! RANK SECOND VARIABLE AND SWAP ! GOSUB <> FOR I=1 TO N Q=A(I) \ & A(I)=C(I) \ & C(I)=Q \ & T(I)=R(I) \ & NEXT I ! ! RANK FIRST VARIABLE ! GOSUB <> ! ! COMPUTE SPEARMAN RANK CORRELATION AND ASSOCIATED T ! RX=N \ RX=RX/2.+.5 \ & SAA=0. \ & SCC=0. \ & SAC=0. FOR I=1 TO N X=R(I)-RX \ W=T(I)-RX \ & SAA=SAA+X*X \ SCC=SCC+W*W \ SAC=SAC+X*W NEXT I SRC=SAC/(SQR(SAA)*SQR(SCC)) PRINT "SPEARMAN'S RANK CORRELATION (N = "; \ & PRINT USING "###) = ####.####",N,SRC Z=SRC*SQR(N-1.) PRINT USING "Z VALUE TO TEST SIGNIFICANCE = ####.####",Z PRINT "PROBABILITY (FOR HO: R=0) = "; IF Z=0. THEN PRINT"= 0.9999" \ GOTO <> T=1./(1.+.2316419*ABS(Z)) D=.3989432*EXP(-Z*Z/2.) P=2.*D*T*((((1.330274*T-1.821256)*T+1.781478)*T-.3565638)*T+.3193815) IF P<.0001 THEN PRINT "<0.0001" ELSE IF P>.9999 THEN PRINT " 0.9999" & ELSE PRINT USING " #.####",P <<*LTT>> IF N<10 THEN PRINT \ PRINT "NOTE: Z IS AN APPROXIMATE TEST AND MAY "+ & "NOT BE SUFFICIENTLY ACCURATE FOR" \ PRINT "LESS THAN 10 PAIRS" PRINT ! <<*DAR>> INPUT "DO YOU WISH TO PRINT DATA AND RANKS";L$ \ PRINT L$=LEFT(L$,1) IF L$="N" GOTO <> IF L$<>"Y" THEN PRINT AB$ \ GOTO <> PRINT \ PRINT "OBS VAR A RANK A VAR B RANK B" \ & PRINT FOR I=1 TO N PRINT USING "### #####.#### ###.# #####.#### ###.# ", & I,A(I),R(I),C(I),T(I) NEXT I <<*MOR>> INPUT "DO YOU WISH TO COMPUTE MORE RANK CORRELATION";L$ \ PRINT L$=LEFT(L$,1) IF L$="Y" GOTO <> IF L$<>"N" THEN PRINT AB$ \ GOTO <> GOTO <> ! ! SUBROUTINE TO RANK DATA ! <<*RNK>> R(I)=0. FOR I=1 TO N FOR I=1 TO N IF R(I)>0. GOTO <> S=0. Q=0. FOR J=1 TO N IF A(I)> IF A(I)>A(J) THEN S=S+1. ELSE Q=Q+1. \ R(J)=-1. <<*NJR>> NEXT J IF Q=1. THEN R(I)=S+1. \ GOTO <> S=S+Q/2.+.5 FOR J=I TO N IF R(J)<0. THEN R(J)=S NEXT J <<*NIR>> NEXT I RETURN ! ! ERROR RECOVERY ROUTINE ! <<*ERT>> IF ERL=<> THEN & PRINT "YOU TYPED CHARACTERS THAT CANNOT BE INTERPRETED. SEPARATE "+ & "TWO OR MORE" \ PRINT "NUMBERS WITH A COMMA, BUT DO NOT END A "+ & "LINE WITH A COMMA" \ PRINT "PLEASE TRY AGAIN" \ PRINT IF ERL=<> THEN RESUME <> PRINT \ PRINT "CALCULATIONS CANNOT BE COMPLETED BECAUSE COMPUTATION"+ & " CREATED NUMBERS" \ PRINT "OUTSIDE THE RANGE OF THIS COMPUTER" \ & PRINT \ PRINT "RANK0C ERROR";ERR;" AT LINE";ERL \ PRINT \ & PRINT "PLEASE RECORD THE ABOVE LINE AND CONTACT JOHN PENN IN BR "+ & "AT 3886" \ PRINT RESUME <> <<*END>> SUBEND