zoukankan      html  css  js  c++  java
  • Python怎么检验数据的正态分布

    在对数据建模前,很多时候我们需要对数据做正态性检验,进而通过检验结果确定下一步的分析方案。下面介绍 Python 中常用的几种正态性检验方法:
    scipy.stats.kstest

    kstest 是一个很强大的检验模块,除了正态性检验,还能检验 scipy.stats 中的其他数据分布类型

    kstest(rvs, cdf, args=(), N=20, alternative=’two_sided’, mode=’approx’, **kwds)

    对于正态性检验,我们只需要手动设置三个参数即可:

    rvs:待检验的数据
    cdf:检验方法,这里我们设置为‘norm’,即正态性检验
    alternative:默认为双尾检验,可以设置为‘less’或‘greater’作单尾检验
    
    >>> import numpy as np
    >>> from scipy.stats import kstest
    >>> x = np.linspace(-15, 15, 9)
    >>> kstest(x, 'norm')
    (0.44435602715924361, 0.038850142705171065)
    

    输出结果中第一个为统计数,第二个为P值

    具体见官方文档 scipy.stats.kstest
    scipy.stats.shapiro

    与 kstest 不同,shapiro 是专门用来做正态性检验的模块
    注意:shapiro 不适合做样本数>5000的正态性检验,检验结果的P值可能不准确

    scipy.stats.shapiro(x, a=None, reta=False)

    一般我们只用 x 参数就行,x 即待检验的数据

    >>> from scipy import stats
    >>> np.random.seed(12345678)
    >>> x = stats.norm.rvs(loc=5, scale=3, size=100)
    >>> stats.shapiro(x)
    (0.9772805571556091, 0.08144091814756393)
    

    输出结果中第一个为统计数,第二个为P值

    具体见官方文档 scipy.stats.shapiro
    scipy.stats.normaltest

    normaltest 也是专门做正态性检验的模块

    scipy.stats.normaltest(a, axis=0, nan_policy=’propagate’)

    这里的三个参数都有必要看一下:

    a:待检验的数据
    axis:默认为0,表示在0轴上检验,即对数据的每一行做正态性检验,我们可以设置为 axis=None 来对整个数据做检验
    nan_policy:当输入的数据中有空值时的处理办法。默认为 ‘propagate’,返回空值;设置为 ‘raise’ 时,抛出错误;设置为 ‘omit’ 时,在计算中忽略空值。
    
    >>> import numpy as np
    >>> from scipy.stats import normaltest
    >>> x = np.random.randn(10, 20)
    >>> normaltest(x, axis=None)
    >>> NormaltestResult(statistic=0.3582062593239369, pvalue=0.83601967652440512)
    

    输出结果中第一个为统计数,第二个为P值

    具体见官方文档 scipy.stats.normaltest
    scipy.stats.anderson

    anderson 是修改版的 kstest,说是增强版也不为过。也可以做多种分布的检验,默认的检验时正态性检验。
    
    scipy.stats.anderson(x, dist=’norm’)
    
    参数这里就不多说了,但对输出结果说明一下:
    anderson 有三个输出值,第一个为统计数,第二个为评判值,第三个为显著性水平, 评判值与显著性水平对应
    对于正态性检验,显著性水平为:15%, 10%, 5%, 2.5%, 1%
    

    import numpy as np
    from scipy.stats import anderson
    x = np.linspace(-15, 15, 9)
    anderson(x)
    AndersonResult(statistic=0.13676646631470213, critical_values=array([ 0.507, 0.578, 0.693, 0.808, 0.961]), significance_level=array([ 15. , 10. , 5. , 2.5, 1. ]))




    转自:https://blog.csdn.net/QimaoRyan/article/details/72861387 
  • 相关阅读:
    创业成功关键在于专注“核心竞争力”(外包有时候能大大提高开发周期)
    华为为什么不设事业部制?
    雷军三年花10亿造“芯” 营销还是“不服气”(外界对雷军做芯片的三种猜测,以及雷军本人的看法)
    Windows完成端口与猪肉佬
    分布式锁实现
    Quartz(GUI)图形界面程序----Quartz Web
    Quartz.net开源作业调度
    js 闭包
    Nancy
    MVC—WebAPI(调用、授权)
  • 原文地址:https://www.cnblogs.com/shanghongyun/p/11798440.html
Copyright © 2011-2022 走看看