Isis 3.0 Object Programmers' Reference
Home
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
MultivariateStatistics.cpp
Go to the documentation of this file.
1
24
#include <float.h>
25
#include <string>
26
#include <iostream>
27
#include "
MultivariateStatistics.h
"
28
#include "
IException.h
"
29
30
31
namespace
Isis {
36
MultivariateStatistics::MultivariateStatistics
() {
37
Reset
();
38
}
39
41
void
MultivariateStatistics::Reset
() {
42
p_x
.
Reset
();
43
p_y
.
Reset
();
44
p_sumxy
= 0.0;
45
46
p_validPixels
= 0;
47
p_invalidPixels
= 0;
48
p_totalPixels
= 0;
49
}
50
52
MultivariateStatistics::~MultivariateStatistics
() {};
62
void
MultivariateStatistics::AddData
(
const
double
*x,
const
double
*y,
63
const
unsigned
int
count) {
64
for
(
unsigned
int
i = 0; i < count; i++) {
65
double
yVal = y[i];
66
double
xVal = x[i];
67
p_totalPixels
++;
68
69
if
(
Isis::IsValidPixel
(xVal) &&
Isis::IsValidPixel
(yVal)) {
70
p_x
.
AddData
(xVal);
71
p_y
.
AddData
(yVal);
72
p_sumxy
+= xVal * yVal;
73
p_validPixels
++;
74
}
75
else
{
76
p_invalidPixels
++;
77
}
78
}
79
}
80
89
void
MultivariateStatistics::AddData
(
double
x,
double
y,
unsigned
int
count) {
90
p_totalPixels
+= count;
91
92
if
(
IsValidPixel
(x) &&
IsValidPixel
(y)) {
93
p_sumxy
+= x * y * count;
94
p_validPixels
+= count;
95
96
for
(
unsigned
int
i = 0; i < count; i++) {
97
p_x
.
AddData
(x);
98
p_y
.
AddData
(y);
99
}
100
}
101
else
{
102
p_invalidPixels
+= count;
103
}
104
}
105
118
void
MultivariateStatistics::RemoveData
(
const
double
*x,
const
double
*y,
119
const
unsigned
int
count) {
120
for
(
unsigned
int
i = 0; i < count; i++) {
121
p_totalPixels
--;
122
123
if
(
Isis::IsValidPixel
(x[i]) &&
Isis::IsValidPixel
(y[i])) {
124
p_x
.
RemoveData
(&x[i], 1);
125
p_y
.
RemoveData
(&y[i], 1);
126
p_sumxy
-= x[i] * y[i];
127
p_validPixels
--;
128
}
129
else
{
130
p_invalidPixels
--;
131
}
132
}
133
134
if
(
p_totalPixels
< 0) {
135
std::string m =
"You are removing non-existant data in [MultivariateStatistics::RemoveData]"
;
136
throw
IException
(
IException::Programmer
, m,
_FILEINFO_
);
137
}
138
}
139
146
double
MultivariateStatistics::Covariance
()
const
{
147
if
(
p_validPixels
<= 1)
return
Isis::NULL8;
148
double
covar =
p_sumxy
-
p_y
.
Average
() *
p_x
.
Sum
() -
p_x
.
Average
() *
p_y
.
Sum
() +
149
p_x
.
Average
() *
p_y
.
Average
() * (double)
p_validPixels
;
150
return
covar / (double)(
p_validPixels
- 1);
151
}
152
163
double
MultivariateStatistics::Correlation
()
const
{
164
165
if
(
p_validPixels
<= 1)
return
Isis::NULL8;
166
double
covar =
Covariance
();
167
double
stdX =
p_x
.
StandardDeviation
();
168
double
stdY =
p_y
.
StandardDeviation
();
169
if
(stdX == 0.0 || stdX == Isis::NULL8)
return
Isis::NULL8;
170
if
(stdY == 0.0 || stdY == Isis::NULL8)
return
Isis::NULL8;
171
if
(covar == Isis::NULL8)
return
Isis::NULL8;
172
return
covar / (stdX * stdY);
173
}
174
180
BigInt
MultivariateStatistics::TotalPixels
()
const
{
181
return
p_totalPixels
;
182
}
183
191
BigInt
MultivariateStatistics::ValidPixels
()
const
{
192
return
p_validPixels
;
193
}
194
200
BigInt
MultivariateStatistics::InvalidPixels
()
const
{
201
return
p_invalidPixels
;
202
}
203
210
void
MultivariateStatistics::LinearRegression
(
double
&a,
double
&b)
const
{
211
// From Modern Elementary Statistics - 5th edition, Freund, pp 367
212
double
denom = (double)
p_validPixels
*
p_x
.
SumSquare
() -
p_x
.
Sum
() *
p_x
.
Sum
();
213
if
(denom == 0.0) {
214
std::string msg =
"Unable to compute linear regression in Multivariate Statistics"
;
215
throw
IException
(
IException::Programmer
, msg,
_FILEINFO_
);
216
}
217
a =
p_y
.
Sum
() *
p_x
.
SumSquare
() -
p_x
.
Sum
() *
p_sumxy
;
218
a = a / denom;
219
220
b = (double)
p_validPixels
*
p_sumxy
-
p_x
.
Sum
() *
p_y
.
Sum
();
221
b = b / denom;
222
}
223
229
double
MultivariateStatistics::SumXY
()
const
{
230
return
p_sumxy
;
231
}
232
238
Isis::Statistics
MultivariateStatistics::X
()
const
{
239
return
p_x
;
240
};
241
247
Isis::Statistics
MultivariateStatistics::Y
()
const
{
248
return
p_y
;
249
};
250
}
251