Elaboradar  0.1
 Tutto Classi Namespace File Funzioni Variabili Tipi enumerati (enum) Gruppi
statistics.h
Vai alla documentazione di questo file.
1 
5 #include <cmath>
6 
7 namespace radarelab {
8 /*
9  * ==================================================================
10  * Class: Statistic
11  * Description: Generic class to perform basic statistics
12  * ==================================================================
13  */
20 template<typename T>
21 class Statistic
22 {
23 public:
24  T sum_x;
25  T sum_y;
26  T sum_xy;
27  T sum_x2;
28 
29  T slope;
30  T intercept;
31  T variance;
32  T dev_std;
33  T mean;
34  T M2;
35  T delta;
36  unsigned N;
37 
41  Statistic():sum_x(0),sum_y(0),sum_xy(0),sum_x2(0),mean(0),M2(0),N(0){}
42 
48  void feed(T x, T y)
49  {
50  sum_x+=x;
51  sum_y+=y;
52  sum_xy+=x*y;
53  sum_x2+=x*x;
54  N++;
55  }
56 
62  void slim(T x, T y)
63  {
64  sum_x-=x;
65  sum_y-=y;
66  sum_xy-=x*y;
67  sum_x2-=x*x;
68  N--;
69  }
70 
75  void feed(T x)
76  {
77  sum_x+=x;
78  sum_x2+=x*x;
79  N++;
80 
81  delta = x-mean;
82  mean = mean+delta/(double)N;
83  M2 = M2+delta*(x-mean);
84  }
85 
90  void slim(T x)
91  {
92  sum_x-=x;
93  sum_x2-=x*x;
94  N--;
95 
96  if(N)
97  {
98  delta = x-mean;
99  mean = mean-delta/(double)N;
100  M2 = M2-delta*(x-mean);
101  }
102  else
103  {
104  mean=0.;
105  M2=0;
106  }
107  }
108 
112  void clear()
113  {
114  sum_x=0;
115  sum_y=0;
116  sum_xy=0;
117  sum_x2=0;
118  N=0;
119  mean=0.;
120  M2=0.;
121  }
122 
128  T compute_slope(unsigned minimum=2)
129  {
130  if(N>=minimum)
131  slope = (N*sum_xy-sum_x*sum_y)/(N*sum_x*sum_x-sum_x2);
132  else slope = sqrt(-1); // NaN
133  return slope;
134  }
135 
141  T compute_intercept(unsigned minimum=2)
142  {
143  if(N>=minimum)
144  intercept = (sum_y*sum_x2-sum_x*sum_xy)/(N*sum_x2-sum_x*sum_x);
145  else intercept = sqrt(-1);
146  return intercept;
147  }
148 
154  T compute_variance(unsigned minimum=1)
155  {
156  if(M2<0.1e-11)M2=0.;
157  if(N>=minimum) return M2/(double)N;
158  else return sqrt(-1);
159  }
160 
166  T compute_dev_std(unsigned minimum=1)
167  {
168  if(N>=minimum) return sqrt(compute_variance());
169  else return sqrt(-1);
170  }
171 
177  T compute_mean(unsigned minimum=1)
178  {
179  if(N>=minimum)
180  return mean;
181  else return sqrt(-1);
182  }
183 };
184 
185 } // namespace radarelab
Generic Class to perform statistical analysis Statistic object could be used as accumulator of data a...
Definition: statistics.h:21
T compute_dev_std(unsigned minimum=1)
Compute standard deviation of the distribution of x values.
Definition: statistics.h:166
T compute_mean(unsigned minimum=1)
Compute mean of the distribution of x values.
Definition: statistics.h:177
void clear()
Reset the Statistic object to a null state.
Definition: statistics.h:112
T compute_intercept(unsigned minimum=2)
Compute least square linear fit (no exception if only scalars where provided)
Definition: statistics.h:141
T compute_variance(unsigned minimum=1)
Compute variance of the distribution of x values.
Definition: statistics.h:154
T compute_slope(unsigned minimum=2)
Compute least square linear fit (no exception if only scalars where provided)
Definition: statistics.h:128