We help IT Professionals succeed at work.

Check out our new AWS podcast with Certified Expert, Phil Phillips! Listen to "How to Execute a Seamless AWS Migration" on EE or on your favorite podcast platform. Listen Now

x

std deviation and dynamic array

pgmerLA
pgmerLA asked
on
Medium Priority
619 Views
Last Modified: 2012-05-11
Hi, I have to calculate the standard deviation and use dynamic array.
When I double check with excel, both my results don't match.
could you tell me what I am doing wrong in my code?
Thanks.

Ps: the professor provided us with the std deviation formula:
sd= 1/(n-1)[ Sum(x^2)-1/(n-1)[(Sum(x))^2] ]

thanks for the help.

I have entered 6 numbers: 2 2 3 3 4 4.
in excel I get: .89
in my code: .8.....why???
#include<iostream>
#include<iomanip>

using namespace std;

int main(){

	int n=0;
	cout<<"How many data: ";
	cin>>n;
	int *a= new int[n];

	cout<<"Enter "<<n<<" data: ";
	for (int i=0;i<n;++i)
		cin>>a[i];

	//sdt deviation
	double sd =0;
	int sumXsquare =0, sumx =0;
	for(int i=0;i<n;++i)
	{sumx+=a[i];
	sumXsquare += a[i]*a[i];
	}
	sd = (1.0/(n-1))*(sumXsquare-((1.0/n)*(sumx*sumx)));

	cout<<"Standard Deviation = "<<setprecision(4)<<sd<<endl;


return 0;
}

Open in new window

Comment
Watch Question

CERTIFIED EXPERT

Commented:
Hi pgmerLA,

IMO you 'n' instead of (n-1) at '... sumXsquare-((1.0/n)...' - shouldn't this be '... sumXsquare-((1.0/(n-1)) ...'?

ZOPPO
CERTIFIED EXPERT
Top Expert 2009
Commented:
Unlock this solution with a free trial preview.
(No credit card required)
Get Preview
CERTIFIED EXPERT

Commented:
Just some arithmetic to show equivalences:

If sigma = sqrt( Sum((xi - mu)²) / n )
then
n sigma²
= Sum(  (xi - mu)²  )
= sum( xi² - 2 xi mu + mu² )
= sum(xi²) - 2mu sum(xi) + mu² * sum(1)
= sum(xi²) - 2mu sum(xi) + n mu²

But mu = sum(xi)/n
==> sum(xi) = n mu

Then
n sigma² = Sum(  (xi - mu)²  )
= sum(xi²) - 2mu sum(xi) + n mu²
= sum(xi²) - 2mu  (n mu)  + n mu²
= sum(xi²) - 2 n mu²    + n mu²
= sum(xi²) - n mu²

sigma² = ( sum(xi²) - n mu² )/n = ( sum(xi²)/n - mu² )
sigma = sqrt( sum(xi²)/n - mu² )


The (n-1) term in the OP (instead of n) is related to a particular method of sampling populations IIRC.
CERTIFIED EXPERT
Top Expert 2009

Commented:
>> Just some arithmetic to show equivalences:

You put a bit more effort into it than me ;)

That would mean that the formula from the question (assuming the second (n-1) was supposed to be n) is meant to calculate the sample variance, and not the standard deviation. In which case, 0.8 is the right answer.
Or, assuming that the sqrt got lost while copy-pasting the formula, it would be meant to calculate the sample standard deviation. In which case 0.89 is the right answer.

Neither of these is the standard deviation though (as I mentioned earlier). So, if you actually want to calculate the standard deviation, you'll have to use the formula I mentioned in my previous post, and you should get the result 0.81650
CERTIFIED EXPERT
Top Expert 2009

Commented:
@pgmerLA : could you explain how that post (http:#35465466) answers your question, please ? It seems I completely misunderstood what your problem was. It appeared to me that your question was about what you were doing wrong in the code, and why you were getting 0.8 as the result.

Author

Commented:
@Infinity08:I added sqrt to my formula and it worked. I actually wanted to give you the points. I did too fast.
How can I retract it?
CERTIFIED EXPERT
Top Expert 2009

Commented:
>> How can I retract it?

You can click the "Request Attention" button, and ask a moderator to re-open the question.

Thanks for clarifying :)
Unlock the solution to this question.
Thanks for using Experts Exchange.

Please provide your email to receive a free trial preview!

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.