Kolmogorov-Smirnov 测试奇怪的输出

机器算法验证 拟合优度 配件 kolmogorov-smirnov 测试 scipy
2022-04-09 17:12:03

我正在尝试将我的数据拟合到连续 PDF 之一(我建议它是伽马或对数正态分布的)。数据由大约 6000 个正浮点数组成。但是 Kolmogorov-Smirnov 检验的结果完全驳斥了我提供非常低的 p 值的期望。

数据经验分布

在此处输入图像描述

配电配件 在此处输入图像描述

Python代码:

import numpy
import sys
import json
import matplotlib.pyplot as plt
import scipy
from scipy.stats import *

dist_names = ['gamma', 'lognorm']
limit = 30

def distro():
    #input file
    with open(sys.argv[1]) as f:
        y = numpy.array(json.load(f))

    #output
    results = {}
    size = y.__len__()
    x = scipy.arange(size)
    h = plt.hist(y, bins=limit, color='w')
    for dist_name in dist_names:
        dist = getattr(scipy.stats, dist_name)
        param = dist.fit(y)
        goodness_of_fit = kstest(y, dist_name, param)
        results[dist_name] = goodness_of_fit
        pdf_fitted = dist.pdf(x, *param) * size
        plt.plot(pdf_fitted, label=dist_name)
        plt.xlim(0, limit-1)
        plt.legend(loc='upper right')
    for k, v in results.iteritems():
        print(k, v)
    plt.show()

这是输出:

  • p 值几乎为 0 'lognorm', (0.1111486360863001, 1.1233698406822002e-66)
  • p 值为 0 'gamma', (0.30531260123096859, 0.0)

这是否意味着我的数据不符合伽马分布?..但它们看起来很相似......

1个回答

是的。根据该标准,这些分布都不适合您的数据。您可以尝试其他一些分布,但令我印象深刻的是(最终)真实数据不太可能来自任何经过充分研究的分布,并且您有 6k 数据,因此即使是微不足道的差异也会使测试“显着”。(有关这些方面的更多信息,请参阅:正态性测试“基本上没用”吗?

另一方面,您可以查看您的数据与您感兴趣的分布的相关程度,而不是检查您的数据是否与这些分布有显着差异——对于您的目的,拟合可能“足够好”。(有关这些方面的更多信息,请参阅我的答案:根据预期分布测试随机生成的数据。)