source: trunk/yat/statistics/AveragerPair.h @ 2202

Last change on this file since 2202 was 2202, checked in by Peter, 14 years ago

merging release 0.6 into trunk

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 4.3 KB
Line 
1#ifndef _theplu_yat_statistics_averagerpair_
2#define _theplu_yat_statistics_averagerpair_
3
4// $Id: AveragerPair.h 2202 2010-02-21 18:39:13Z peter $
5
6/*
7  Copyright (C) 2004, 2005 Jari Häkkinen, Peter Johansson
8  Copyright (C) 2006 Jari Häkkinen, Peter Johansson, Markus Ringnér
9  Copyright (C) 2007, 2008 Jari Häkkinen, Peter Johansson
10  Copyright (C) 2009, 2010 Peter Johansson
11
12  This file is part of the yat library, http://dev.thep.lu.se/yat
13
14  The yat library is free software; you can redistribute it and/or
15  modify it under the terms of the GNU General Public License as
16  published by the Free Software Foundation; either version 3 of the
17  License, or (at your option) any later version.
18
19  The yat library is distributed in the hope that it will be useful,
20  but WITHOUT ANY WARRANTY; without even the implied warranty of
21  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22  General Public License for more details.
23
24  You should have received a copy of the GNU General Public License
25  along with yat. If not, see <http://www.gnu.org/licenses/>.
26*/
27
28#include "Averager.h"
29
30#include "yat/utility/iterator_traits.h"
31
32#include <boost/concept_check.hpp>
33
34#include <cmath>
35#include <utility>
36
37namespace theplu{
38namespace yat{
39namespace statistics{
40
41  ///
42  /// @brief Class for taking care of mean and covariance of two variables.
43  ///
44  /// @see Averager AveragerWeighted AveragerPairWeighted
45  ///
46  class AveragerPair
47  {
48  public:
49
50    ///
51    /// @brief The default constructor
52    ///
53    AveragerPair(void);
54
55    ///
56    /// Constructor taking sum of \a x , \a xx , \a y , \a yy , xy and
57    /// number of pair of values \a n
58    ///
59    //AveragerPair(const double x, const double xx, const double y,
60    //                    const double yy, const double xy, const unsigned long n)
61    //  : x_(Averager(x,xx,n)), y_(Averager(y,yy,n)), xy_(xy) {}
62
63    ///
64    /// The copy constructor
65    ///
66    AveragerPair(const AveragerPair&);
67
68    ///
69    /// Adding \a n pairs of data points with value \a x and \a y.
70    ///
71    void add(const double x, const double y, const long n=1);
72
73    /**
74       \brief Concordence correlation coefficient.
75
76       \f$ \frac{\sum_i (x_i-m_x)(y_i-m_y)}{\sum_i
77       (x_i-m_x)^2+\sum_i (y_i-m_y)^2 + n(m_x-m_y)^2} \f$
78       
79    */
80    double ccc(void) const;
81
82    /**
83       \f$ \frac{\sum_i (x_i-m_x)(y_i-m_y)}{\sqrt{\sum_i
84       (x_i-m_x)^2\sum_i (y_i-m_y)^2}} \f$
85       
86       \return %Pearson correlation coefficient.
87    */
88    double correlation(void) const;
89 
90    ///
91    /// Calculating covariance using
92    /// \f$ \frac{1}{N}\sum_i (x_i-m_x)(y_i-m_y) \f$,
93    /// where \f$ m \f$ is the mean.
94    ///
95    /// @return The covariance.
96    ///
97    double covariance(void) const;
98 
99    ///
100    /// @return The mean of xy.
101    ///
102    double mean_xy(void) const;
103
104    /**
105       \return Average squared deviation between x and y \f$
106       \frac{1}{N} \sum (x-y)^2 \f$
107    */
108    double msd(void) const;
109
110    ///
111    /// @return The number of pair of data points.
112    ///
113    long n(void) const;
114
115    ///
116    /// @brief Reset everything to zero
117    ///
118    void reset(void);
119
120    ///
121    /// @return The sum of xy.
122    ///
123    double sum_xy(void) const;
124
125    /**
126       \return Sum of squared deviation between x and y \f$
127       \sum (x-y)^2 \f$
128    */
129    double sum_squared_deviation(void) const;
130
131    ///
132    /// @return \f$ \sum_i (x_i-m_x)(y_i-m_y) \f$
133    ///
134    double sum_xy_centered(void) const;
135
136    ///
137    /// @return A const refencer to the averager object for x.
138    ///
139    const Averager& x_averager(void) const;
140
141    ///
142    /// @return A const reference to the averager object for y
143    ///
144    const Averager& y_averager(void) const;
145
146    ///
147    /// @brief The assigment operator
148    ///
149    const AveragerPair& operator=(const AveragerPair& a);
150
151    ///
152    /// Operator to add another Averager
153    ///
154    const AveragerPair& operator+=(const AveragerPair&);
155
156  private:
157    Averager x_;
158    Averager y_;
159    double  xy_;
160
161  };
162
163  /**
164     \brief adding data from two ranges to AveragerPair \a ap
165
166     \relates AveragerPair
167   */
168  template <class InputIterator1, class InputIterator2>
169  void add(AveragerPair& ap, InputIterator1 first1, InputIterator1 last1, 
170           InputIterator2 first2)
171  {
172    BOOST_CONCEPT_ASSERT((boost::InputIterator<InputIterator1>));
173    BOOST_CONCEPT_ASSERT((boost::InputIterator<InputIterator2>));
174    utility::check_iterator_is_unweighted(first1);
175    utility::check_iterator_is_unweighted(first2);
176    for ( ; first1 != last1; ++first1, ++first2)
177      ap.add(*first1, *first2);
178  }
179
180
181}}} // of namespace statistics, yat, and theplu
182
183#endif
Note: See TracBrowser for help on using the repository browser.