Java:如何通过编程确定数据集不符合正态分布?

3

在Java程序中,我如何确定我拥有的数据集是否遵循正态分布?

这是可能的吗?

是否有API或算法可以确定这一点?


2
你正在深入研究统计学,语言几乎不重要。你还需要决定要使用什么标准,因为会有误差。你想如何分类可疑的数据集?你想确保包括几乎所有正态分布,还是拒绝几乎所有非正态分布,或者介于两者之间?你认为数据集代表正态分布的先验概率是多少? - David Thornley
4个回答

5
这里有两个问题:如何确定分布是否正常,以及如何在Java中实现。正如第一个链接所展示的那样,从正式到非正式,你想要确认你正在查看正常数据的程度是不同的。第二个链接表明,虽然没有标准的Java统计分析包,但有许多其他的实现方式。

4
这是一个相当困难的统计问题,如果你不是统计专家,它看起来似乎非常简单。你的目标显然是确定数据是否可能来自于任何正态分布,而不是具有预先指定的均值和方差的分布。最好的方法可能是使用D'Agostino test,该测试基于测量分布的偏度峰度,并将其与正态性下的期望进行比较。
就Java实现而言,我不知道有没有,尽管我不经常使用Java。如果有的话,我会稍微惊讶一下,因为这是一个相对较为晦涩的统计函数,而Java并不是最常用于统计学的语言。然而,如果您已经有计算偏度、峰度和卡方分布CDF函数的功能,我的D语言实现(在此文件中搜索dAgostinoK())可能可以轻松地转换成Java。

@dsimcha:+1 真的,这比我想象中的难。我会学习这些好链接的。 - LowLevelAbstraction

3

1
虽然您可以使用卡方检验,但我不建议这样做。卡方检验最适用于分类/离散数据。我建议使用许多专门为正态分布设计的测试之一,如msw上面链接中所述。 - dimatura

0

最简单的方法是:“如果我有n > 30个数据点,那么它通过中心极限定理近似于正态分布。” ;)

正如其他人提到的,确定数据点是否来自正态分布要困难得多。


2
我认为你的意思是:“如果我有n>30个独立同分布的数据点,那么由这些点的总和组成的随机变量近似服从正态分布”。任意一组30个点都可能是任何东西。 - dimatura

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接