47

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

我的数据集有 100 多个值。

4

2 回答 2

75
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)
于 2012-10-11T12:28:19.473 回答
13

首先我发现 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

于 2012-10-11T12:24:57.740 回答