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

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

minor docs issues fixed

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