44 std::vector<double> v;
49 explicit single(
const std::vector<double> &v_in) :v(v_in) {
52 unsigned int size()
const {
return v.size(); }
53 bool empty()
const {
return v.size() == 0; }
54 void add(
const double &a) {
58 void add(
const single &s) {
59 v.insert(v.end(), s.v.begin(), s.v.end());
66 for (
unsigned int i=0; i<v.size(); i++)
68 m = sum/double(v.size());
73 double variance()
const {
78 for (
unsigned int i=0; i<v.size(); i++) {
80 sum_sq += v[i] * v[i];
82 double m = sum/double(v.size());
83 var = sum_sq/double(v.size()) - m*m;
92 double var = variance();
93 double sigma = sqrt(var);
94 double s3 = sigma * sigma * sigma;
97 for (
unsigned int i=0; i<v.size(); i++) {
98 double delta = v[i] - m;
99 sum_cubed += delta * delta * delta;
101 skew = (sum_cubed/double(v.size()))/s3;
106 double kurtosis()
const {
123 double var = variance();
126 double sum_to_the_4 = 0;
127 for (
unsigned int i=0; i<v.size(); i++) {
129 sum_to_the_4 += t * t * t * t;
131 k = sum_to_the_4/(double(v.size()) * var * var);
139 std::pair<double, double> median_and_iqr()
const {
141 std::vector<double> vv = v;
142 std::sort(vv.begin(), vv.end());
145 int idx_q1 =
static_cast<int>(0.25 *
static_cast<double>(n));
146 int idx_q2 =
static_cast<int>(0.50 *
static_cast<double>(n));
147 int idx_q3 =
static_cast<int>(0.75 *
static_cast<double>(n));
148 double iqr = vv[idx_q3] - vv[idx_q1];
149 double m = vv[idx_q2];
151 int idx_q2a = idx_q2 + 1;
153 m = (m + vv[idx_q2a]) * 0.5;
155 return std::pair<double, double> (m,iqr);
158 double get_ith_highest(
unsigned int idx)
const {
159 std::vector<double> vv = v;
160 std::sort(vv.begin(), vv.end());
161 std::reverse(vv.begin(), vv.end());
164 double get_ith_lowest(
unsigned int idx)
const {
165 std::vector<double> vv = v;
166 std::sort(vv.begin(), vv.end());