Scipy 简明教程
SciPy - Stats
所有统计函数都位于子程序包 scipy.stats 中,使用 info(stats) 函数可以获得这些函数的相当完整的列表。统计子函数包中可用的随机变量的列表也可以从 docstring 得到。该模块包含大量概率分布以及越来越丰富的统计函数库。
如以下表格所述,每个单变量分布都有自己从属的子类——
Sr. No. |
Class & Description |
1 |
rv_continuous 用于子类化的泛型连续随机变量类 |
2 |
rv_discrete 用于子类化的泛型离散随机变量类 |
3 |
rv_histogram 根据直方图生成分布 |
Normal Continuous Random Variable
随机变量 X 可以获得任何值的概率分布是连续随机变量。位置(loc)关键字指定均值。 scale(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])
以上输出不可复现。要生成相同的随机数,请使用 seed 函数。
Uniform Distribution
可以使用 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. ])
Descriptive Statistics
最小值、最大值、均值和方差等基本统计信息以 NumPy 数组作为输入,并返回相应的结果。 scipy.stats package 中可用的几个基本统计函数在以下表格中进行了解释。
Sr. No. |
Function & Description |
1 |
describe() 计算传递数组的多种描述性统计数据 |
2 |
gmean() 沿指定轴计算几何平均值 |
3 |
hmean() 沿指定轴计算调和平均值 |
4 |
kurtosis() Computes the kurtosis |
5 |
mode() Returns the modal value |
6 |
skew() 测试数据的偏度 |
7 |
f_oneway() Performs a 1-way ANOVA |
8 |
iqr() 沿指定轴计算数据的四分位数范围 |
9 |
zscore() 计算样本中每个值相对于样本均值和标准差的 Z 分数 |
10 |
sem() 计算输入数组中值标准误差(或测量标准误差) |
其中几个函数在 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-test
让我们了解 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]))
Comparing two samples
在以下示例中,有两个样本,它们可以来自相同或不同分布,我们希望测试这些样本是否具有相同的统计特性。
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 中使用不同的值并测试相同的内容。