Ari*_*ion 1 python statistics normal-distribution scipy
使用scipy.stats.norm生成的随机样本,然后运行通过scipy.stats.normaltest产生不同似地输出:
from scipy.stats import norm, normaltest
normaltest(norm.rvs(size=1000))
# (0.10435743048081543, 0.94915922246569517)
normaltest(norm.rvs(size=1000))
# (0.57583529133190114, 0.74982334089826597)
normaltest(norm.rvs(size=1000))
# (0.074086867327589984, 0.96363428027274967)
normaltest(norm.rvs(size=1000))
# (2.0817923824843461, 0.35313806086602029)
normaltest(norm.rvs(size=1000))
# (0.25177398640139054, 0.88171448088503002)
normaltest(norm.rvs(size=1000))
# (2.5213062252950227, 0.2834688289515595)
normaltest(norm.rvs(size=1000))
# (2.0550957310741165, 0.35788346385342579)
normaltest(norm.rvs(size=1000))
# (4.5722298301301869, 0.10166065590209576)
normaltest(norm.rvs(size=1000))
# (3.0060164141422421, 0.22245994699827343)
normaltest(norm.rvs(size=1000))
# (1.8870291791486471, 0.38925734860089078)
normaltest(norm.rvs(size=1000))
# (0.24931060262844901, 0.88280115054104014)
Run Code Online (Sandbox Code Playgroud)
其中只有一个的p值<0.05.这似乎真的破了.我错过了什么吗?
normaltest返回2元组.第一个值是卡方统计量,第二个值是p值.
所以在上面的例子中,实际上没有p值<0.05.
文档字符串normaltest 可能不正确 ; 通过查看源代码(/usr/share/pyshared/scipy/stats/stats.py)来证实我的主张:
def normaltest(a, axis=0):
a, axis = _chk_asarray(a, axis)
s,p = skewtest(a,axis)
k,p = kurtosistest(a,axis)
k2 = s*s + k*k
return k2, chisqprob(k2,2)
Run Code Online (Sandbox Code Playgroud)
(编辑:注意docstring 从最新版本开始是正确的scipy.stats.)
它完全没有异常!
p值<0.05应该在约5%的时间内发生.尝试运行该命令1000次,看看它是否为真:
In [67]: import scipy.stats as stats
In [69]: pvals = [stats.normaltest(stats.norm.rvs(size=1000))[1] for i in range(1000)]
In [71]: sum([1 for p in pvals if p < 0.05])/1000.0
Out[71]: 0.053
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1392 次 |
| 最近记录: |