ccgsl 2.7.2
C++wrappersforGnuScientificLibrary
statistics_double.hpp
Go to the documentation of this file.
1/*
2 * $Id: statistics_double.hpp 303 2013-10-28 07:48:23Z jdl3 $
3 * Copyright (C) 2012, 2015, 2019, 2020 John D Lamb
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or (at
8 * your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 */
19
20#ifndef CCGSL_STATISTICS_DOUBLE_HPP
21#define CCGSL_STATISTICS_DOUBLE_HPP
22#include<gsl/gsl_statistics_double.h>
23#include"vector.hpp"
24
25namespace gsl {
26 namespace stats {
27#ifndef DOXYGEN_SKIP
35 inline double mean( double const data[], size_t const stride, size_t const n ){
36 return gsl_stats_mean( data, stride, n ); }
44 inline double variance( double const data[], size_t const stride, size_t const n ){
45 return gsl_stats_variance( data, stride, n ); }
53 inline double sd( double const data[], size_t const stride, size_t const n ){
54 return gsl_stats_sd( data, stride, n ); }
63 inline double variance_with_fixed_mean( double const data[], size_t const stride,
64 size_t const n, double const mean ){
65 return gsl_stats_variance_with_fixed_mean( data, stride, n, mean ); }
74 inline double sd_with_fixed_mean( double const data[], size_t const stride,
75 size_t const n, double const mean ){
76 return gsl_stats_sd_with_fixed_mean( data, stride, n, mean ); }
84 inline double tss( double const data[], size_t const stride, size_t const n ){
85 return gsl_stats_tss( data, stride, n ); }
94 inline double tss_m( double const data[], size_t const stride,
95 size_t const n, double const mean ){
96 return gsl_stats_tss_m( data, stride, n, mean ); }
104 inline double absdev( double const data[], size_t const stride, size_t const n ){
105 return gsl_stats_absdev( data, stride, n ); }
113 inline double skew( double const data[], size_t const stride, size_t const n ){
114 return gsl_stats_skew( data, stride, n ); }
122 inline double kurtosis( double const data[], size_t const stride, size_t const n ){
123 return gsl_stats_kurtosis( data, stride, n ); }
131 inline double lag1_autocorrelation( double const data[], size_t const stride, size_t const n ){
132 return gsl_stats_lag1_autocorrelation( data, stride, n ); }
142 inline double covariance( double const data1[], size_t const stride1,
143 double const data2[], size_t const stride2,
144 size_t const n ){
145 return gsl_stats_covariance( data1, stride1, data2, stride2, n ); }
155 inline double correlation( double const data1[], size_t const stride1, double const data2[],
156 size_t const stride2, size_t const n ){
157 return gsl_stats_correlation( data1, stride1, data2, stride2, n ); }
166 inline double variance_m( double const data[], size_t const stride, size_t const n,
167 double const mean ){
168 return gsl_stats_variance_m( data, stride, n, mean ); }
177 inline double sd_m( double const data[], size_t const stride, size_t const n,
178 double const mean ){
179 return gsl_stats_sd_m( data, stride, n, mean ); }
188 inline double absdev_m( double const data[], size_t const stride, size_t const n,
189 double const mean ){
190 return gsl_stats_absdev_m( data, stride, n, mean ); }
200 inline double skew_m_sd( double const data[], size_t const stride, size_t const n,
201 double const mean, double const sd ){
202 return gsl_stats_skew_m_sd( data, stride, n, mean, sd ); }
212 inline double kurtosis_m_sd( double const data[], size_t const stride, size_t const n,
213 double const mean, double const sd ){
214 return gsl_stats_kurtosis_m_sd( data, stride, n, mean, sd ); }
223 inline double lag1_autocorrelation_m( double const data[], size_t const stride,
224 size_t const n, double const mean ){
225 return gsl_stats_lag1_autocorrelation_m( data, stride, n, mean ); }
237 inline double covariance_m( double const data1[], size_t const stride1,
238 double const data2[], size_t const stride2,
239 size_t const n, double const mean1, double const mean2 ){
240 return gsl_stats_covariance_m( data1, stride1, data2, stride2, n, mean1, mean2 ); }
251 inline double pvariance( double const data1[], size_t const stride1, size_t const n1,
252 double const data2[], size_t const stride2, size_t const n2 ){
253 return gsl_stats_pvariance( data1, stride1, n1, data2, stride2, n2 ); }
265 inline double ttest( double const data1[], size_t const stride1, size_t const n1,
266 double const data2[], size_t const stride2, size_t const n2 ){
267 return gsl_stats_ttest( data1, stride1, n1, data2, stride2, n2 ); }
275 inline double max( double const data[], size_t const stride, size_t const n ){
276 return gsl_stats_max( data, stride, n ); }
284 inline double min( double const data[], size_t const stride, size_t const n ){
285 return gsl_stats_min( data, stride, n ); }
294 inline void minmax( double* min, double* max, double const data[], size_t const stride,
295 size_t const n ){
296 gsl_stats_minmax( min, max, data, stride, n ); }
304 inline size_t max_index( double const data[], size_t const stride, size_t const n ){
305 return gsl_stats_max_index( data, stride, n ); }
313 inline size_t min_index( double const data[], size_t const stride, size_t const n ){
314 return gsl_stats_min_index( data, stride, n ); }
323 inline void minmax_index( size_t* min_index, size_t* max_index, double const data[],
324 size_t const stride, size_t const n ){
325 gsl_stats_minmax_index( min_index, max_index, data, stride, n ); }
333 inline double median_from_sorted_data( double const sorted_data[],
334 size_t const stride, size_t const n ){
335 return gsl_stats_median_from_sorted_data( sorted_data, stride, n ); }
344 inline double quantile_from_sorted_data( double const sorted_data[], size_t const stride,
345 size_t const n, double const f ){
346 return gsl_stats_quantile_from_sorted_data( sorted_data, stride, n, f ); }
347
348 // Same functions but without stride parameters
349
356 inline double mean( double const data[], size_t const n ){
357 return gsl_stats_mean( data, 1, n ); }
364 inline double variance( double const data[], size_t const n ){
365 return gsl_stats_variance( data, 1, n ); }
372 inline double sd( double const data[], size_t const n ){
373 return gsl_stats_sd( data, 1, n ); }
381 inline double variance_with_fixed_mean( double const data[],
382 size_t const n, double const mean ){
383 return gsl_stats_variance_with_fixed_mean( data, 1, n, mean ); }
391 inline double sd_with_fixed_mean( double const data[],
392 size_t const n, double const mean ){
393 return gsl_stats_sd_with_fixed_mean( data, 1, n, mean ); }
400 inline double tss( double const data[], size_t const n ){
401 return gsl_stats_tss( data, 1, n ); }
409 inline double tss_m( double const data[],
410 size_t const n, double const mean ){
411 return gsl_stats_tss_m( data, 1, n, mean ); }
418 inline double absdev( double const data[], size_t const n ){
419 return gsl_stats_absdev( data, 1, n ); }
426 inline double skew( double const data[], size_t const n ){
427 return gsl_stats_skew( data, 1, n ); }
434 inline double kurtosis( double const data[], size_t const n ){
435 return gsl_stats_kurtosis( data, 1, n ); }
442 inline double lag1_autocorrelation( double const data[], size_t const n ){
443 return gsl_stats_lag1_autocorrelation( data, 1, n ); }
451 inline double covariance( double const data1[], double const data2[], size_t const n ){
452 return gsl_stats_covariance( data1, 1, data2, 1, n ); }
460 inline double correlation( double const data1[], double const data2[], size_t const n ){
461 return gsl_stats_correlation( data1, 1, data2, 1, n ); }
469 inline double variance_m( double const data[], size_t const n, double const mean ){
470 return gsl_stats_variance_m( data, 1, n, mean ); }
478 inline double sd_m( double const data[], size_t const n, double const mean ){
479 return gsl_stats_sd_m( data, 1, n, mean ); }
487 inline double absdev_m( double const data[], size_t const n, double const mean ){
488 return gsl_stats_absdev_m( data, 1, n, mean ); }
497 inline double skew_m_sd( double const data[], size_t const n,
498 double const mean, double const sd ){
499 return gsl_stats_skew_m_sd( data, 1, n, mean, sd ); }
508 inline double kurtosis_m_sd( double const data[], size_t const n,
509 double const mean, double const sd ){
510 return gsl_stats_kurtosis_m_sd( data, 1, n, mean, sd ); }
518 inline double lag1_autocorrelation_m( double const data[],
519 size_t const n, double const mean ){
520 return gsl_stats_lag1_autocorrelation_m( data, 1, n, mean ); }
530 inline double covariance_m( double const data1[], double const data2[],
531 size_t const n, double const mean1, double const mean2 ){
532 return gsl_stats_covariance_m( data1, 1, data2, 1, n, mean1, mean2 ); }
542 inline double wmean( double const w[], size_t const wstride, double const data[],
543 size_t const stride, size_t const n ){
544 return gsl_stats_wmean( w, wstride, data, stride, n ); }
554 inline double wvariance( double const w[], size_t const wstride, double const data[],
555 size_t const stride, size_t const n ){
556 return gsl_stats_wvariance( w, wstride, data, stride, n ); }
566 inline double wsd( double const w[], size_t const wstride, double const data[],
567 size_t const stride, size_t const n ){
568 return gsl_stats_wsd( w, wstride, data, stride, n ); }
579 inline double wvariance_with_fixed_mean( double const w[], size_t const wstride,
580 double const data[], size_t const stride,
581 size_t const n, double const mean ){
582 return gsl_stats_wvariance_with_fixed_mean( w, wstride, data, stride, n, mean ); }
593 inline double wsd_with_fixed_mean( double const w[], size_t const wstride, double const data[],
594 size_t const stride, size_t const n, double const mean ){
595 return gsl_stats_wsd_with_fixed_mean( w, wstride, data, stride, n, mean ); }
605 inline double wtss( double const w[], size_t const wstride, double const data[],
606 size_t const stride, size_t const n ){
607 return gsl_stats_wtss( w, wstride, data, stride, n ); }
618 inline double wtss_m( double const w[], size_t const wstride, double const data[],
619 size_t const stride, size_t const n, double const wmean ){
620 return gsl_stats_wtss_m( w, wstride, data, stride, n, wmean ); }
630 inline double wabsdev( double const w[], size_t const wstride, double const data[],
631 size_t const stride, size_t const n ){
632 return gsl_stats_wabsdev( w, wstride, data, stride, n ); }
642 inline double wskew( double const w[], size_t const wstride, double const data[],
643 size_t const stride, size_t const n ){
644 return gsl_stats_wskew( w, wstride, data, stride, n ); }
654 inline double wkurtosis( double const w[], size_t const wstride, double const data[],
655 size_t const stride, size_t const n ){
656 return gsl_stats_wkurtosis( w, wstride, data, stride, n ); }
667 inline double wvariance_m( double const w[], size_t const wstride, double const data[],
668 size_t const stride, size_t const n, double const wmean ){
669 return gsl_stats_wvariance_m( w, wstride, data, stride, n, wmean ); }
680 inline double wsd_m( double const w[], size_t const wstride, double const data[],
681 size_t const stride, size_t const n, double const wmean ){
682 return gsl_stats_wsd_m( w, wstride, data, stride, n, wmean ); }
693 inline double wabsdev_m( double const w[], size_t const wstride, double const data[],
694 size_t const stride, size_t const n, double const wmean ){
695 return gsl_stats_wabsdev_m( w, wstride, data, stride, n, wmean ); }
707 inline double wskew_m_sd( double const w[], size_t const wstride, double const data[],
708 size_t const stride, size_t const n, double const wmean,
709 double const wsd ){
710 return gsl_stats_wskew_m_sd( w, wstride, data, stride, n, wmean, wsd ); }
722 inline double wkurtosis_m_sd( double const w[], size_t const wstride, double const data[],
723 size_t const stride, size_t const n, double const wmean,
724 double const wsd ){
725 return gsl_stats_wkurtosis_m_sd( w, wstride, data, stride, n, wmean, wsd ); }
726
727 // versions without stride parameters
735 inline double wmean( double const w[], double const data[],
736 size_t const n ){
737 return gsl_stats_wmean( w, 1, data, 1, n ); }
745 inline double wvariance( double const w[], double const data[],
746 size_t const n ){
747 return gsl_stats_wvariance( w, 1, data, 1, n ); }
755 inline double wsd( double const w[], double const data[],
756 size_t const n ){
757 return gsl_stats_wsd( w, 1, data, 1, n ); }
766 inline double wvariance_with_fixed_mean( double const w[],
767 double const data[],
768 size_t const n, double const mean ){
769 return gsl_stats_wvariance_with_fixed_mean( w, 1, data, 1, n, mean ); }
778 inline double wsd_with_fixed_mean( double const w[], double const data[],
779 size_t const n, double const mean ){
780 return gsl_stats_wsd_with_fixed_mean( w, 1, data, 1, n, mean ); }
788 inline double wtss( double const w[], double const data[],
789 size_t const n ){
790 return gsl_stats_wtss( w, 1, data, 1, n ); }
799 inline double wtss_m( double const w[], double const data[],
800 size_t const n, double const wmean ){
801 return gsl_stats_wtss_m( w, 1, data, 1, n, wmean ); }
809 inline double wabsdev( double const w[], double const data[],
810 size_t const n ){
811 return gsl_stats_wabsdev( w, 1, data, 1, n ); }
819 inline double wskew( double const w[], double const data[],
820 size_t const n ){
821 return gsl_stats_wskew( w, 1, data, 1, n ); }
829 inline double wkurtosis( double const w[], double const data[],
830 size_t const n ){
831 return gsl_stats_wkurtosis( w, 1, data, 1, n ); }
840 inline double wvariance_m( double const w[], double const data[],
841 size_t const n, double const wmean ){
842 return gsl_stats_wvariance_m( w, 1, data, 1, n, wmean ); }
851 inline double wsd_m( double const w[], double const data[],
852 size_t const n, double const wmean ){
853 return gsl_stats_wsd_m( w, 1, data, 1, n, wmean ); }
862 inline double wabsdev_m( double const w[], double const data[],
863 size_t const n, double const wmean ){
864 return gsl_stats_wabsdev_m( w, 1, data, 1, n, wmean ); }
874 inline double wskew_m_sd( double const w[], double const data[],
875 size_t const n, double const wmean,
876 double const wsd ){
877 return gsl_stats_wskew_m_sd( w, 1, data, 1, n, wmean, wsd ); }
887 inline double wkurtosis_m_sd( double const w[], double const data[],
888 size_t const n, double const wmean,
889 double const wsd ){
890 return gsl_stats_wkurtosis_m_sd( w, 1, data, 1, n, wmean, wsd ); }
899 inline double pvariance( double const data1[], size_t const n1,
900 double const data2[], size_t const n2 ){
901 return gsl_stats_pvariance( data1, 1, n1, data2, 1, n2 ); }
911 inline double ttest( double const data1[], size_t const n1,
912 double const data2[], size_t const n2 ){
913 return gsl_stats_ttest( data1, 1, n1, data2, 1, n2 ); }
920 inline double max( double const data[], size_t const n ){
921 return gsl_stats_max( data, 1, n ); }
928 inline double min( double const data[], size_t const n ){
929 return gsl_stats_min( data, 1, n ); }
937 inline void minmax( double* min, double* max, double const data[],
938 size_t const n ){
939 gsl_stats_minmax( min, max, data, 1, n ); }
946 inline size_t max_index( double const data[], size_t const n ){
947 return gsl_stats_max_index( data, 1, n ); }
954 inline size_t min_index( double const data[], size_t const n ){
955 return gsl_stats_min_index( data, 1, n ); }
963 inline void minmax_index( size_t* min_index, size_t* max_index, double const data[],
964 size_t const n ){
965 gsl_stats_minmax_index( min_index, max_index, data, 1, n ); }
972 inline double median_from_sorted_data( double const sorted_data[],
973 size_t const n ){
974 return gsl_stats_median_from_sorted_data( sorted_data, 1, n ); }
982 inline double quantile_from_sorted_data( double const sorted_data[],
983 size_t const n, double const f ){
984 return gsl_stats_quantile_from_sorted_data( sorted_data, 1, n, f ); }
985#endif // DOXYGEN_SKIP
986
987 // Generic versions of the same functions
988
995 template<typename T>
996 inline double mean( T const& data, size_t const stride = 1 ){
997 return gsl_stats_mean( data.data(), stride, data.size() / stride ); }
1004 template<typename T>
1005 inline double variance( T const& data, size_t const stride = 1 ){
1006 return gsl_stats_variance( data.data(), stride, data.size() / stride ); }
1013 template<typename T>
1014 inline double sd( T const& data, size_t const stride = 1 ){
1015 return gsl_stats_sd( data.data(), stride, data.size() / stride ); }
1023 template<typename T>
1024 inline double variance_with_fixed_mean( T const& data, size_t const stride,
1025 double const mean ){
1026 return gsl_stats_variance_with_fixed_mean( data.data(), stride, data.size() / stride, mean ); }
1033 template<typename T>
1034 inline double variance_with_fixed_mean( T const& data, double const mean ){
1035 return gsl_stats_variance_with_fixed_mean( data.data(), 1, data.size(), mean ); }
1043 template<typename T>
1044 inline double sd_with_fixed_mean( T const& data, size_t const stride,
1045 double const mean ){
1046 return gsl_stats_sd_with_fixed_mean( data.data(), stride, data.size() / stride, mean ); }
1053 template<typename T>
1054 inline double sd_with_fixed_mean( T const& data, double const mean ){
1055 return gsl_stats_sd_with_fixed_mean( data.data(), 1, data.size(), mean ); }
1062 template<typename T>
1063 inline double tss( T const& data, size_t const stride = 1 ){
1064 return gsl_stats_tss( data.data(), stride, data.size() / stride ); }
1072 template<typename T>
1073 inline double tss_m( T const& data, size_t const stride, double const mean ){
1074 return gsl_stats_tss_m( data.data(), stride, data.size() / stride, mean ); }
1081 template<typename T>
1082 inline double tss_m( T const& data, double const mean ){
1083 return gsl_stats_tss_m( data.data(), 1, data.size(), mean ); }
1090 template<typename T>
1091 inline double absdev( T const& data, size_t const stride = 1 ){
1092 return gsl_stats_absdev( data.data(), stride, data.size() / stride ); }
1099 template<typename T>
1100 inline double skew( T const& data, size_t const stride = 1 ){
1101 return gsl_stats_skew( data.data(), stride, data.size() / stride ); }
1108 template<typename T>
1109 inline double kurtosis( T const& data, size_t const stride = 1 ){
1110 return gsl_stats_kurtosis( data.data(), stride, data.size() / stride ); }
1117 template<typename T>
1118 inline double lag1_autocorrelation( T const& data, size_t const stride = 1 ){
1119 return gsl_stats_lag1_autocorrelation( data.data(), stride, data.size() / stride ); }
1128 template<typename T, typename U>
1129 inline double covariance( T const& data1, size_t const stride1,
1130 U const& data2, size_t const stride2 ){
1131 return gsl_stats_covariance( data1.data(), stride1, data2.data(), stride2, data1.size() / stride1 ); }
1138 template<typename T, typename U>
1139 inline double covariance( T const& data1, U const& data2 ){
1140 return gsl_stats_covariance( data1.data(), 1, data2.data(), 1, data1.size() ); }
1141
1150 template<typename U, typename T>
1151 inline double wmean( U const& w, size_t const wstride, T const& data,
1152 size_t const stride ){
1153 return gsl_stats_wmean( w.data(), wstride, data.data(), stride, data.size() / stride ); }
1162 template<typename U, typename T>
1163 inline double wvariance( U const& w, size_t const wstride, T const& data,
1164 size_t const stride ){
1165 return gsl_stats_wvariance( w.data(), wstride, data.data(), stride, data.size() / stride ); }
1174 template<typename U, typename T>
1175 inline double wsd( U const& w, size_t const wstride, T const& data,
1176 size_t const stride ){
1177 return gsl_stats_wsd( w.data(), wstride, data.data(), stride, data.size() / stride ); }
1187 template<typename U, typename T>
1188 inline double wvariance_with_fixed_mean( U const& w, size_t const wstride,
1189 T const& data, size_t const stride,
1190 double const mean ){
1191 return gsl_stats_wvariance_with_fixed_mean( w.data(), wstride, data.data(), stride,
1192 data.size() / stride, mean ); }
1202 template<typename U, typename T>
1203 inline double wsd_with_fixed_mean( U const& w, size_t const wstride, T const& data,
1204 size_t const stride, double const mean ){
1205 return gsl_stats_wsd_with_fixed_mean( w.data(), wstride, data.data(), stride,
1206 data.size() / stride, mean ); }
1215 template<typename U, typename T>
1216 inline double wtss( U const& w, size_t const wstride, T const& data,
1217 size_t const stride ){
1218 return gsl_stats_wtss( w.data(), wstride, data.data(), stride, data.size() / stride ); }
1228 template<typename U, typename T>
1229 inline double wtss_m( U const& w, size_t const wstride, T const& data,
1230 size_t const stride, double const wmean ){
1231 return gsl_stats_wtss_m( w.data(), wstride, data.data(), stride, data.size() / stride, wmean ); }
1240 template<typename U, typename T>
1241 inline double wabsdev( U const& w, size_t const wstride, T const& data,
1242 size_t const stride ){
1243 return gsl_stats_wabsdev( w.data(), wstride, data.data(), stride, data.size() / stride ); }
1252 template<typename U, typename T>
1253 inline double wskew( U const& w, size_t const wstride, T const& data,
1254 size_t const stride ){
1255 return gsl_stats_wskew( w.data(), wstride, data.data(), stride, data.size() / stride ); }
1264 template<typename U, typename T>
1265 inline double wkurtosis( U const& w, size_t const wstride, T const& data,
1266 size_t const stride ){
1267 return gsl_stats_wkurtosis( w.data(), wstride, data.data(), stride, data.size() / stride ); }
1277 template<typename U, typename T>
1278 inline double wvariance_m( U const& w, size_t const wstride, T const& data,
1279 size_t const stride, double const wmean ){
1280 return gsl_stats_wvariance_m( w.data(), wstride, data.data(), stride, data.size() / stride, wmean ); }
1290 template<typename U, typename T>
1291 inline double wsd_m( U const& w, size_t const wstride, T const& data,
1292 size_t const stride, double const wmean ){
1293 return gsl_stats_wsd_m( w.data(), wstride, data.data(), stride, data.size() / stride, wmean ); }
1303 template<typename U, typename T>
1304 inline double wabsdev_m( U const& w, size_t const wstride, T const& data,
1305 size_t const stride, double const wmean ){
1306 return gsl_stats_wabsdev_m( w.data(), wstride, data.data(), stride, data.size() / stride, wmean ); }
1317 template<typename U, typename T>
1318 inline double wskew_m_sd( U const& w, size_t const wstride, T const& data,
1319 size_t const stride, double const wmean,
1320 double const wsd ){
1321 return gsl_stats_wskew_m_sd( w.data(), wstride, data.data(), stride,
1322 data.size() / stride, wmean, wsd ); }
1333 template<typename U, typename T>
1334 inline double wkurtosis_m_sd( U const& w, size_t const wstride, T const& data,
1335 size_t const stride, double const wmean,
1336 double const wsd ){
1337 return gsl_stats_wkurtosis_m_sd( w.data(), wstride, data.data(), stride,
1338 data.size() / stride, wmean, wsd ); }
1339 /* stride-free versions */
1346 template<typename U, typename T>
1347 inline double wmean( U const& w, T const& data ){
1348 return gsl_stats_wmean( w.data(), 1, data.data(), 1, data.size() ); }
1355 template<typename U, typename T>
1356 inline double wvariance( U const& w, T const& data ){
1357 return gsl_stats_wvariance( w.data(), 1, data.data(), 1, data.size() ); }
1364 template<typename U, typename T>
1365 inline double wsd( U const& w, T const& data ){
1366 return gsl_stats_wsd( w.data(), 1, data.data(), 1, data.size() ); }
1374 template<typename U, typename T>
1375 inline double wvariance_with_fixed_mean( U const& w, T const& data, double const mean ){
1376 return gsl_stats_wvariance_with_fixed_mean( w.data(), 1, data.data(), 1,
1377 data.size(), mean ); }
1385 template<typename U, typename T>
1386 inline double wsd_with_fixed_mean( U const& w, T const& data, double const mean ){
1387 return gsl_stats_wsd_with_fixed_mean( w.data(), 1, data.data(), 1,
1388 data.size(), mean ); }
1395 template<typename U, typename T>
1396 inline double wtss( U const& w, T const& data ){
1397 return gsl_stats_wtss( w.data(), 1, data.data(), 1, data.size() ); }
1405 template<typename U, typename T>
1406 inline double wtss_m( U const& w, T const& data, double const wmean ){
1407 return gsl_stats_wtss_m( w.data(), 1, data.data(), 1, data.size(), wmean ); }
1414 template<typename U, typename T>
1415 inline double wabsdev( U const& w, T const& data ){
1416 return gsl_stats_wabsdev( w.data(), 1, data.data(), 1, data.size() ); }
1423 template<typename U, typename T>
1424 inline double wskew( U const& w, T const& data ){
1425 return gsl_stats_wskew( w.data(), 1, data.data(), 1, data.size() ); }
1432 template<typename U, typename T>
1433 inline double wkurtosis( U const& w, T const& data ){
1434 return gsl_stats_wkurtosis( w.data(), 1, data.data(), 1, data.size() ); }
1442 template<typename U, typename T>
1443 inline double wvariance_m( U const& w, T const& data, double const wmean ){
1444 return gsl_stats_wvariance_m( w.data(), 1, data.data(), 1, data.size(), wmean ); }
1452 template<typename U, typename T>
1453 inline double wsd_m( U const& w, T const& data, double const wmean ){
1454 return gsl_stats_wsd_m( w.data(), 1, data.data(), 1, data.size(), wmean ); }
1462 template<typename U, typename T>
1463 inline double wabsdev_m( U const& w, T const& data, double const wmean ){
1464 return gsl_stats_wabsdev_m( w.data(), 1, data.data(), 1, data.size(), wmean ); }
1473 template<typename U, typename T>
1474 inline double wskew_m_sd( U const& w, T const& data, double const wmean, double const wsd ){
1475 return gsl_stats_wskew_m_sd( w.data(), 1, data.data(), 1, data.size(), wmean, wsd ); }
1484 template<typename U, typename T>
1485 inline double wkurtosis_m_sd( U const& w, T const& data, double const wmean, double const wsd ){
1486 return gsl_stats_wkurtosis_m_sd( w.data(), 1, data.data(), 1, data.size(), wmean, wsd ); }
1487 /* end of weighted functions */
1488
1497 template<typename T, typename U>
1498 inline double correlation( T const& data1, size_t const stride1, U const& data2,
1499 size_t const stride2 ){
1500 return gsl_stats_correlation( data1.data(), stride1, data2.data(), stride2, data1.size() / stride1 ); }
1507 template<typename T, typename U>
1508 inline double correlation( T const& data1, U const& data2 ){
1509 return gsl_stats_correlation( data1.data(), 1, data2.data(), 1, data1.size() ); }
1517 template<typename T>
1518 inline double variance_m( T const& data, size_t const stride, double const mean ){
1519 return gsl_stats_variance_m( data.data(), stride, data.size() / stride, mean ); }
1526 template<typename T>
1527 inline double variance_m( T const& data, double const mean ){
1528 return gsl_stats_variance_m( data.data(), 1, data.size(), mean ); }
1536 template<typename T>
1537 inline double sd_m( T const& data, size_t const stride, double const mean ){
1538 return gsl_stats_sd_m( data.data(), stride, data.size() / stride, mean ); }
1545 template<typename T>
1546 inline double sd_m( T const& data, double const mean ){
1547 return gsl_stats_sd_m( data.data(), 1, data.size(), mean ); }
1555 template<typename T>
1556 inline double absdev_m( T const& data, size_t const stride, double const mean ){
1557 return gsl_stats_absdev_m( data.data(), stride, data.size() / stride, mean ); }
1564 template<typename T>
1565 inline double absdev_m( T const& data, double const mean ){
1566 return gsl_stats_absdev_m( data.data(), 1, data.size(), mean ); }
1575 template<typename T>
1576 inline double skew_m_sd( T const& data, size_t const stride,
1577 double const mean, double const sd ){
1578 return gsl_stats_skew_m_sd( data.data(), stride, data.size() / stride, mean, sd ); }
1586 template<typename T>
1587 inline double skew_m_sd( T const& data, double const mean, double const sd ){
1588 return gsl_stats_skew_m_sd( data.data(), 1, data.size(), mean, sd ); }
1597 template<typename T>
1598 inline double kurtosis_m_sd( T const& data, size_t const stride,
1599 double const mean, double const sd ){
1600 return gsl_stats_kurtosis_m_sd( data.data(), stride, data.size() / stride, mean, sd ); }
1608 template<typename T>
1609 inline double kurtosis_m_sd( T const& data, double const mean, double const sd ){
1610 return gsl_stats_kurtosis_m_sd( data.data(), 1, data.size(), mean, sd ); }
1618 template<typename T>
1619 inline double lag1_autocorrelation_m( T const& data, size_t const stride,
1620 double const mean ){
1621 return gsl_stats_lag1_autocorrelation_m( data.data(), stride, data.size() / stride, mean ); }
1628 template<typename T>
1629 inline double lag1_autocorrelation_m( T const& data, double const mean ){
1630 return gsl_stats_lag1_autocorrelation_m( data.data(), 1, data.size(), mean ); }
1641 template<typename T, typename U>
1642 inline double covariance_m( T const& data1, size_t const stride1,
1643 U const& data2, size_t const stride2,
1644 double const mean1, double const mean2 ){
1645 return gsl_stats_covariance_m( data1.data(), stride1, data2.data(), stride2, data1.size() / stride1,
1646 mean1, mean2 ); }
1655 template<typename T>
1656 inline double covariance_m( T const& data1, T const& data2,
1657 double const mean1, double const mean2 ){
1658 return gsl_stats_covariance_m( data1.data(), 1, data2.data(), 1, data1.size(),
1659 mean1, mean2 ); }
1668 template<typename T, typename U>
1669 inline double pvariance( T const& data1, size_t const stride1,
1670 U const& data2, size_t const stride2 ){
1671 return gsl_stats_pvariance( data1.data(), stride1, data1.size() / stride1, data2.data(),
1672 stride2, data2.size() / stride2 ); }
1682 template<typename T, typename U>
1683 inline double ttest( T const& data1, size_t const stride1,
1684 U const& data2, size_t const stride2 ){
1685 return gsl_stats_ttest( data1.data(), stride1, data1.size() / stride1,
1686 data2.data(), stride2, data2.size() / stride2 ); }
1693 template<typename T>
1694 inline double max( T const& data, size_t const stride = 1 ){
1695 return gsl_stats_max( data.data(), stride, data.size() / stride ); }
1702 template<typename T>
1703 inline double min( T const& data, size_t const stride = 1 ){
1704 return gsl_stats_min( data.data(), stride, data.size() / stride ); }
1712 template<typename T>
1713 inline void minmax( double& min, double& max, T const& data, size_t const stride = 1 ){
1714 gsl_stats_minmax( &min, &max, data.data(), stride, data.size() / stride ); }
1721 template<typename T>
1722 inline size_t max_index( T const& data, size_t const stride = 1 ){
1723 return gsl_stats_max_index( data.data(), stride, data.size() / stride ); }
1730 template<typename T>
1731 inline size_t min_index( T const& data, size_t const stride = 1 ){
1732 return gsl_stats_min_index( data.data(), stride, data.size() / stride ); }
1740 template<typename T>
1741 inline void minmax_index( size_t& min_index, size_t& max_index, T const& data,
1742 size_t const stride = 1 ){
1743 gsl_stats_minmax_index( &min_index, &max_index, data.data(), stride, data.size() / stride ); }
1750 template<typename T>
1751 inline double median_from_sorted_data( T const& sorted_data, size_t const stride = 1 ){
1752 return gsl_stats_median_from_sorted_data( sorted_data.data(), stride, sorted_data.size() / stride ); }
1760 template<typename T>
1761 inline double quantile_from_sorted_data( T const& sorted_data, size_t const stride,
1762 double const f ){
1763 return gsl_stats_quantile_from_sorted_data( sorted_data.data(), stride,
1764 sorted_data.size() / stride, f ); }
1765 /* stride-free versions */
1772 template<typename T, typename U>
1773 inline double pvariance( T const& data1, U const& data2 ){
1774 return gsl_stats_pvariance( data1.data(), 1, data1.size(), data2.data(), 1, data1.size() ); }
1782 template<typename T, typename U>
1783 inline double ttest( T const& data1, U const& data2 ){
1784 return gsl_stats_ttest( data1.data(), 1, data1.size(), data2.data(), 1, data1.size() ); }
1791 template<typename T>
1792 inline double quantile_from_sorted_data( T const& sorted_data, double const f ){
1793 return gsl_stats_quantile_from_sorted_data( sorted_data.data(), 1, sorted_data.size(), f ); }
1794#ifndef DOXYGEN_SKIP
1807 inline double spearman( double const data1[], size_t const stride1,
1808 double const data2[], size_t const stride2,
1809 size_t const n, double work[] ){
1810 if( 0 != work )
1811 return gsl_stats_spearman( data1, stride1, data2, stride2, n, work );
1812 // create workspace
1813 double* workspace = new double[2 * n];
1814 double result = gsl_stats_spearman( data1, stride1, data2, stride2, n, workspace );
1815 delete[] workspace;
1816 return result;
1817 }
1828 inline double spearman( double const data1[], double const data2[],
1829 size_t const n, double work[] ){
1830 if( 0 != work )
1831 return gsl_stats_spearman( data1, 1, data2, 1, n, work );
1832 // create workspace
1833 double* workspace = new double[2 * n];
1834 double result = gsl_stats_spearman( data1, 1, data2, 1, n, workspace );
1835 delete[] workspace;
1836 return result;
1837 }
1838#endif // DOXYGEN_SKIP
1850 template<typename T, typename U>
1851 inline double spearman( T const& data1, size_t const stride1,
1852 U const& data2, size_t const stride2,
1853 double work[] ){
1854 if( 0 != work )
1855 return gsl_stats_spearman( data1.data(), stride1, data2.data(), stride2,
1856 data1.size() / stride1, work );
1857 // create workspace
1858 double* workspace = new double[2 * data1.size() / stride1];
1859 double result = gsl_stats_spearman( data1.data(), stride1, data2.data(), stride2,
1860 data1.size() / stride1, workspace );
1861 delete[] workspace;
1862 return result;
1863 }
1873 template<typename T, typename U>
1874 inline double spearman( T const& data1, U const& data2, double work[] ){
1875 if( 0 != work )
1876 return gsl_stats_spearman( data1, 1, data2, 1, data1.size(), work );
1877 // create workspace
1878 double* workspace = new double[2 * data1.size()];
1879 double result = gsl_stats_spearman( data1, 1, data2, 1, data1.size(), workspace );
1880 delete[] workspace;
1881 return result;
1882 }
1883
1890 template<typename T>
1891 inline double median( T& data, size_t const stride=1 ){
1892 return gsl_stats_median( data.data(), stride, data.size() ); }
1900 template<typename T>
1901 double trmean_from_sorted_data( double const trim, T const& sorted_data,
1902 size_t const stride=1 ){
1903 return gsl_stats_trmean_from_sorted_data( trim, sorted_data.data(), stride,
1904 sorted_data.size() ); }
1911 template<typename T>
1912 double gastwirth_from_sorted_data( T const& sorted_data, size_t const stride=1 ){
1913 return gsl_stats_gastwirth_from_sorted_data( sorted_data.data(), stride,
1914 sorted_data.size() ); }
1922 template<typename T,typename U>
1923 double mad0( T const& data, size_t const stride, U& work ){
1924 size_t const n = data.size();
1925 if( work.size() != n ){
1926 gsl::exception e( "work and data must have same length", __FILE__, __LINE__,
1928 throw( e );
1929 }
1930 return gsl_stats_mad0( data.data(), stride, n, work.data() ); }
1938 template<typename T,typename U>
1939 double mad( T const& data, size_t const stride, U& work ){
1940 size_t const n = data.size();
1941 if( work.size() != n ){
1942 gsl::exception e( "work and data must have same length", __FILE__, __LINE__,
1944 throw( e );
1945 }
1946 return gsl_stats_mad( data.data(), stride, n, work.data() );
1947 }
1955 template<typename T,typename U>
1956 double Sn0_from_sorted_data( T const& sorted_data, size_t const stride, U& work ){
1957 size_t const n = sorted_data.size();
1958 if( work.size() != n ){
1959 gsl::exception e( "work and data must have same length", __FILE__, __LINE__,
1961 throw( e );
1962 }
1963 return gsl_stats_Sn0_from_sorted_data( sorted_data.data(), stride, n, work.data() ); }
1971 template<typename T,typename U>
1972 double Sn_from_sorted_data( T const& sorted_data, size_t const stride, U& work ){
1973 size_t const n = sorted_data.size();
1974 if( work.size() != n ){
1975 gsl::exception e( "work and data must have same length", __FILE__, __LINE__,
1977 throw( e );
1978 }
1979 return gsl_stats_Sn_from_sorted_data( sorted_data.data(), stride, n, work.data() ); }
1988 template<typename T,typename U,typename V>
1989 double Qn0_from_sorted_data( T const& sorted_data, size_t const stride,
1990 U& work, V& work_int ){
1991 size_t const n = sorted_data.size();
1992 if( work.size() != 3*n ){
1993 gsl::exception e( "work must be 3 × length of data", __FILE__, __LINE__,
1995 throw( e );
1996 }
1997 if( work_int.size() != 5*n ){
1998 gsl::exception e( "work_int must be 5 × length of data", __FILE__, __LINE__,
2000 throw( e );
2001 }
2002 return gsl_stats_Qn0_from_sorted_data( sorted_data.data(), stride, n, work.data(),
2003 work_int.data() ); }
2012 template<typename T,typename U,typename V>
2013 double Qn_from_sorted_data( T const& sorted_data, size_t const stride,
2014 U& work, V& work_int ){
2015 size_t const n = sorted_data.size();
2016 if( work.size() != 3*n ){
2017 gsl::exception e( "work must be 3 × length of data", __FILE__, __LINE__,
2019 throw( e );
2020 }
2021 if( work_int.size() != 5*n ){
2022 gsl::exception e( "work_int must be 5 × length of data", __FILE__, __LINE__,
2024 throw( e );
2025 }
2026 return gsl_stats_Qn_from_sorted_data( sorted_data.data(), stride, n, work.data(),
2027 work_int.data() ); }
2028 /* stride-free versions */
2035 template<typename T,typename U>
2036 double mad0( T const& data, U& work ){
2037 size_t const n = data.size();
2038 if( work.size() != n ){
2039 gsl::exception e( "work and data must have same length", __FILE__, __LINE__,
2041 throw( e );
2042 }
2043 return gsl_stats_mad0( data.data(), 1, n, work.data() ); }
2050 template<typename T,typename U>
2051 double mad( T const& data, U& work ){
2052 size_t const n = data.size();
2053 if( work.size() != n ){
2054 gsl::exception e( "work and data must have same length", __FILE__, __LINE__,
2056 throw( e );
2057 }
2058 return gsl_stats_mad( data.data(), 1, n, work.data() );
2059 }
2066 template<typename T,typename U>
2067 double Sn0_from_sorted_data( T const& sorted_data, U& work ){
2068 size_t const n = sorted_data.size();
2069 if( work.size() != n ){
2070 gsl::exception e( "work and data must have same length", __FILE__, __LINE__,
2072 throw( e );
2073 }
2074 return gsl_stats_Sn0_from_sorted_data( sorted_data.data(), 1, n, work.data() ); }
2081 template<typename T,typename U>
2082 double Sn_from_sorted_data( T const& sorted_data, U& work ){
2083 size_t const n = sorted_data.size();
2084 if( work.size() != n ){
2085 gsl::exception e( "work and data must have same length", __FILE__, __LINE__,
2087 throw( e );
2088 }
2089 return gsl_stats_Sn_from_sorted_data( sorted_data.data(), 1, n, work.data() ); }
2097 template<typename T,typename U,typename V>
2098 double Qn0_from_sorted_data( T const& sorted_data, U& work, V& work_int ){
2099 size_t const n = sorted_data.size();
2100 if( work.size() != 3*n ){
2101 gsl::exception e( "work must be 3 × length of data", __FILE__, __LINE__,
2103 throw( e );
2104 }
2105 if( work_int.size() != 5*n ){
2106 gsl::exception e( "work_int must be 5 × length of data", __FILE__, __LINE__,
2108 throw( e );
2109 }
2110 return gsl_stats_Qn0_from_sorted_data( sorted_data.data(), 1, n, work.data(),
2111 work_int.data() ); }
2119 template<typename T,typename U,typename V>
2120 double Qn_from_sorted_data( T const& sorted_data, U& work, V& work_int ){
2121 size_t const n = sorted_data.size();
2122 if( work.size() != 3*n ){
2123 gsl::exception e( "work must be 3 × length of data", __FILE__, __LINE__,
2125 throw( e );
2126 }
2127 if( work_int.size() != 5*n ){
2128 gsl::exception e( "work_int must be 5 × length of data", __FILE__, __LINE__,
2130 throw( e );
2131 }
2132 return gsl_stats_Qn_from_sorted_data( sorted_data.data(), 1, n, work.data(),
2133 work_int.data() ); }
2134
2135
2136 }
2137}
2138#endif
This class is used to handle gsl exceptions so that gsl can use these rather than the GSL error handl...
Definition: exception.hpp:387
@ GSL_EBADLEN
matrix, vector lengths are not conformant
Definition: exception.hpp:490
size_t n(workspace const &w)
C++ version of gsl_rstat_n().
Definition: rstat.hpp:299
gsl_sf_result result
Typedef for gsl_sf_result.
Definition: sf_result.hpp:30
double min(T const &data, size_t const stride=1)
C++ version of gsl_stats_min().
double trmean_from_sorted_data(double const trim, T const &sorted_data, size_t const stride=1)
C++ version of gsl_stats_double_trmean_from_sorted_data().
double wabsdev_m(U const &w, size_t const wstride, T const &data, size_t const stride, double const wmean)
C++ version of gsl_stats_wabsdev_m().
double max(T const &data, size_t const stride=1)
C++ version of gsl_stats_max().
double wmean(U const &w, size_t const wstride, T const &data, size_t const stride)
C++ version of gsl_stats_wmean().
double Sn_from_sorted_data(T const &sorted_data, size_t const stride, U &work)
C++ version of gsl_stats_Sn_from_sorted_data().
double wtss_m(U const &w, size_t const wstride, T const &data, size_t const stride, double const wmean)
C++ version of gsl_stats_wtss_m().
double skew_m_sd(T const &data, size_t const stride, double const mean, double const sd)
C++ version of gsl_stats_skew_m_sd().
double wvariance(U const &w, size_t const wstride, T const &data, size_t const stride)
C++ version of gsl_stats_wvariance().
double tss_m(T const &data, size_t const stride, double const mean)
C++ version of gsl_stats_tss_m().
double lag1_autocorrelation_m(T const &data, size_t const stride, double const mean)
C++ version of gsl_stats_lag1_autocorrelation_m().
double wsd(U const &w, size_t const wstride, T const &data, size_t const stride)
C++ version of gsl_stats_wsd().
double pvariance(T const &data1, size_t const stride1, U const &data2, size_t const stride2)
C++ version of gsl_stats_pvariance().
double wvariance_m(U const &w, size_t const wstride, T const &data, size_t const stride, double const wmean)
C++ version of gsl_stats_wvariance_m().
double wskew(U const &w, size_t const wstride, T const &data, size_t const stride)
C++ version of gsl_stats_wskew().
double variance(T const &data, size_t const stride=1)
C++ version of gsl_stats_variance().
double quantile_from_sorted_data(T const &sorted_data, size_t const stride, double const f)
C++ version of gsl_stats_quantile_from_sorted_data().
double Sn0_from_sorted_data(T const &sorted_data, size_t const stride, U &work)
C++ version of gsl_stats_Sn0_from_sorted_data().
double wtss(U const &w, size_t const wstride, T const &data, size_t const stride)
C++ version of gsl_stats_wtss().
double sd_m(T const &data, size_t const stride, double const mean)
C++ version of gsl_stats_sd_m().
double Qn0_from_sorted_data(T const &sorted_data, size_t const stride, U &work, V &work_int)
C++ version of gsl_stats_Qn0_from_sorted_data().
double lag1_autocorrelation(T const &data, size_t const stride=1)
C++ version of gsl_stats_lag1_autocorrelation().
double wkurtosis_m_sd(U const &w, size_t const wstride, T const &data, size_t const stride, double const wmean, double const wsd)
C++ version of gsl_stats_wkurtosis_m_sd().
double median(T &data, size_t const stride=1)
C++ version of gsl_stats_double_median().
double kurtosis_m_sd(T const &data, size_t const stride, double const mean, double const sd)
C++ version of gsl_stats_kurtosis_m_sd().
double wsd_with_fixed_mean(U const &w, size_t const wstride, T const &data, size_t const stride, double const mean)
C++ version of gsl_stats_wsd_with_fixed_mean().
double mad(T const &data, size_t const stride, U &work)
C++ version of gsl_stats_mad().
double wskew_m_sd(U const &w, size_t const wstride, T const &data, size_t const stride, double const wmean, double const wsd)
C++ version of gsl_stats_wskew_m_sd().
double covariance_m(T const &data1, size_t const stride1, U const &data2, size_t const stride2, double const mean1, double const mean2)
C++ version of gsl_stats_covariance_m().
double skew(T const &data, size_t const stride=1)
C++ version of gsl_stats_skew().
double Qn_from_sorted_data(T const &sorted_data, size_t const stride, U &work, V &work_int)
C++ version of gsl_stats_Qn_from_sorted_data().
double variance_m(T const &data, size_t const stride, double const mean)
C++ version of gsl_stats_variance_m().
double wsd_m(U const &w, size_t const wstride, T const &data, size_t const stride, double const wmean)
C++ version of gsl_stats_wsd_m().
double tss(T const &data, size_t const stride=1)
C++ version of gsl_stats_tss().
double wvariance_with_fixed_mean(U const &w, size_t const wstride, T const &data, size_t const stride, double const mean)
C++ version of gsl_stats_wvariance_with_fixed_mean().
double kurtosis(T const &data, size_t const stride=1)
C++ version of gsl_stats_kurtosis().
double spearman(T const &data1, size_t const stride1, U const &data2, size_t const stride2, double work[])
C++ version of gsl_stats_spearman().
double covariance(T const &data1, size_t const stride1, U const &data2, size_t const stride2)
C++ version of gsl_stats_covariance().
double correlation(T const &data1, size_t const stride1, U const &data2, size_t const stride2)
C++ version of gsl_stats_correlation().
double absdev_m(T const &data, size_t const stride, double const mean)
C++ version of gsl_stats_absdev_m().
double mad0(T const &data, size_t const stride, U &work)
C++ version of gsl_stats_mad0().
double mean(T const &data, size_t const stride=1)
C++ version of gsl_stats_mean().
void minmax(double &min, double &max, T const &data, size_t const stride=1)
C++ version of gsl_stats_minmax().
double absdev(T const &data, size_t const stride=1)
C++ version of gsl_stats_absdev().
double gastwirth_from_sorted_data(T const &sorted_data, size_t const stride=1)
C++ version of gsl_stats_gastwirth_from_sorted_data().
void minmax_index(size_t &min_index, size_t &max_index, T const &data, size_t const stride=1)
C++ version of gsl_stats_minmax_index().
double wabsdev(U const &w, size_t const wstride, T const &data, size_t const stride)
C++ version of gsl_stats_wabsdev().
double ttest(T const &data1, size_t const stride1, U const &data2, size_t const stride2)
C++ version of gsl_stats_ttest().
double sd_with_fixed_mean(T const &data, size_t const stride, double const mean)
C++ version of gsl_stats_sd_with_fixed_mean().
double sd(T const &data, size_t const stride=1)
C++ version of gsl_stats_sd().
size_t min_index(T const &data, size_t const stride=1)
C++ version of gsl_stats_min_index().
double wkurtosis(U const &w, size_t const wstride, T const &data, size_t const stride)
C++ version of gsl_stats_wkurtosis().
size_t max_index(T const &data, size_t const stride=1)
C++ version of gsl_stats_max_index().
double median_from_sorted_data(T const &sorted_data, size_t const stride=1)
C++ version of gsl_stats_median_from_sorted_data().
double variance_with_fixed_mean(T const &data, size_t const stride, double const mean)
C++ version of gsl_stats_variance_with_fixed_mean().
The gsl package creates an interface to the GNU Scientific Library for C++.
Definition: blas.hpp:34