C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

code to find correlation

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ language (comp.lang.c++)
View previous topic :: View next topic  
Author Message
Gary Wessle
Guest





PostPosted: Sun Aug 27, 2006 3:31 am    Post subject: code to find correlation Reply with quote



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





PostPosted: Sun Aug 27, 2006 7:51 am    Post subject: Re: code to find correlation Reply with quote



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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ language (comp.lang.c++) All times are GMT
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.