1 #====================================================================== |
1 #====================================================================== |
2 # L I B S T A T S . P L |
2 # . . / L I B / L I B S T A T S . P L |
3 # doc: Wed Mar 24 13:59:27 1999 |
3 # doc: Wed Mar 24 13:59:27 1999 |
4 # dlm: Sat Jan 31 15:51:14 2015 |
4 # dlm: Thu Mar 12 15:11:24 2020 |
5 # (c) 1999 A.M. Thurnherr |
5 # (c) 1999 A.M. Thurnherr |
6 # uE-Info: 150 0 NIL 0 0 70 2 2 4 NIL ofnI |
6 # uE-Info: 45 44 NIL 0 0 72 0 2 4 NIL ofnI |
7 #====================================================================== |
7 #====================================================================== |
8 |
8 |
9 # HISTORY: |
9 # HISTORY: |
10 # Mar 24, 1999: - created for the ANO paper |
10 # Mar 24, 1999: - created for the ANO paper |
11 # Mar 27, 1999: - extended |
11 # Mar 27, 1999: - extended |
34 # Oct 15, 2012: - added max_i(), min_i() |
34 # Oct 15, 2012: - added max_i(), min_i() |
35 # Nov 24, 2013: - renamed N to ndata |
35 # Nov 24, 2013: - renamed N to ndata |
36 # - added fdiff() |
36 # - added fdiff() |
37 # Jan 30, 2015: - added log_avg() |
37 # Jan 30, 2015: - added log_avg() |
38 # - added noise_avg() |
38 # - added noise_avg() |
|
39 # Mar 26, 2019: - added regress() |
39 |
40 |
40 require "$ANTS/libfuns.pl"; |
41 require "$ANTS/libfuns.pl"; |
|
42 |
|
43 #---------------------------------------------------------------------- |
|
44 # simple linear regression |
|
45 # - returns regression coefficient (slope) |
|
46 #---------------------------------------------------------------------- |
|
47 |
|
48 sub regress(@) |
|
49 { |
|
50 my($n) = @_/2; |
|
51 return nan unless ($n > 1); |
|
52 |
|
53 my(@X) = @_[0..$n-1]; |
|
54 my(@Y) = @_[$n..2*$n-1]; |
|
55 |
|
56 my($sumx) = 0; |
|
57 for (my($i)=0; $i<$n; $i++) { $sumx += $X[$i]; } |
|
58 my($midx) = $sumx / @Y; |
|
59 my($rcoeff) = my($sumxdsq) = 0; |
|
60 for (my($i)=0; $i<$n; $i++) { |
|
61 my($xd) = $X[$i] - $midx; |
|
62 $sumxdsq += $xd**2; |
|
63 $rcoeff += $xd * $Y[$i]; |
|
64 } |
|
65 $rcoeff /= $sumxdsq; |
|
66 return $rcoeff; |
|
67 } |
41 |
68 |
42 #---------------------------------------------------------------------- |
69 #---------------------------------------------------------------------- |
43 # estimate stderr given stddev & degrees of freedom |
70 # estimate stderr given stddev & degrees of freedom |
44 # - return nan for dof <= 0 |
71 # - return nan for dof <= 0 |
45 #---------------------------------------------------------------------- |
72 #---------------------------------------------------------------------- |