Declarations
template <class InIter> double mean(InIter first, InIter last); template <class InIter> double variance(InIter first, InIter last); template <class InIter> double stddev(InIter first, InIter last); template <class InIter> double unbiasvar(InIter first, InIter last); template <class InIter, class Type> std::pair<double, double> confidence_interval(InIter first, InIter last, Type t); template <class InIter, class Type> double mse(InIter first, InIter last, Type correct); template <class InIter, class Type> double rmse(InIter first, InIter last, Type correct);
Overview
平均 (mean),分散 (variance),標準偏差 (stddev),不偏分散 (unbiasvar), 信頼区間 (confidence_interval),平均二乗誤差 (mse) を求める関数です.first, last には,値が格納されているコンテナのイテレータを指定します. 信頼区間を求める場合には,引数 t に t 分布表から求められる値を指定する必要があります (自由度∞で95%信頼区間を求める場合は,1.96).
Example
#include <iostream> #include <iterator> #include "clx/stats.h" #include "clx/lexical_cast.h" int main(int argc, char* argv[]) { // 標準入力から読み込む std::istream_iterator<int> input(std::cin); std::istream_iterator<int> last; std::vector<int> v; std::copy(input, last, std::inserter(v, v.begin())); std::cout << "mean: " << clx::mean(v.begin(), v.end()) << std::endl; std::cout << "stddev: " << clx::stddev(v.begin(), v.end()) << std::endl; std::pair<double, double> ci = clx::confidence_interval(v.begin(), v.end(), 2.06); std::cout << "95% confidence interval: [" << ci.first << ',' << ci.second << ']' << std::endl; return 0; }
test_stats.dat 100 60 70 80 80 89 85 82 90 75 75 60 65 60 80 80 90 80 80 80 90 85 83 50 75 Result mean: 77.76 stddev: 11.3465 95% confidence interval: [72.9889,82.5311]