My Project
twoDimensionalStatistics.cc
Go to the documentation of this file.
1 /* TwoDimensionalStatistics.cc
2  */
4 #include "osl/stat/average.h"
5 #include <cmath>
6 
8 {
9 public:
11 
12  // MANIPULATORS
13  void add(const double& x, const double& y)
14  {
15  m_x.add(x);
16  m_y.add(y);
17  m_x2.add(x*x);
18  m_y2.add(y*y);
19  m_xy.add(x*y);
20  }
21  void merge(const Data& r)
22  {
23  m_x.merge(r.m_x);
24  m_y.merge(r.m_y);
25  m_x2.merge(r.m_x2);
26  m_y2.merge(r.m_y2);
27  m_xy.merge(r.m_xy);
28  }
29  void clear()
30  {
31  m_x.clear();
32  m_y.clear();
33  m_x2.clear();
34  m_y2.clear();
35  m_xy.clear();
36  }
37 };
38 
39 // CREATORS
41 TwoDimensionalStatistics() : m_data(new Data())
42 {
43 }
44 
47 {
48 }
49 
50 // MANIPULATORS
52 add(const double& x, const double& y)
53 {
54  m_data->add(x,y);
55 }
56 
59 {
60  m_data->merge(*r.m_data);
61 }
62 
64 clear()
65 {
66  m_data->clear();
67 }
68 
69 
70 // ACCESSORS
72 size() const
73 {
74  return m_data->m_x.numElements();
75 }
76 
78 averageX() const
79 {
80  return m_data->m_x.average();
81 }
82 
84 averageY() const
85 {
86  return m_data->m_y.average();
87 }
88 
90 averageX2() const
91 {
92  return m_data->m_x2.average();
93 }
94 
96 averageY2() const
97 {
98  return m_data->m_y2.average();
99 }
100 
102 averageXY() const
103 {
104  return m_data->m_xy.average();
105 }
106 
108 meanSquaredErrors() const
109 {
110  return averageX2() - 2*averageXY() + averageY2();
111 }
112 
115 {
116  return averageX2() - averageX()*averageX()
117  -2*(averageXY() - averageX()*averageY())
118  + averageY2() - averageY()*averageY();
119 }
120 
122 correlation() const
123 {
124  return (averageXY() - averageX()*averageY())
125  / sqrt((averageX2() - averageX()*averageX())
126  * (averageY2() - averageY()*averageY()));
127 }
128 
130 fitting(double &a, double &b, double &residual) const
131 {
132  double d = averageX2() - averageX()*averageX();
133  double n = averageXY() - averageX()*averageY();
134  if (std::abs(d) < 1e-8) {
135  a = 0.0;
136  b = averageY();
137  residual = averageY2() - averageY()*averageY();
138  return;
139  }
140  a = n / d;
141  b = (averageX2()*averageY() - averageXY()*averageX()) / d;
142  residual = averageY2()-averageY()*averageY()
143  - n * n / d;
144 }
145 
146 /* ------------------------------------------------------------------------- */
147 // ;;; Local Variables:
148 // ;;; mode:c++
149 // ;;; c-basic-offset:2
150 // ;;; End:
osl::stat::TwoDimensionalStatistics::Data::m_y2
Average m_y2
Definition: twoDimensionalStatistics.cc:10
osl::stat::TwoDimensionalStatistics::meanSquaredErrorsAdjustConstant
double meanSquaredErrorsAdjustConstant() const
Definition: twoDimensionalStatistics.cc:114
osl::stat::TwoDimensionalStatistics::merge
void merge(const TwoDimensionalStatistics &)
Definition: twoDimensionalStatistics.cc:58
osl::stat::TwoDimensionalStatistics::TwoDimensionalStatistics
TwoDimensionalStatistics()
Definition: twoDimensionalStatistics.cc:41
osl::stat::TwoDimensionalStatistics::Data
Definition: twoDimensionalStatistics.cc:8
twoDimensionalStatistics.h
osl::stat::TwoDimensionalStatistics::Data::m_x2
Average m_x2
Definition: twoDimensionalStatistics.cc:10
average.h
osl::stat::Average::clear
void clear(double a=0.0, int e=0)
Definition: average.h:42
osl::stat::TwoDimensionalStatistics::averageXY
double averageXY() const
Definition: twoDimensionalStatistics.cc:102
osl::stat::TwoDimensionalStatistics::averageY
double averageY() const
Definition: twoDimensionalStatistics.cc:84
osl::stat::TwoDimensionalStatistics::Data::add
void add(const double &x, const double &y)
Definition: twoDimensionalStatistics.cc:13
osl::stat::TwoDimensionalStatistics::correlation
double correlation() const
Definition: twoDimensionalStatistics.cc:122
osl::stat::TwoDimensionalStatistics::~TwoDimensionalStatistics
~TwoDimensionalStatistics()
Definition: twoDimensionalStatistics.cc:46
osl::stat::TwoDimensionalStatistics::Data::m_xy
Average m_xy
Definition: twoDimensionalStatistics.cc:10
osl::stat::Average::merge
void merge(const Average &r)
Definition: average.h:34
osl::stat::TwoDimensionalStatistics::meanSquaredErrors
double meanSquaredErrors() const
Definition: twoDimensionalStatistics.cc:108
osl::stat::Average
incrementaly maintain average of data sequence
Definition: average.h:14
osl::stat::TwoDimensionalStatistics::fitting
void fitting(double &a, double &b, double &residual) const
ax + b = y
Definition: twoDimensionalStatistics.cc:130
osl::stat::TwoDimensionalStatistics::size
size_t size() const
Definition: twoDimensionalStatistics.cc:72
osl::stat::TwoDimensionalStatistics::clear
void clear()
Definition: twoDimensionalStatistics.cc:64
osl::stat::TwoDimensionalStatistics
Definition: twoDimensionalStatistics.h:14
osl::stat::TwoDimensionalStatistics::Data::m_y
Average m_y
Definition: twoDimensionalStatistics.cc:10
osl::stat::TwoDimensionalStatistics::averageX2
double averageX2() const
Definition: twoDimensionalStatistics.cc:90
osl::stat::TwoDimensionalStatistics::Data::merge
void merge(const Data &r)
Definition: twoDimensionalStatistics.cc:21
osl::stat::TwoDimensionalStatistics::Data::m_x
Average m_x
Definition: twoDimensionalStatistics.cc:10
osl::stat::Average::add
double add(const double &x)
Add an element x.
Definition: average.h:27
osl::stat::TwoDimensionalStatistics::averageY2
double averageY2() const
Definition: twoDimensionalStatistics.cc:96
osl::stat::TwoDimensionalStatistics::m_data
std::unique_ptr< Data > m_data
Definition: twoDimensionalStatistics.h:15
osl::stat::TwoDimensionalStatistics::averageX
double averageX() const
Definition: twoDimensionalStatistics.cc:78
osl::stat::TwoDimensionalStatistics::add
void add(const double &x, const double &y)
Definition: twoDimensionalStatistics.cc:52
osl::stat::TwoDimensionalStatistics::Data::clear
void clear()
Definition: twoDimensionalStatistics.cc:29