正态性分数

数据挖掘 统计数据 普通的 直方图
2022-03-05 18:26:35

具有以下分布(实际和预测),Hist 1 到 3(从左到右)。 在此处输入图像描述

我想得到一个 0-1 范围内的分数,说明实际分布与正常分布的接近程度。我发现了几个统计正态性检验:

  • 夏皮罗-威尔克测试
  • D'Agostino 的 K^2 测试

我的数据集很大,因此我决定检查偏斜和峰度统计数据并得到以下结果:

hist-1 Skewness is 0.028386209063816035 and Kurtosis is 2.4224694251429764 <-- Most normal
hist-2 Skewness is 3.7702212103585246 and Kurtosis is 15.214567975037294
hist-3 Skewness is -0.40471550878367296 and Kurtosis is 1.4106438684701157

如何使用这些参数计算 0-1 之间的分数?或者有没有更好的方法来计算分数?

更新: 正如建议的那样,我已经尝试过stats.kstest(data,"norm"),但是结果并没有区分分布之间的差异,或者我可能遗漏了什么?

Hist-1 - KstestResult(statistic=0.9274310194094191, pvalue=0.0)
Hist-2 - KstestResult(statistic=0.9999966401777812, pvalue=0.0)
Hist-3 - KstestResult(statistic=0.9911610021388533, pvalue=0.0)
2个回答

您可以使用Kolmogorov-Smirnov statistic,它通过构造位于中,因为它是比较的两个分布的 cdf 之间的逐点差异的上确界。[0,1]

顺便说一句,作为非参数,您还可以使用相同的测试来比较您的实际分布和预测分布。

首先,在这种情况下仅使用统计检验来获取 p 值是错误的。为什么 ?因为 p 值仅表示显着性水平,而不是差异的数量或幅度。换句话说,在运行两次统计测试之后,不能说 0.00001 的 p 值与 0.001 的 p 值相比更合适——即使两者都低于普遍接受的阈值。这意味着,具有最小 p 值的测试与第二个测试相比有更高的机会显着不同,但不会告诉您差异有多大。因此,您总是需要一个效果大小。再次没有说第一次测试有较小的错误!在这里你可以读到为什么这里的 p 值是不够的。当您搜索时,您可以找到大量其他帖子"p-value vs effect size"

由于您是在对它们进行排名之后,因此我的建议是:

为了获得更糟糕的直方图,您生成随机数据

data = np.random.normal(0, 0.5, 1000)

那么你适合正态分布

mean, var  = scipy.stats.distributions.norm.fit(data)

然后你计算例如错误MSE基本上,从您的数据中选择一个 x,在正态分布中找到 y,然后从您自己的 y 中减去。从这里您将拥有您的maximum level of error.

然后对于您的每个直方图,您都适合正态分布并得到如上所述的错误。现在您的拟合误差具有可比性,误差最小的直方图是最佳拟合。您可以使用 p 值来表明它是显着的。也许 wilcoxon 测试非参数测试可能是一种选择。由于您不知道您的数据是否正常,因此您不能使用任何具有正态分布假设的测试。

无论如何,要将您的值绑定到 [0, 1] 那么您必须标准化您的错误。这意味着,您最差的错误应该是 0(来自随机数)和最好的 1(可能是完美匹配)。