我应该在 Stats 堆栈交换中问这个吗?
不,我们可以在这里做!
统计数据
首先,我们需要确定我们想要做什么。 A 和 B 是均值两侧的值,具有特定的标准差。
- 召回率,标准差,只是方差的平方根
- 方差,由
sum((x[i] - mean)^2) / x.length计算
- 因此,我们还需要平均值,即
sum(x[i]) / x.length
计算出标准偏差后,如果将其乘以 1,它将是从平均值到 B 的距离,因此 B 将是该值加上平均值。对 A 的值使用负数(如果低于平均值)。
代码
所以,我们已经确定统计数据的数据类型是List,所以我将其适配为Lists的使用。
首先我们需要遍历数据列表,我们称它为 List x。 我假设它已经填充了数据。
我们还需要一些变量,让我们定义平均值:double mean,标准差:double stdev 和两个辅助变量来保持总和:double sqr_sum 和 double data_sum。
现在,我们将首先计算平均值:
for (int i; i < x.size(); i++){
data_sum += x[i];
}
mean = data_sum / x.size();
最后,我们应该开始计算平方和,最终计算方差! 我还将在这里定义另一个变量“variance”(data_var)以使其更容易。
for (int i; i < x.size(); i++){
sqr_sum += Math.pow(x[i] - mean, 2);
}
data_var = sqr_sum / x.size(); // Note, in statistics, depending on what data this is, you should use x.size() for populations, but x.size()-1 for sample data.
stdev = Math.sqrt(data_var);
...你有它! x 数据的标准差。
如果你想获得 B(或 A),你可以简单地使用:
double dev_A = -1; // How far from the mean we want A to be.
double dev_B = 1; // How far from the mean we want B to be.
double a = dev_A * stdev + mean;
double b = dev_B * stdev + mean;
希望这会有所帮助!