Python scipy.stats.normaltest()测试numpy.random.normal()的正常性

Python scipy.stats.normaltest()测试numpy.random.normal()的正常性,python,numpy,scipy,Python,Numpy,Scipy,我使用scipy.stats.normaltest()测试numpy.random.normal()生成的数据的正常性。代码如下: from numpy import random from scipy import stats for i in range(0, 10): d = numpy.random.normal(size=50000) n = scipy.stats.normaltest(d) print n 结果如下: (1.554124262066523, 0.45

我使用scipy.stats.normaltest()测试numpy.random.normal()生成的数据的正常性。代码如下:

from numpy import random
from scipy import stats

for i in range(0, 10):
  d = numpy.random.normal(size=50000)
  n = scipy.stats.normaltest(d)
  print n
结果如下:

(1.554124262066523, 0.45975472830684272)
(2.4982341884494002, 0.28675786530134384)
(2.0918010143075256, 0.35137526093176125)
(0.90623072927961634, 0.63564479846313271)
(2.3015160217986934, 0.31639684620041014)
(3.4005006481463624, 0.18263779969208352)
(2.5241123233368978, 0.28307138716898311)
(12.705060069198185, 0.001742333391388526)
(0.83646951793409796, 0.65820769012847313)
(0.12008522338293379, 0.94172440425950443)
根据文档,normaltest()返回的值的第二个元素是


如果我的理解是正确的,它表明输入数据处于正态分布的可能性有多大。我原以为上述代码生成的所有pvalue都非常接近1。但是,其中一些可以小到0.001742333391388526。这里出了什么问题?

有人会来对我大喊大叫,说这不是p值的正确定义,但作为一种事后估计,你可以期望得到一个低至x的概率为x的p值。因此,大约每575次尝试,就会得到一个低至0.00174的p值

import numpy as np
from scipy.stats import normaltest
import matplotlib.pyplot as plt
%matplotlib inline

L=[]
for i in range(0, 10000):
    d = np.random.normal(size=50000)
    n = normaltest(d)
    L.append(n.pvalue)


plt.hist(L,bins=20)
plt.show()

有人会来对我大喊大叫,说这不是p值的正确定义,但作为一个粗略估计,你可以期望得到一个低至x的p值,概率为x。因此,大约每575次尝试,就会得到一个低至0.00174的p值

import numpy as np
from scipy.stats import normaltest
import matplotlib.pyplot as plt
%matplotlib inline

L=[]
for i in range(0, 10000):
    d = np.random.normal(size=50000)
    n = normaltest(d)
    L.append(n.pvalue)


plt.hist(L,bins=20)
plt.show()

如果我的理解是正确的,它表明输入数据处于正态分布的可能性有多大。我原以为上述代码生成的所有pvalue都非常接近1

恐怕你的理解是错误的。在零假设下(即,假设数据实际为正态分布),得到至少与观测结果一样极端的结果的概率。它不需要接近1。通常,大于0.05的p值被认为是不显著的,这意味着正态性没有被测试推翻

正如Victor Chubukov所指出的,即使数据真的是正态分布的,你也可以很偶然地得到较低的p值

统计假设检验相当复杂,可能看起来有点违反直觉。如果你需要知道更多的细节,是获得更详细答案的地方

如果我的理解是正确的,它表明输入数据处于正态分布的可能性有多大。我原以为上述代码生成的所有pvalue都非常接近1

恐怕你的理解是错误的。在零假设下(即,假设数据实际为正态分布),得到至少与观测结果一样极端的结果的概率。它不需要接近1。通常,大于0.05的p值被认为是不显著的,这意味着正态性没有被测试推翻

正如Victor Chubukov所指出的,即使数据真的是正态分布的,你也可以很偶然地得到较低的p值


统计假设检验相当复杂,可能看起来有点违反直觉。如果你需要知道更多的细节,是获得更详细答案的地方。

没什么好大喊大叫的,AFAICS。如果分布是正确的,p值在零假设下是均匀分布的。如果分布正确,则p值在零假设下均匀分布。