Doxygen Source Code Documentation
thd_correlate.c File Reference
#include "mrilib.h"
Go to the source code of this file.
Functions | |
void | rank_order_float (int n, float *a) |
float | spearman_rank_prepare (int n, float *a) |
float | quadrant_corr_prepare (int n, float *a) |
float | spearman_rank_corr (int n, float *x, float rv, float *r) |
float | quadrant_corr (int n, float *x, float rv, float *r) |
float | THD_spearman_corr (int n, float *x, float *y) |
float | THD_quadrant_corr (int n, float *x, float *y) |
float | THD_pearson_corr (int n, float *x, float *y) |
Function Documentation
|
Definition at line 120 of file thd_correlate.c. References quadrant_corr_prepare(), and r. Referenced by main(), quadrant_manycorr(), and THD_quadrant_corr().
00121 { 00122 register int ii ; 00123 register float ss ; float xv ; 00124 00125 xv = quadrant_corr_prepare( n , x ) ; if( xv <= 0.0 ) return 0.0 ; 00126 00127 for( ii=0,ss=0.0 ; ii < n ; ii++ ) ss += x[ii] * r[ii] ; 00128 00129 return ( ss/sqrt(rv*xv) ) ; 00130 } |
|
Definition at line 81 of file thd_correlate.c. References a, and rank_order_float(). Referenced by main(), quadrant_corr(), quadrant_fimfunc(), quadrant_manycorr(), and THD_quadrant_corr().
00082 { 00083 register int ii ; 00084 register float rb , rs ; 00085 00086 rank_order_float( n , a ) ; 00087 00088 rb = 0.5*(n-1) ; rs=0.0 ; 00089 for( ii=0 ; ii < n ; ii++ ){ 00090 a[ii] = (a[ii] > rb) ? 1.0 00091 : (a[ii] < rb) ? -1.0 : 0.0 ; 00092 rs += a[ii]*a[ii] ; 00093 } 00094 00095 return rs ; 00096 } |
|
Definition at line 10 of file thd_correlate.c. References a, c, free, malloc, n1, and qsort_floatint(). Referenced by quadrant_corr_prepare(), quadrant_fimfunc(), spearman_fimfunc(), and spearman_rank_prepare().
00011 { 00012 register int ii , ns , n1 , ib ; 00013 static int nb = 0 ; 00014 static int * b = NULL ; /* workspaces */ 00015 static float * c = NULL ; 00016 float cs ; 00017 00018 /*- handle special cases -*/ 00019 00020 if( a == NULL ){ 00021 if( b != NULL ){ free(b); free(c); b=NULL ; c=NULL; nb=0; } /* free workspaces */ 00022 return ; 00023 } 00024 00025 if( n < 1 ) return ; /* meaningless input */ 00026 if( n == 1 ){ a[0] = 0.0 ; return ; } /* only one point!? */ 00027 00028 /*- make workspaces, if needed -*/ 00029 00030 if( nb < n ){ 00031 if( b != NULL ){ free(b); free(c); } 00032 b = (int *) malloc(sizeof(int )*n) ; 00033 c = (float *) malloc(sizeof(float)*n) ; 00034 nb = n ; 00035 } 00036 00037 for( ii=0 ; ii < n ; ii++ ) c[ii] = b[ii] = ii ; 00038 00039 /*- sort input, carrying b along -*/ 00040 00041 qsort_floatint( n , a , b ) ; /* see cs_sort_fi.c */ 00042 00043 /* compute ranks into c[] */ 00044 00045 n1 = n-1 ; 00046 for( ii=0 ; ii < n1 ; ii++ ){ 00047 if( a[ii] == a[ii+1] ){ /* handle ties */ 00048 cs = 2*ii+1 ; ns = 2 ; ib=ii ; ii++ ; 00049 while( ii < n1 && a[ii] == a[ii+1] ){ ii++ ; ns++ ; cs += ii ; } 00050 for( cs/=ns ; ib <= ii ; ib++ ) c[ib] = cs ; 00051 } 00052 } 00053 00054 for( ii=0 ; ii < n ; ii++ ) a[b[ii]] = c[ii] ; 00055 00056 return ; 00057 } |
|
Definition at line 106 of file thd_correlate.c. References r, and spearman_rank_prepare(). Referenced by main(), spearman_rank_manycorr(), and THD_spearman_corr().
00107 { 00108 register int ii ; 00109 register float ss ; float xv ; 00110 00111 xv = spearman_rank_prepare( n , x ) ; if( xv <= 0.0 ) return 0.0 ; 00112 00113 for( ii=0,ss=0.0 ; ii < n ; ii++ ) ss += x[ii] * r[ii] ; 00114 00115 return ( ss/sqrt(rv*xv) ) ; 00116 } |
|
Definition at line 63 of file thd_correlate.c. References a, and rank_order_float(). Referenced by main(), spearman_fimfunc(), spearman_rank_corr(), spearman_rank_manycorr(), and THD_spearman_corr().
00064 { 00065 register int ii ; 00066 register float rb , rs ; 00067 00068 rank_order_float( n , a ) ; 00069 00070 rb = 0.5*(n-1) ; rs=0.0 ; 00071 for( ii=0 ; ii < n ; ii++ ){ 00072 a[ii] -= rb ; 00073 rs += a[ii]*a[ii] ; 00074 } 00075 00076 return rs ; 00077 } |
|
Definition at line 150 of file thd_correlate.c. Referenced by main().
00151 { 00152 float xv=0 , yv=0 , xy=0 ; 00153 int ii ; 00154 00155 for( ii=0 ; ii < n ; ii++ ){ 00156 xv += x[ii]*x[ii] ; yv += y[ii]*y[ii] ; xy += x[ii]*y[ii] ; 00157 } 00158 00159 if( xv <= 0.0 || yv <= 0.0 ) return 0.0 ; 00160 return xy/sqrt(xv*yv) ; 00161 } |
|
Definition at line 143 of file thd_correlate.c. References quadrant_corr(), and quadrant_corr_prepare(). Referenced by main().
00144 { 00145 float xv = quadrant_corr_prepare(n,x) ; 00146 if( xv <= 0.0 ) return 0.0 ; 00147 return quadrant_corr( n,y,xv,x ) ; 00148 } |
|
Definition at line 136 of file thd_correlate.c. References spearman_rank_corr(), and spearman_rank_prepare(). Referenced by main().
00137 { 00138 float xv = spearman_rank_prepare(n,x) ; 00139 if( xv <= 0.0 ) return 0.0 ; 00140 return spearman_rank_corr( n,y,xv,x ) ; 00141 } |