Statistics ( scipy.stats)

TOC \o "1-3" \h \z \u Statistics (scipy.stats) 1

介绍 1

随机变量 2

获得帮助 2

通用方法 4

位移与缩放 6

形态参数 8

冻结分布 9

广播 10

离散分布的特殊之处 11

分布拟合 13

性能问题与注意事项 13

遗留问题 13

构造具体的分布 14

创建一个连续分布,继承rv_continuous类 14

继承rv_discrete类 16

样本分析 21

描述统计 21

T检验和KS检验 23

分布尾部 25

正态分布的特殊检验 28

比较两个样本 29

均值 30

对于两个不同的样本进行的KS检验 30

核密度估计 31

单元估计 31

多元估计 40

介绍

在这个教程我们讨论一部分scipy.stats模块的特性。这里我们的意图是提供给使用者一个关于这个包的实用性知识。我们推荐reference manual来介绍更多的细节。

注意:这个文档还在发展中。

随机变量

有一些通用的概率分布类被封装在continuous random variables以及discrete random variables中。有80多个连续性随机变量(RVs)以及10余个离散随机变量已经用这些类建立。同样,新的程序和分布可以被用户新建(如果你构造了一个,请提供它给我们帮助发展这个包)。

所有统计函数被放在子包scipy.stats中,且有这些函数的一个几乎完整的列表可以使用info(stats)获得。这个列表里的随机变量也可以从stats子包的docstring中获得介绍。

在接下来的讨论中,我们着重于连续性随机变量(RVs)。几乎所有离散变量也符合下面的讨论,但是我们也要指出一些区别在“离散分布的特殊之处”中。

获得帮助

所有分布可以使用help函数得到解释。为获得这些信息只需要使用像这样的简单调用:

>>>
>>> from scipy import stats
>>> from scipy.stats import norm
>>> print norm.__doc__
作为例子,我们用这种方式找分布的上下界
>>>
>>> print 'bounds of distribution lower: %s, upper: %s' % (norm.a,norm.b)
bounds of distribution lower: -inf, upper: inf

我们可以通过调用dir(norm)来获得关于这个(正态)分布的所有方法和属性。应该看到,一些方法是私有方法尽管其并没有以名称表示出来(比如它们前面没有以下划线开头),比如veccdf就只用于内部计算(试图使用那些方法将引发警告,因为它们可能会在后续开发中被移除)

为了获得真正的主要方法,我们列举冻结分布的方法(我们将在下文解释何谓“冻结分布”)

>>>
>>> rv = norm()
>>> dir(rv) # reformatted
['__class__', '__delattr__', '__dict__', '__doc__', '__getattribute__',
'__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__',
'__repr__', '__setattr__', '__str__', '__weakref__', 'args', 'cdf', 'dist',
'entropy', 'isf', 'kwds', 'moment', 'pdf', 'pmf', 'ppf', 'rvs', 'sf', 'stats']
最后,我们能通过内省获得所有的可用分布的信息。
>>>
>>> import warnings
>>> warnings.simplefilter('ignore', DeprecationWarning)
>>> dist_continu = [d for d in dir(stats) if
... isinstance(getattr(stats,d), stats.rv_continuous)]
>>> dist_discrete = [d for d in dir(stats) if
... isinstance(getattr(stats,d), stats.