home *** CD-ROM | disk | FTP | other *** search
- C
- C ..................................................................
- C
- C SUBROUTINE KRANK
- C
- C PURPOSE
- C TEST CORRELATION BETWEEN TWO VARIABLES BY MEANS OF KENDALL
- C RANK CORRELATION COEFFICIENT
- C
- C USAGE
- C CALL KRANK(A,B,R,N,TAU,SD,Z,NR)
- C
- C DESCRIPTION OF PARAMETERS
- C A - INPUT VECTOR OF N OBSERVATIONS FOR FIRST VARIABLE
- C B - INPUT VECTOR OF N OBSERVATIONS FOR SECOND VARIABLE
- C R - OUTPUT VECTOR OF RANKED DATA OF LENGTH 2*N. SMALLEST
- C OBSERVATION IS RANKED 1, LARGEST IS RANKED N. TIES
- C ARE ASSIGNED AVERAGE OF TIED RANKS.
- C N - NUMBER OF OBSERVATIONS
- C TAU - KENDALL RANK CORRELATION COEFFICIENT (OUTPUT)
- C SD - STANDARD DEVIATION (OUTPUT)
- C Z - TEST OF SIGNIFICANCE OF TAU IN TERMS OF NORMAL
- C DISTRIBUTION (OUTPUT)
- C NR - CODE, 0 FOR UNRANKED DATA IN A AND B, 1 FOR RANKED
- C DATA IN A AND B (INPUT)
- C
- C REMARKS
- C SD AND Z ARE SET TO ZERO IF N IS LESS THAN TEN
- C
- C SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
- C RANK
- C TIE
- C
- C METHOD
- C DESCRIBED IN S. SIEGEL, 'NONPARAMETRIC STATISTICS FOR THE
- C BEHAVIORAL SCIENCES', MCGRAW-HILL, NEW YORK, 1956,
- C CHAPTER 9
- C
- C ..................................................................
- C
- SUBROUTINE KRANK(A,B,R,N,TAU,SD,Z,NR)
- DIMENSION A(1),B(1),R(1)
- C
- SD=0.0
- Z=0.0
- FN=N
- FN1=N*(N-1)
- C
- C DETERMINE WHETHER DATA IS RANKED
- C
- IF(NR-1) 5, 10, 5
- C
- C RANK DATA IN A AND B VECTORS AND ASSIGN TIED OBSERVATIONS
- C AVERAGE OF TIED RANKS
- C
- 5 CALL RANK (A,R,N)
- CALL RANK (B,R(N+1),N)
- GO TO 40
- C
- C MOVE RANKED DATA TO R VECTOR
- C
- 10 DO 20 I=1,N
- 20 R(I)=A(I)
- DO 30 I=1,N
- J=I+N
- 30 R(J)=B(I)
- C
- C SORT RANK VECTOR R IN SEQUENCE OF VARIABLE A
- C
- 40 ISORT=0
- DO 50 I=2,N
- IF(R(I)-R(I-1)) 45,50,50
- 45 ISORT=ISORT+1
- RSAVE=R(I)
- R(I)=R(I-1)
- R(I-1)=RSAVE
- I2=I+N
- SAVER=R(I2)
- R(I2)=R(I2-1)
- R(I2-1)=SAVER
- 50 CONTINUE
- IF(ISORT) 40,55,40
- C
- C COMPUTE S ON VARIABLE B. STARTING WITH THE FIRST RANK, ADD 1
- C TO S FOR EACH LARGER RANK TO ITS RIGHT AND SUBTRACT 1 FOR EACH
- C SMALLER RANK. REPEAT FOR ALL RANKS.
- C
- 55 S=0.0
- NM=N-1
- DO 60 I=1,NM
- J=N+I
- DO 60 L=I,N
- K=N+L
- IF(R(K)-R(J)) 56,60,57
- 56 S=S-1.0
- GO TO 60
- 57 S=S+1.0
- 60 CONTINUE
- C
- C COMPUTE TIED SCORE INDEX FOR BOTH VARIABLES
- C
- KT=2
- CALL TIE(R,N,KT,TA)
- CALL TIE(R(N+1),N,KT,TB)
- C
- C COMPUTE TAU
- C
- IF(TA) 70,65,70
- 65 IF(TB) 70,67,70
- 67 TAU=S/(0.5*FN1)
- GO TO 80
- 70 TAU=S/((SQRT(0.5*FN1-TA))*(SQRT(0.5*FN1-TB)))
- C
- C COMPUTE STANDARD DEVIATION AND Z IF N IS 10 OR LARGER
- C
- 80 IF(N-10) 90,85,85
- 85 SD=(SQRT((2.0*(FN+FN+5.0))/(9.0*FN1)))
- Z=TAU/SD
- 90 RETURN
- END