libstats.pl
changeset 39 56bdfe65a697
parent 10 3dfa16523886
child 40 c1803ae2540f
equal deleted inserted replaced
38:15c603bc4f70 39:56bdfe65a697
     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 #----------------------------------------------------------------------