31#ifndef ETL_CORRELATION_INCLUDED
32#define ETL_CORRELATION_INCLUDED
43 namespace private_correlation
48 template <
typename TInput,
typename TCalc>
57 template <
typename TCalc>
66 template <
typename TCalc>
76 namespace private_correlation
78 template<
typename T =
void>
81 static ETL_CONSTANT
bool Sample =
false;
82 static ETL_CONSTANT
bool Population =
true;
99 template <
bool Correlation_Type,
typename TInput,
typename TCalc = TInput>
106 static ETL_CONSTANT
int Adjustment = (
Correlation_Type == correlation_type::Population) ? 0 : 1;
123 template <
typename TIterator>
135 inner_product +=
TCalc(value1 * value2);
136 sum_of_squares1 +=
TCalc(value1 * value1);
137 sum_of_squares2 +=
TCalc(value2 * value2);
138 sum1 +=
TCalc(value1);
139 sum2 +=
TCalc(value2);
147 template <
typename TIterator>
171 template <
typename TIterator>
184 return covariance_value;
194 return correlation_value;
218 inner_product =
calc_t(0);
219 sum_of_squares1 =
calc_t(0);
220 sum_of_squares2 =
calc_t(0);
224 covariance_value = 0.0;
225 correlation_value = 0.0;
234 void calculate()
const
238 correlation_value = 0.0;
239 covariance_value = 0.0;
262 stddev2 = sqrt(variance2);
265 covariance_value = ((n * inner_product) - (sum1 * sum2)) * adjustment;
267 if ((stddev1 > 0.0) && (stddev2 > 0.0))
269 correlation_value = covariance_value / (stddev1 * stddev2);
277 calc_t inner_product;
278 calc_t sum_of_squares1;
279 calc_t sum_of_squares2;
283 mutable double covariance_value;
284 mutable double correlation_value;
285 mutable bool recalculate;
288 template <
bool Correlation_Type,
typename TInput,
typename TCalc>
289 ETL_CONSTANT
int correlation<Correlation_Type, TInput, TCalc>::Adjustment;
Correlation.
Definition correlation.h:103
double get_covariance() const
Get the correlation.
Definition correlation.h:180
void add(TIterator first1, TIterator last1, TIterator first2)
Add a range.
Definition correlation.h:148
void add(TInput value1, TInput value2)
Add a pair of values.
Definition correlation.h:133
void clear()
Clear the correlation.
Definition correlation.h:216
double get_correlation() const
Get the correlation.
Definition correlation.h:190
void operator()(TInput value1, TInput value2)
Definition correlation.h:162
correlation(TIterator first1, TIterator last1, TIterator first2)
Constructor.
Definition correlation.h:124
size_t count() const
Get the total number added entries.
Definition correlation.h:208
correlation()
Constructor.
Definition correlation.h:115
bitset_ext
Definition absolute.h:38
Definition functional.h:126
Definition correlation.h:93
pair holds two objects of arbitrary type
Definition utility.h:164
Types for generic correlation.
Definition correlation.h:50
Definition correlation.h:80
Calculates the smallest value that, when squared, will be not greater than VALUE.
Definition sqrt.h:47