yat/statistics/Averager4.h

Code
Comments
Other
Rev Date Author Line
2809 06 Aug 12 peter 1 #ifndef _theplu_yat_statistics_averager4
2809 06 Aug 12 peter 2 #define _theplu_yat_statistics_averager4
2799 28 Jul 12 peter 3
2799 28 Jul 12 peter 4 // $Id$
2799 28 Jul 12 peter 5
2799 28 Jul 12 peter 6 /*
4359 23 Aug 23 peter 7   Copyright (C) 2012 Peter Johansson
2799 28 Jul 12 peter 8
2799 28 Jul 12 peter 9   This file is part of the yat library, http://dev.thep.lu.se/yat
2799 28 Jul 12 peter 10
2799 28 Jul 12 peter 11   The yat library is free software; you can redistribute it and/or
2799 28 Jul 12 peter 12   modify it under the terms of the GNU General Public License as
2799 28 Jul 12 peter 13   published by the Free Software Foundation; either version 3 of the
2799 28 Jul 12 peter 14   License, or (at your option) any later version.
2799 28 Jul 12 peter 15
2799 28 Jul 12 peter 16   The yat library is distributed in the hope that it will be useful,
2799 28 Jul 12 peter 17   but WITHOUT ANY WARRANTY; without even the implied warranty of
2799 28 Jul 12 peter 18   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
2799 28 Jul 12 peter 19   General Public License for more details.
2799 28 Jul 12 peter 20
2799 28 Jul 12 peter 21   You should have received a copy of the GNU General Public License
2799 28 Jul 12 peter 22   along with yat. If not, see <http://www.gnu.org/licenses/>.
2799 28 Jul 12 peter 23 */
2799 28 Jul 12 peter 24
2809 06 Aug 12 peter 25 #include "averager_base.h"
2799 28 Jul 12 peter 26
2799 28 Jul 12 peter 27 namespace theplu {
2799 28 Jul 12 peter 28 namespace yat {
2799 28 Jul 12 peter 29 namespace statistics {
2799 28 Jul 12 peter 30
2799 28 Jul 12 peter 31   /**
2799 28 Jul 12 peter 32      \brief class to calculate 1st, 2nd, 3rd, and 4th central moments
2809 06 Aug 12 peter 33
2809 06 Aug 12 peter 34      \since yat 0.9
2799 28 Jul 12 peter 35    */
2809 06 Aug 12 peter 36   class Averager4 : public averager_base4<Averager4>
2799 28 Jul 12 peter 37   {
2799 28 Jul 12 peter 38   public:
2799 28 Jul 12 peter 39     /**
2799 28 Jul 12 peter 40        \brief construct empty object
2799 28 Jul 12 peter 41      */
2799 28 Jul 12 peter 42     Averager4(void);
2799 28 Jul 12 peter 43
2799 28 Jul 12 peter 44     /**
2799 28 Jul 12 peter 45        Access Averager that holds first and second moments
2799 28 Jul 12 peter 46      */
2809 06 Aug 12 peter 47     //const Averager& averager(void) const;
2799 28 Jul 12 peter 48
2799 28 Jul 12 peter 49     /**
2799 28 Jul 12 peter 50        \brief Third central moment
2799 28 Jul 12 peter 51
2799 28 Jul 12 peter 52        \return \f$ \frac{1}{N} \sum (x_i-m)^3 \f$
2799 28 Jul 12 peter 53      */
2799 28 Jul 12 peter 54
2799 28 Jul 12 peter 55     /**
2799 28 Jul 12 peter 56        \brief Fourth central moment
2799 28 Jul 12 peter 57
2799 28 Jul 12 peter 58        \return \f$ \frac{1}{N} \sum (x_i-m)^4 \f$
2799 28 Jul 12 peter 59      */
2799 28 Jul 12 peter 60
2809 06 Aug 12 peter 61
2799 28 Jul 12 peter 62     /**
2799 28 Jul 12 peter 63        The kurtosis is calculated as \f$ M_4 / M_2^2 - 3 \f$ where \f$
2799 28 Jul 12 peter 64        M_4 \f$ and \f$ M_2 \f$ are the fourth central moment and
2799 28 Jul 12 peter 65        variance, respectively.
2799 28 Jul 12 peter 66
2799 28 Jul 12 peter 67        \return kurtosis
2799 28 Jul 12 peter 68
2799 28 Jul 12 peter 69        \see central_moment4 and Averager::variance
2799 28 Jul 12 peter 70
2799 28 Jul 12 peter 71        \note This function uses a biased estimator of the variance
2799 28 Jul 12 peter 72        (see Averager::variance) whereas function
2799 28 Jul 12 peter 73        kurtosis(const utility::VectorBase&) uses an unbiased estimator
2799 28 Jul 12 peter 74        (Averger::variance_unbiased) and therefore the result may
2799 28 Jul 12 peter 75        differ for small \a N.
2799 28 Jul 12 peter 76      */
2799 28 Jul 12 peter 77
2799 28 Jul 12 peter 78     /**
2799 28 Jul 12 peter 79        The skewness is calculated as \f$ M_3 / {\sigma}^3 \f$ where \f$
2799 28 Jul 12 peter 80        M_3 \f$ and \f$ \sigma \f$ are the third central moment and
2799 28 Jul 12 peter 81        standard deviation, respectively.
2799 28 Jul 12 peter 82
2799 28 Jul 12 peter 83        \return skewness
2799 28 Jul 12 peter 84
2799 28 Jul 12 peter 85        \see central_moment3 and Averager::std
2799 28 Jul 12 peter 86
2799 28 Jul 12 peter 87        \note This function uses a biased estimator of the variance
4200 19 Aug 22 peter 88        (see Averager::variance) whereas function
2799 28 Jul 12 peter 89        skewness(const utility::VectorBase&) uses an unbiased estimator
2799 28 Jul 12 peter 90        (Averger::variance_unbiased) and therefore the result may
2799 28 Jul 12 peter 91        differ for small \a N.
2799 28 Jul 12 peter 92      */
2799 28 Jul 12 peter 93
2799 28 Jul 12 peter 94     /**
2799 28 Jul 12 peter 95      */
2809 06 Aug 12 peter 96     template<class Derived>
2809 06 Aug 12 peter 97     const Averager4& operator+=(const averager_base4<Derived>& rhs);
2799 28 Jul 12 peter 98   private:
2809 06 Aug 12 peter 99     friend class averager_base<Averager4>;
2809 06 Aug 12 peter 100     // static virtual function in averager_base
2809 06 Aug 12 peter 101     void add_impl(double, long int n);
2809 06 Aug 12 peter 102     void rescale_impl(double);
2799 28 Jul 12 peter 103
2799 28 Jul 12 peter 104     // using compiler generated copy and assignment
2799 28 Jul 12 peter 105     // Averager4(const Averager4&)
2799 28 Jul 12 peter 106     // Averager4& operator=(const Averager4& rhs);
2799 28 Jul 12 peter 107   };
2799 28 Jul 12 peter 108
2809 06 Aug 12 peter 109     template<class Derived>
2809 06 Aug 12 peter 110     const Averager4& Averager4::operator+=(const averager_base4<Derived>& rhs)
2809 06 Aug 12 peter 111     {
2809 06 Aug 12 peter 112       this->add4(rhs.mean(), rhs.sum_xx_centered(),
2809 06 Aug 12 peter 113                  rhs.sum_x3_centered(), rhs.sum_x4_centered(), rhs.n());
2809 06 Aug 12 peter 114       return *this;
2809 06 Aug 12 peter 115     }
2809 06 Aug 12 peter 116
2799 28 Jul 12 peter 117 }}} // of namespace statistics, yat, and theplu
2799 28 Jul 12 peter 118 #endif