代码欲计算Sample Standard Deviation却得到Population Standard Deviation,求问题原因
问题出在这两个细节上!
嘿,我一眼就瞅到问题所在啦,咱们一步步捋清楚:
先搞懂核心差异
样本标准差和总体标准差的关键区别在方差的计算分母:
- 总体标准差:方差除以样本总数
n - 样本标准差:方差除以
n-1(这是为了修正样本对总体的偏差,业内叫贝塞尔校正)
你的代码里有两个小疏漏:
1. 分母用成了n而非n-1
你现在计算方差的代码是:
std = (mm1+mm2+mm3)/3;
这里除以3(也就是样本数n=3),算出来的是总体方差,要改成除以3-1=2才能得到样本方差。
2. 少了开平方的关键步骤
标准差是方差的平方根!你现在算的只是方差,不管是样本还是总体,最后都要对结果取根号才能得到标准差。
修改后的代码示例
public void compute(View view) { no1 = Double.parseDouble(et1.getText().toString()); no2 = Double.parseDouble(et2.getText().toString()); no3 = Double.parseDouble(et3.getText().toString()); m = (no1 + no2 + no3)/3; mm1= (no1-m); mm1 = mm1*mm1; mm2= (no2-m); mm2 = mm2*mm2; mm3= (no3-m); mm3 = mm3*mm3; // 先计算样本方差:除以n-1=2 double sampleVariance = (mm1+mm2+mm3)/(3-1); // 开平方得到样本标准差 double sampleStd = Math.sqrt(sampleVariance); tv1.setText(String.valueOf(sampleStd)); }
这样调整后,就能得到正确的样本标准差啦!
内容的提问来源于stack exchange,提问作者Aljohn Dela CRUZ
相关产品推荐
相关产品推荐

