yat/statistics/PercentileConfidenceInterval.cc

Code
Comments
Other
Rev Date Author Line
4036 24 Jan 21 peter 1 // $Id$
4036 24 Jan 21 peter 2
4036 24 Jan 21 peter 3 /*
4036 24 Jan 21 peter 4   Copyright (C) 2021 Peter Johansson
4036 24 Jan 21 peter 5
4036 24 Jan 21 peter 6   This file is part of the yat library, http://dev.thep.lu.se/yat
4036 24 Jan 21 peter 7
4036 24 Jan 21 peter 8   The yat library is free software; you can redistribute it and/or
4036 24 Jan 21 peter 9   modify it under the terms of the GNU General Public License as
4036 24 Jan 21 peter 10   published by the Free Software Foundation; either version 3 of the
4036 24 Jan 21 peter 11   License, or (at your option) any later version.
4036 24 Jan 21 peter 12
4036 24 Jan 21 peter 13   The yat library is distributed in the hope that it will be useful,
4036 24 Jan 21 peter 14   but WITHOUT ANY WARRANTY; without even the implied warranty of
4036 24 Jan 21 peter 15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
4036 24 Jan 21 peter 16   General Public License for more details.
4036 24 Jan 21 peter 17
4036 24 Jan 21 peter 18   You should have received a copy of the GNU General Public License
4036 24 Jan 21 peter 19   along with yat. If not, see <http://www.gnu.org/licenses/>.
4036 24 Jan 21 peter 20 */
4036 24 Jan 21 peter 21
4036 24 Jan 21 peter 22 #include <config.h>
4036 24 Jan 21 peter 23
4036 24 Jan 21 peter 24 #include "PercentileConfidenceInterval.h"
4036 24 Jan 21 peter 25
4036 24 Jan 21 peter 26 #include <cassert>
4036 24 Jan 21 peter 27
4036 24 Jan 21 peter 28 namespace theplu {
4036 24 Jan 21 peter 29 namespace yat {
4036 24 Jan 21 peter 30 namespace statistics {
4036 24 Jan 21 peter 31
4036 24 Jan 21 peter 32   PercentileConfidenceInterval::PercentileConfidenceInterval(double k,
4036 24 Jan 21 peter 33                                                              double level)
4036 24 Jan 21 peter 34     : alpha_(1.0-level), k_(k), n_(0)
4036 24 Jan 21 peter 35   {}
4036 24 Jan 21 peter 36
4036 24 Jan 21 peter 37
4036 24 Jan 21 peter 38   double PercentileConfidenceInterval::alpha(void) const
4036 24 Jan 21 peter 39   {
4036 24 Jan 21 peter 40     return alpha_;
4036 24 Jan 21 peter 41   }
4036 24 Jan 21 peter 42
4036 24 Jan 21 peter 43
4036 24 Jan 21 peter 44   double PercentileConfidenceInterval::lower(void) const
4036 24 Jan 21 peter 45   {
4036 24 Jan 21 peter 46     return lower_;
4036 24 Jan 21 peter 47   }
4036 24 Jan 21 peter 48
4036 24 Jan 21 peter 49
4036 24 Jan 21 peter 50   double PercentileConfidenceInterval::k(void) const
4036 24 Jan 21 peter 51   {
4036 24 Jan 21 peter 52     return k_;
4036 24 Jan 21 peter 53   }
4036 24 Jan 21 peter 54
4036 24 Jan 21 peter 55
4036 24 Jan 21 peter 56   void PercentileConfidenceInterval::prepare(size_t n)
4036 24 Jan 21 peter 57   {
4036 24 Jan 21 peter 58     if (n == n_)
4036 24 Jan 21 peter 59       return;
4036 24 Jan 21 peter 60     // number of observations, x, smaller than the kth percentile is an
4036 24 Jan 21 peter 61     // obervatioon from a Binomal distribution, Bin(n, 0.01*k)
4036 24 Jan 21 peter 62     boost::math::binomial bin(n,0.01*k_);
4036 24 Jan 21 peter 63
4036 24 Jan 21 peter 64     // P(x <= lower_index) <= alpa/2
4036 24 Jan 21 peter 65     lower_index_ = boost::math::quantile(bin, alpha_/2.0);
4036 24 Jan 21 peter 66     // P(x >= upper_index) <= alpa/2
4036 24 Jan 21 peter 67     upper_index_ = boost::math::quantile(bin, 1.0 - alpha_/2.0);
4036 24 Jan 21 peter 68     n_ = n;
4036 24 Jan 21 peter 69   }
4036 24 Jan 21 peter 70
4036 24 Jan 21 peter 71
4036 24 Jan 21 peter 72   double PercentileConfidenceInterval::upper(void) const
4036 24 Jan 21 peter 73   {
4036 24 Jan 21 peter 74     return upper_;
4036 24 Jan 21 peter 75   }
4036 24 Jan 21 peter 76
4036 24 Jan 21 peter 77
4036 24 Jan 21 peter 78 }}} // of namespace statistics, yat, and theplu