SPCORR Subroutine

public subroutine SPCORR(X, Y, N, Iwrite, Spc)

NAME

spcorr(3f) - [M_datapac:STATISTICS] compute the sample Spearman rank
correlation coefficient between two vectors of observations

SYNOPSIS

   SUBROUTINE SPCORR(X,Y,N,Iwrite,Spc)

DESCRIPTION

spcorr(3f) computes the spearman rank correlation coefficient between
the 2 sets of data in the input vectors x and y.

the spearman rank correlation coefficient will be a REAL
value between -1.0 and 1.0 (inclusively).

OPTIONS

 X   description of parameter
 Y   description of parameter

EXAMPLES

Sample program:

program demo_spcorr
use M_datapac, only : spcorr
implicit none
! call spcorr(x,y)
end program demo_spcorr

Results:

AUTHOR

The original DATAPAC library was written by James Filliben of the Statistical
Engineering Division, National Institute of Standards and Technology.

MAINTAINER

John Urban, 2022.05.31

LICENSE

CC0-1.0

REFERENCES

  • KENDALL AND STUART, THE ADVANCED THEORY OF STATISTICS, VOLUME 2, EDITION 1, 1961, pages 476-477.
  • SNEDECOR AND COCHRAN, STATISTICAL METHODS, EDITION 6, 1967, pages 193-195.
  • DIXON AND MASSEY, INTRODUCTION TO STATISTICAL ANALYSIS, EDITION 2, 1957, pages 294-295.
  • MOOD AND GRABLE, ‘INTRODUCTION TO THE THEORY OF STATISTICS, EDITION 2, 1963, page 424.

Arguments

Type IntentOptional Attributes Name
real(kind=wp), dimension(:) :: X
real(kind=wp), dimension(:) :: Y
integer :: N
integer :: Iwrite
real(kind=wp) :: Spc

Common Blocks

CAUPLT (subroutine)
CHSCDF (subroutine)
CODE (subroutine)
DECOMP (subroutine)
DEMOD (subroutine)
DEXPLT (subroutine)
EV1PLT (subroutine)
EV2PLT (subroutine)
EXPPLT (subroutine)
EXTREM (subroutine)
EXTREM (subroutine)
FREQ (subroutine)
GAMPLT (subroutine)
GEOPLT (subroutine)
HFNPLT (subroutine)
INVXWX (subroutine)
LAMPLT (subroutine)
LGNPLT (subroutine)
LOGPLT (subroutine)
MEDIAN (subroutine)
norout (subroutine)
NORPLT (subroutine)
PARPLT (subroutine)
PLOTU (subroutine)
POIPLT (subroutine)
RUNS (subroutine)
SAMPP (subroutine)
TAIL (subroutine)
TPLT (subroutine)
TRIM (subroutine)
UNIPLT (subroutine)
WEIB (subroutine)
WEIPLT (subroutine)
WIND (subroutine)
"> common /BLOCK2_real32/

Type Attributes Name Initial
real :: WS(15000)

Source Code

SUBROUTINE SPCORR(X,Y,N,Iwrite,Spc)
REAL(kind=wp) :: an, hold, Spc, sum, WS, X, XR, Y, YR
INTEGER       :: i, iflag, iupper, Iwrite, N
!
!     INPUT ARGUMENTS--X      = THE  VECTOR OF
!                                (UNSORTED OR SORTED) OBSERVATIONS
!                                WHICH CONSTITUTE THE FIRST SET
!                                OF DATA.
!                     --Y      = THE  VECTOR OF
!                                (UNSORTED OR SORTED) OBSERVATIONS
!                                WHICH CONSTITUTE THE SECOND SET
!                                OF DATA.
!                     --N      = THE INTEGER NUMBER OF OBSERVATIONS
!                                IN THE VECTOR X, OR EQUIVALENTLY,
!                                THE INTEGER NUMBER OF OBSERVATIONS
!                                IN THE VECTOR Y.
!                     --IWRITE = AN INTEGER FLAG CODE WHICH
!                                (IF SET TO 0) WILL SUPPRESS
!                                THE PRINTING OF THE
!                                SPEARMAN RANK CORRELATION COEFFICIENT
!                                AS IT IS COMPUTED;
!                                OR (IF SET TO SOME INTEGER
!                                VALUE NOT EQUAL TO 0),
!                                LIKE, SAY, 1) WILL CAUSE
!                                THE PRINTING OF THE
!                                SPEARMAN CORRELATION COEFFICIENT
!                                AT THE TIME IT IS COMPUTED.
!     OUTPUT ARGUMENTS--SPC    = THE  VALUE OF THE
!                                COMPUTED SPEARMAN RANK CORRELATION
!                                COEFFICIENT BETWEEN THE 2 SETS OF DATA
!                                IN THE INPUT VECTORS X AND Y.
!                                THIS  VALUE
!                                WILL BE BETWEEN -1.0 AND 1.0
!                                (INCLUSIVELY).
!     OUTPUT--THE COMPUTED VALUE OF THE
!             SPEARMAN RANK CORRELATION COEFFICIENT BETWEEN THE 2 SETS
!             OF DATA IN THE INPUT VECTORS X AND Y.

