 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Gary Wessle Guest
|
Posted: Sun Aug 27, 2006 3:31 am Post subject: code to find correlation |
|
|
Hi
I wrote a code to calculate the correlation between 2 sequence of
double numbers presented as vectors.
did I go about this the right way?
thanks
#include <vector>
using std::vector;
#include <valarray>
using std::valarray;
cor::cor(vector<double>& x, vector<double>& y)
{
int c = x.size();
int d = y.size();
if(c != d)
cout << "to calculate correlation, variables"
" must be of the same number of elements" << endl;
// converts the input to valarray for spead and ellegance.
valarray<double> a(c);
valarray<double> b(d);
copy(x.begin(), x.end(), &a[0]);
copy(y.begin(), y.end(), &b[0]);
// expected values "mean"
double Ea = a.sum() / static_cast<double> (a.size());
double Eb = b.sum() / static_cast<double> (b.size());
// standard diviation
double Sa = sqrt( pow((a-Ea),2).sum()/c );
double Sb = sqrt( pow((b-Eb),2).sum()/d );
// double Sb = sqrt( ((a*a).sum()/c)- pow(Ea, 2) ); // faster
// but more round-offs
// correlation
cof = ( ((a-Ea)/Sa)*((b-Eb)/Sb) ).sum()/(c-1);
} |
|
| Back to top |
|
 |
Victor Bazarov Guest
|
Posted: Sun Aug 27, 2006 7:51 am Post subject: Re: code to find correlation |
|
|
Gary Wessle wrote:
| Quote: | I wrote a code to calculate the correlation between 2 sequence of
double numbers presented as vectors.
did I go about this the right way?
|
I would never use 'cout' in a constructor unless it's a debug output
(in that case it should go to 'cerr' and be #ifdef'ed). You might
think of throwing an exception instead.
| Quote: |
thanks
#include <vector
using std::vector;
#include <valarray
using std::valarray;
cor::cor(vector<double>& x, vector<double>& y)
{
int c = x.size();
int d = y.size();
if(c != d)
cout << "to calculate correlation, variables"
" must be of the same number of elements" << endl;
// converts the input to valarray for spead and ellegance.
valarray<double> a(c);
valarray<double> b(d);
copy(x.begin(), x.end(), &a[0]);
copy(y.begin(), y.end(), &b[0]);
// expected values "mean"
double Ea = a.sum() / static_cast<double> (a.size());
double Eb = b.sum() / static_cast<double> (b.size());
// standard diviation
|
Isn't it "deviation"?
| Quote: | double Sa = sqrt( pow((a-Ea),2).sum()/c );
double Sb = sqrt( pow((b-Eb),2).sum()/d );
|
What are the extra parentheses aroud 'x-Ex' for?
| Quote: | // double Sb = sqrt( ((a*a).sum()/c)- pow(Ea, 2) ); // faster
// but more round-offs
// correlation
cof = ( ((a-Ea)/Sa)*((b-Eb)/Sb) ).sum()/(c-1);
}
|
Well, I see 'cor' is an object. Why? Does it have states? Does
it have a life on its own? What's the reason for it to be an object?
Shouldn't you simply have a function, like
double cor(vector..., vector...)
{
...
return cof;
}
?
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|