【问题标题】:Scipy Normaltest how is it used?Scipy Normaltest是如何使用的?
【发布时间】:2012-10-02 02:01:12
【问题描述】:

我需要在 scipy 中使用 normaltest 来测试数据集是否为正态分布。但我似乎找不到任何如何使用scipy.stats.normaltest 的好例子。

我的数据集有超过 100 个值。

【问题讨论】:

    标签: python scipy


    【解决方案1】:
    In [12]: import scipy.stats as stats
    
    In [13]: x = stats.norm.rvs(size = 100)
    
    In [14]: stats.normaltest(x)
    Out[14]: (1.627533590094232, 0.44318552909231262)
    

    normaltest 返回卡方统计量的 2 元组和相关的 p 值。鉴于 x 来自正态分布的原假设,p 值表示将看到大(或更大)的卡方统计量的概率。

    如果 p-val 非常小,则意味着数据不太可能来自正态分布。例如:

    In [15]: y = stats.uniform.rvs(size = 100)
    
    In [16]: stats.normaltest(y)
    Out[16]: (31.487039026711866, 1.4543748291516241e-07)
    

    【讨论】:

    • 这里如何量化“非常小”?
    • 这是一个任意选择:stats.stackexchange.com/a/55693/842。在应用统计测试之前,请务必确定自己的重要性级别。
    【解决方案2】:

    首先我发现 scipy.stats.normaltest 几乎相同。 mstats 库用于掩码数组。可以将值标记为无效且不计入计算的数组。

    import numpy as np
    import numpy.ma as ma
    from scipy.stats import mstats
    
    x = np.array([1, 2, 3, -1, 5, 7, 3]) #The array needs to be larger than 20, just an example
    mx = ma.masked_array(x, mask=[0, 0, 0, 1, 0, 0, 0])
    z,pval = mstats.normaltest(mx)
    
    if(pval < 0.055):
        print "Not normal distribution"
    

    “传统上,在统计学中,您需要一个小于 0.05 的 p 值才能 拒绝原假设。” - http://mathforum.org/library/drmath/view/72065.html

    【讨论】:

    • 为什么是&lt; 0.055 而不是&lt; 0.05
    • 如果 p-val 非常小,则意味着数据不太可能来自正态分布。 0.05 是标准阈值,但为了更加确定,您可以提高确定性,例如 0.055 或其他值。它只是一个说是的阈值,它是一个正态分布。
    • Demz 将阈值提高到 0.055 将意味着数据来自正态分布的确定性降低。您可能希望将 p 值阈值降低到标准 0.05 以下,以减少错误拒绝分布是正态的零假设的机会。
    猜你喜欢
    • 2020-06-27
    • 2012-10-28
    • 2019-04-26
    • 1970-01-01
    • 2019-12-31
    • 1970-01-01
    • 2017-11-29
    • 2019-03-15
    • 1970-01-01
    相关资源
    最近更新 更多