!     RESTRICTIONS--THE MAXIMUM ALLOWABLE VALUE OF N FOR THIS SUBROUTINE IS 7500.
!
!---------------------------------------------------------------------
!
      DIMENSION X(:) , Y(:)
      DIMENSION XR(7500) , YR(7500)
      COMMON /BLOCK2_real32/ WS(15000)
      EQUIVALENCE (XR(1),WS(1))
      EQUIVALENCE (YR(1),WS(7501))
!
      iupper = 7500
!
!     CHECK THE INPUT ARGUMENTS FOR ERRORS
!
      an = N
      Spc = 0.0_wp
      iflag = 0
      IF ( N<1 .OR. N>iupper ) THEN
         WRITE (G_IO,99001) iupper
         99001 FORMAT (' ***** FATAL ERROR--THE THIRD INPUT ARGUMENT TO SPCORR(3f) IS OUTSIDE THE ALLOWABLE (1,',&
         & I0,' INTERVAL *****')
         WRITE (G_IO,99002) N
         99002 FORMAT (' ***** THE VALUE OF THE ARGUMENT IS ',I0,' *****')
         RETURN
      ELSEIF ( N==1 ) THEN
         WRITE (G_IO,99003)
         99003 FORMAT (' ***** NON-FATAL DIAGNOSTIC--THE THIRD  INPUT ARGUMENT TO SPCORR(3f) HAS THE VALUE 1 *****')
         RETURN
      ELSE
         hold = X(1)
         DO i = 2 , N
            IF ( X(i)/=hold ) GOTO 50
         ENDDO
         WRITE (G_IO,99004) hold
         99004 FORMAT (' ***** NON-FATAL DIAGNOSTIC--THE FIRST  INPUT ARGUMENT (A VECTOR) TO SPCORR(3f) HAS ALL ELEMENTS =',&
         & E15.8,' *****')
         iflag = 1
 50      hold = Y(1)
         DO i = 2 , N
            IF ( Y(i)/=hold ) GOTO 100
         ENDDO
         WRITE (G_IO,99005) hold
         99005 FORMAT (' ***** NON-FATAL DIAGNOSTIC--THE SECOND INPUT ARGUMENT (A VECTOR) TO SPCORR(3f) HAS ALL ELEMENTS =',&
         & E15.8,' *****')
         iflag = 1
 100     IF ( iflag==1 ) RETURN
!
!-----START POINT-----------------------------------------------------
!
         CALL RANK(X,N,XR)
         CALL RANK(Y,N,YR)
         sum = 0.0_wp
         DO i = 1 , N
            sum = sum + (XR(i)-YR(i))**2
         ENDDO
         Spc = 1.0_wp - (6.0_wp*sum/((an-1.0_wp)*an*(an+1.0_wp)))
!
         IF ( Iwrite/=0 ) WRITE (G_IO,99006) N , Spc
         99006 FORMAT (' THE SPEARMAN RANK CORRELATION COEFFICIENT OF THE 2 SETS OF '&
         & ,I0,' OBSERVATIONS IS ',F14.5)
      ENDIF
END SUBROUTINE SPCORR