/usr/include/ql/math/statistics/incrementalstatistics.hpp is in libquantlib0-dev 1.7.1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 | /* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
Copyright (C) 2003 Ferdinando Ametrano
Copyright (C) 2000, 2001, 2002, 2003 RiskMap srl
Copyright (C) 2015 Peter Caspers
This file is part of QuantLib, a free-software/open-source library
for financial quantitative analysts and developers - http://quantlib.org/
QuantLib is free software: you can redistribute it and/or modify it
under the terms of the QuantLib license. You should have received a
copy of the license along with this program; if not, please email
<quantlib-dev@lists.sf.net>. The license is also available online at
<http://quantlib.org/license.shtml>.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the license for more details.
*/
/*! \file incrementalstatistics.hpp
\brief statistics tool based on incremental accumulation
in the meantime, this is just a wrapper to the boost
accumulator library, kept for backward compatibility
*/
#ifndef quantlib_incremental_statistics_hpp
#define quantlib_incremental_statistics_hpp
#include <ql/utilities/null.hpp>
#include <ql/errors.hpp>
#include <boost/accumulators/accumulators.hpp>
#include <boost/accumulators/statistics/stats.hpp>
#include <boost/accumulators/statistics/count.hpp>
#include <boost/accumulators/statistics/sum.hpp>
#include <boost/accumulators/statistics/min.hpp>
#include <boost/accumulators/statistics/max.hpp>
#include <boost/accumulators/statistics/weighted_mean.hpp>
#include <boost/accumulators/statistics/weighted_variance.hpp>
#include <boost/accumulators/statistics/weighted_skewness.hpp>
#include <boost/accumulators/statistics/weighted_kurtosis.hpp>
#include <boost/accumulators/statistics/weighted_moment.hpp>
namespace QuantLib {
//! Statistics tool based on incremental accumulation
/*! It can accumulate a set of data and return statistics (e.g: mean,
variance, skewness, kurtosis, error estimation, etc.).
This class is a wrapper to the boost accumulator library.
*/
class IncrementalStatistics {
public:
typedef Real value_type;
IncrementalStatistics();
//! \name Inspectors
//@{
//! number of samples collected
Size samples() const;
//! sum of data weights
Real weightSum() const;
/*! returns the mean, defined as
\f[ \langle x \rangle = \frac{\sum w_i x_i}{\sum w_i}. \f]
*/
Real mean() const;
/*! returns the variance, defined as
\f[ \frac{N}{N-1} \left\langle \left(
x-\langle x \rangle \right)^2 \right\rangle. \f]
*/
Real variance() const;
/*! returns the standard deviation \f$ \sigma \f$, defined as the
square root of the variance.
*/
Real standardDeviation() const;
/*! returns the error estimate \f$ \epsilon \f$, defined as the
square root of the ratio of the variance to the number of
samples.
*/
Real errorEstimate() const;
/*! returns the skewness, defined as
\f[ \frac{N^2}{(N-1)(N-2)} \frac{\left\langle \left(
x-\langle x \rangle \right)^3 \right\rangle}{\sigma^3}. \f]
The above evaluates to 0 for a Gaussian distribution.
*/
Real skewness() const;
/*! returns the excess kurtosis, defined as
\f[ \frac{N^2(N+1)}{(N-1)(N-2)(N-3)}
\frac{\left\langle \left(x-\langle x \rangle \right)^4
\right\rangle}{\sigma^4} - \frac{3(N-1)^2}{(N-2)(N-3)}. \f]
The above evaluates to 0 for a Gaussian distribution.
*/
Real kurtosis() const;
/*! returns the minimum sample value */
Real min() const;
/*! returns the maximum sample value */
Real max() const;
//! number of negative samples collected
Size downsideSamples() const;
//! sum of data weights for negative samples
Real downsideWeightSum() const;
/*! returns the downside variance, defined as
\f[ \frac{N}{N-1} \times \frac{ \sum_{i=1}^{N}
\theta \times x_i^{2}}{ \sum_{i=1}^{N} w_i} \f],
where \f$ \theta \f$ = 0 if x > 0 and
\f$ \theta \f$ =1 if x <0
*/
Real downsideVariance() const;
/*! returns the downside deviation, defined as the
square root of the downside variance.
*/
Real downsideDeviation() const;
//@}
//! \name Modifiers
//@{
//! adds a datum to the set, possibly with a weight
/*! \pre weight must be positive or null */
void add(Real value, Real weight = 1.0);
//! adds a sequence of data to the set, with default weight
template <class DataIterator>
void addSequence(DataIterator begin, DataIterator end) {
for (;begin!=end;++begin)
add(*begin);
}
//! adds a sequence of data to the set, each with its weight
/*! \pre weights must be positive or null */
template <class DataIterator, class WeightIterator>
void addSequence(DataIterator begin, DataIterator end,
WeightIterator wbegin) {
for (;begin!=end;++begin,++wbegin)
add(*begin, *wbegin);
}
//! resets the data to a null set
void reset();
//@}
private:
typedef boost::accumulators::accumulator_set<
Real,
boost::accumulators::stats<
boost::accumulators::tag::count, boost::accumulators::tag::min,
boost::accumulators::tag::max,
boost::accumulators::tag::weighted_mean,
boost::accumulators::tag::weighted_variance,
boost::accumulators::tag::weighted_skewness,
boost::accumulators::tag::weighted_kurtosis,
boost::accumulators::tag::sum_of_weights>,
Real> accumulator_set;
accumulator_set acc_;
typedef boost::accumulators::accumulator_set<
Real, boost::accumulators::stats<
boost::accumulators::tag::count,
boost::accumulators::tag::weighted_moment<2>,
boost::accumulators::tag::sum_of_weights>,
Real> downside_accumulator_set;
downside_accumulator_set downsideAcc_;
};
}
#endif
|