SciPy - 统计


所有统计函数都位于子包scipy.stats中,并且可以使用info(stats)函数获得这些函数的相当完整的列表。还可以从stats 子包的文档字符串中获取可用随机变量的列表。该模块包含大量的概率分布以及不断增长的统计函数库。

每个单变量分布都有自己的子类,如下表所述 -

先生。没有。 类别和描述
1

rv_连续

用于子类化的通用连续随机变量类

2

rv_离散

用于子类化的通用离散随机变量类

3

rv_直方图

生成由直方图给出的分布

正态连续随机变量

随机变量X可以取任意值的概率分布是连续随机变量。location (loc) 关键字指定平均值。尺度(scale)关键字指定标准差。

作为rv_continuous类的实例,norm对象继承了通用方法的集合,并使用特定于该特定分布的详细信息来完成它们。

要计算多个点的 CDF,我们可以传递一个列表或一个 NumPy 数组。让我们考虑下面的例子。

from scipy.stats import norm
import numpy as np
print norm.cdf(np.array([1,-1., 0, 1, 3, 4, -2, 6]))

上述程序将生成以下输出。

array([ 0.84134475, 0.15865525, 0.5 , 0.84134475, 0.9986501 ,
0.99996833, 0.02275013, 1. ])

为了找到分布的中位数,我们可以使用百分比点函数 (PPF),它是 CDF 的逆函数。让我们通过下面的例子来理解。

from scipy.stats import norm
print norm.ppf(0.5)

上述程序将生成以下输出。

0.0

要生成随机变量序列,我们应该使用 size 关键字参数,如下例所示。

from scipy.stats import norm
print norm.rvs(size = 5)

上述程序将生成以下输出。

array([ 0.20929928, -1.91049255, 0.41264672, -0.7135557 , -0.03833048])

上述输出不可重现。要生成相同的随机数,请使用种子函数。

均匀分布

可以使用uniform函数生成均匀分布。让我们考虑下面的例子。

from scipy.stats import uniform
print uniform.cdf([0, 1, 2, 3, 4, 5], loc = 1, scale = 4)

上述程序将生成以下输出。

array([ 0. , 0. , 0.25, 0.5 , 0.75, 1. ])

构建离散分布

让我们生成一个随机样本并将观察到的频率与概率进行比较。

二项分布

作为rv_discrete 类的实例,binom 对象继承了通用方法的集合,并使用特定于此特定分布的详细信息来完成它们。让我们考虑下面的例子。

from scipy.stats import uniform
print uniform.cdf([0, 1, 2, 3, 4, 5], loc = 1, scale = 4)

上述程序将生成以下输出。

array([ 0. , 0. , 0.25, 0.5 , 0.75, 1. ])

描述性统计

Min、Max、Mean 和 Variance 等基本统计数据将 NumPy 数组作为输入并返回各自的结果。下表描述了scipy.stats 包中可用的一些基本统计函数。

先生。没有。 功能说明
1

描述()

计算传递数组的几个描述性统计数据

2

平均()

计算沿指定轴的几何平均值

3

hmean()

计算沿指定轴的调和平均值

4

峰度()

计算峰度

5

模式()

返回模态值

6

倾斜()

测试数据的偏度

7

f_oneway()

执行单向方差分析

8

IQR()

计算沿指定轴的数据的四分位数范围

9

zscore()

计算样本中每个值相对于样本均值和标准差的 z 分数

10

扫描电镜()

计算输入数组中值的平均值(或测量标准误差)的标准误差

其中几个函数在scipy.stats.mstats中有类似的版本,适用于屏蔽数组。让我们通过下面给出的例子来理解这一点。

from scipy import stats
import numpy as np
x = np.array([1,2,3,4,5,6,7,8,9])
print x.max(),x.min(),x.mean(),x.var()

上述程序将生成以下输出。

(9, 1, 5.0, 6.666666666666667)

T检验

让我们了解 T 检验在 SciPy 中有何用处。

ttest_1samp

计算一组分数平均值的 T 检验。这是对原假设的双向检验,即独立观测样本“a”的预期值(平均值)等于给定总体平均值popmean。让我们考虑下面的例子。

from scipy import stats
rvs = stats.norm.rvs(loc = 5, scale = 10, size = (50,2))
print stats.ttest_1samp(rvs,5.0)

上述程序将生成以下输出。

Ttest_1sampResult(statistic = array([-1.40184894, 2.70158009]),
pvalue = array([ 0.16726344, 0.00945234]))

比较两个样本

在下面的例子中,有两个样本,它们可以来自相同的分布,也可以来自不同的分布,我们想要测试这些样本是否具有相同的统计特性。

ttest_ind - 计算两个独立分数样本平均值的 T 检验。这是对原假设的双边检验,即两个独立样本具有相同的平均(预期)值。该检验假设总体默认具有相同的方差。

如果我们观察来自相同或不同群体的两个独立样本,我们可以使用此检验。让我们考虑下面的例子。

from scipy import stats
rvs1 = stats.norm.rvs(loc = 5,scale = 10,size = 500)
rvs2 = stats.norm.rvs(loc = 5,scale = 10,size = 500)
print stats.ttest_ind(rvs1,rvs2)

上述程序将生成以下输出。

Ttest_indResult(statistic = -0.67406312233650278, pvalue = 0.50042727502272966)

您可以使用长度相同但平均值不同的新数组进行测试。在loc中使用不同的值并测试相同的值。