CLX C++ Libraries
Home >> stats

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 には,値が格納されているコンテナのイテレータを指定します. 信頼区間を求める場合には,引数 tt 分布表から求められる値を指定する必要があります (自由度∞で95%信頼区間を求める場合は,1.96).

Example

example_stats.cpp

#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]

Reference

  1. t 分布表