Program Listing for File stats_utils.hpp¶
↰ Return to documentation for file (include/uitsl/math/stats_utils.hpp)
#pragma once
#ifndef UITSL_MATH_STATS_UTILS_HPP_INCLUDE
#define UITSL_MATH_STATS_UTILS_HPP_INCLUDE
#include <cassert>
#include <stddef.h>
#include <vector>
#include "../../uit_emp/data/DataNode.hpp"
#include "../../uit_emp/math/Random.hpp"
namespace uitsl {
inline double sample_mean_with_replacement(
uit_emp::Random & rand,
const std::vector<double>& data
) {
uit_emp::DataNode<double, uit_emp::data::Range> sampled;
for (size_t sample = 0; sample < data.size(); ++sample) {
sampled.Add(
data[rand.GetUInt(data.size())]
);
}
return sampled.GetMean();
}
inline std::tuple<double, double> bootstrap(
uit_emp::Random & rand,
const std::vector<double>& data,
const double percentile=5.0,
const size_t num_reps=10000
) {
assert(percentile <= 50.0);
uit_emp::DataNode<double, uit_emp::data::Log> sampled;
for (size_t rep = 0; rep < num_reps; ++rep) {
sampled.Add(
sample_mean_with_replacement(rand, data)
);
}
return {
sampled.GetPercentile(percentile),
sampled.GetPercentile(100.0 - percentile)
};
}
} // namespace uitsl
#endif // #ifndef UITSL_MATH_STATS_UTILS_HPP_INCLUDE