Fix up the tests and remove some duplicate calculations for the t-test.

master
Zed A. Shaw 1 month ago
parent 3d61dd316d
commit e4bcc802b8
  1. 2
      cpp/include/stats.hpp
  2. 6
      cpp/src/stats.cpp
  3. 2
      cpp/tests/stats_tests.cpp

@ -65,8 +65,6 @@ struct Stats {
auto end = std::chrono::high_resolution_clock::now(); auto end = std::chrono::high_resolution_clock::now();
auto elapsed = std::chrono::duration<double>(end - start); auto elapsed = std::chrono::duration<double>(end - start);
auto as_ms = std::chrono::duration_cast<std::chrono::nanoseconds>(elapsed);
if(elapsed.count() > 0.0) { if(elapsed.count() > 0.0) {
sample(1.0/elapsed.count()); sample(1.0/elapsed.count());
} }

@ -44,14 +44,10 @@ TTest internal_t_test(auto& first, auto& second) {
double den = (std::pow(var1 / n1, 2) / (n1 - 1)) + (std::pow(var2 / n2, 2) / (n2 - 1)); double den = (std::pow(var1 / n1, 2) / (n1 - 1)) + (std::pow(var2 / n2, 2) / (n2 - 1));
double dof = num / den; double dof = num / den;
// welch calculation
double temp = first.sample_variance() / first.n + second.sample_variance() / second.n;
double welchs = (first.mean() - second.mean()) / std::sqrt(temp);
double gamm = std::exp( double gamm = std::exp(
std::lgamma(dof / 2.0) + std::lgamma(0.5) std::lgamma(dof / 2.0) + std::lgamma(0.5)
- std::lgamma(dof / 2.0 + 0.5)); - std::lgamma(dof / 2.0 + 0.5));
double b = dof / ( welchs * welchs + dof); double b = dof / (t_stat * t_stat + dof);
auto func = [&](const double r) { auto func = [&](const double r) {
return std::pow(r, dof / 2.0 - 1.0) / std::sqrt(1.0 - r); return std::pow(r, dof / 2.0 - 1.0) / std::sqrt(1.0 - r);

@ -99,7 +99,7 @@ namespace stats_tests {
std::string filename("samples.txt"); std::string filename("samples.txt");
std::fstream s{filename, s.binary | s.trunc | s.out}; std::fstream s{filename, s.binary | s.trunc | s.out};
double skew_factor = 0.8; double skew_factor = uniform_real(0.01, 5.0);
for(size_t i = 0; i < 10; i++) { for(size_t i = 0; i < 10; i++) {
double num = uniform_real(-10.0, 10.0); double num = uniform_real(-10.0, 10.0);

Loading…
Cancel
Save