home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / C-SSP.ARJ / STSPER.C < prev    next >
Encoding:
Text File  |  1984-08-12  |  1.3 KB  |  71 lines

  1.       stsper (n,a,b,r)
  2.  
  3.       /*this subroutine computes the spearman rank correlation*/
  4.       /*coefficient for two series of data.*/
  5.  
  6.       int n;
  7.       float a[],b[],*r;
  8.  
  9.      {
  10.  
  11.       int i,j,k,n1,j1,k1,kk,kp;
  12.       float en,z,t,suma2,sumb2,sumab,s;
  13.       extern double sqrt();
  14.  
  15.       en = n;
  16.       kp = 0;
  17.       n1 = n - 1;
  18.       *r = 0.0;
  19.       if (n <= 1) return;
  20. l5:   sort2 (a,b,n);
  21.       k = 1;
  22.  
  23.       for (i = 1; i <= n1; i++)
  24.       {
  25.  
  26.         for (j = k+1; j <= n; j++)
  27.         {
  28.           if (a[k-1] != a[j-1]) goto b1;
  29.         }
  30.  
  31. b1:     z = (k + j-1)*0.5;
  32.         k1 = j-1;
  33.  
  34.         for (kk = k; kk <= k1; kk++)
  35.           a[kk-1] = z;
  36.  
  37.         if (j == n) a[n-1] = en;
  38.         k = j;
  39.         if (j >= n) break;
  40.       }
  41.  
  42.       if (kp != 1)
  43.       {
  44.         for (i = 0; i <= n-1; i++)
  45.         {
  46.           t = a[i];
  47.           a[i] = b[i];
  48.           b[i] = i + 1;
  49.         }
  50.  
  51.         kp = 1;
  52.         goto l5;
  53.       }
  54.       suma2 = sumb2 = sumab = 0.0;
  55.  
  56.       for (i = 0; i <= n-1; i++)
  57.       {
  58.         suma2 = suma2 + a[i]*a[i];
  59.         sumb2 = sumb2 + b[i]*b[i];
  60.         sumab = sumab + a[i]*b[i];
  61.       }
  62.  
  63.       s = en*(en + 1.0);
  64.       s = s*s*0.25;
  65.       *r = (en * suma2 - s) * (en * sumb2 - s);
  66.       if (*r == 0.0) return;
  67.       t = *r;
  68.       *r = (en * sumab - s)/sqrt(t);
  69.  
  70.      }
  71.