【问题标题】:Statistical analysis of distributed data values in JavaJava中分布式数据值的统计分析
【发布时间】:2022-01-23 23:50:33
【问题描述】:

我正在用 Java 编写一个程序,它输出大致遵循钟形曲线分布的距离 List<Double>。从这些数据中,我需要生成两个值 A 和 B,它们遵循与平均值 X 的特定标准差的分布,一个高于平均值,一个低于平均值。分布可能不是对称的,但我很乐意假设它是出于我的目的。这些值 A 和 B 会比我目前获取数据集最小值和最大值的方法更好,该方法很容易受到随机异常值的影响,因此并不总是代表分布中的特定概率。我将如何生成这些值,A 和 B?我应该在 Stats 堆栈交换中问这个吗?非常感谢任何帮助!

【问题讨论】:

  • 域内的任何值 A < μ - K δ 和任何值 B > μ + K δ 都符合要求,所以我当然不明白你需要计算什么。

标签: java list statistics


【解决方案1】:

我应该在 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_sumdouble 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;

希望这会有所帮助!

【讨论】:

  • 哇,这正是我想要的!惊人的答案!非常感谢!
猜你喜欢
  • 2013-04-02
  • 2012-08-11
  • 1970-01-01
  • 1970-01-01
  • 2015-05-27
  • 2011-11-05
  • 2015-08-08
  • 2012-07-31
  • 1970-01-01
相关资源
最近更新 更多