Scipy Normaltest如何使用?

The*_*emz 43 python scipy

如果数据集是正态分布,我需要在scipy中使用normaltest进行测试.但我似乎无法找到任何好的例子如何使用scipy.stats.normaltest.

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

unu*_*tbu 71

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)
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

  • 我们如何在这里量化"非常小"? (8认同)
  • 这是一个任意选择:http://stats.stackexchange.com/a/55693/842。只需确保在应用统计测试之前*确定您的显着性水平是多少。 (3认同)

The*_*emz 12

首先我发现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"
Run Code Online (Sandbox Code Playgroud)

"传统上,在统计学中,你需要一个小于0.05的p值来拒绝零假设." - http://mathforum.org/library/drmath/view/72065.html

  • 为什么`<0.055`而不是"<0.05"? (10认同)
  • Demz将阈值提高到0.055意味着数据来自正态分布的确定性较低.您可能希望将p值阈值降低到标准0.05以下,以减少错误地拒绝分布正常的零假设的可能性. (3认同)
  • 如果 p-val 非常小,则意味着数据不太可能来自正态分布。0.05 是标准阈值,但为了更加确定,您可以提高确定性,例如 0.055 或其他值。它只是说是的,它是正态分布的门槛。 (2认同)