SciPy - 统计

  • 简述

    所有的统计功能都位于子包中scipy.stats并且可以使用这些函数获得相当完整的列表info(stats)功能。可用的随机变量列表也可以从docstring对于 stats 子包。该模块包含大量概率分布以及不断增长的统计函数库。
    每个单变量分布都有自己的子类,如下表所述 -
    序号 类别和说明
    1
    rv_continuous
    用于子类化的通用连续随机变量类
    2
    rv_discrete
    用于子类化的通用离散随机变量类
    3
    rv_histogram
    生成由直方图给出的分布
  • 正态连续随机变量

    随机变量 X 可以取任意值的概率分布是连续随机变量。位置 (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 class, 这binom object从它继承了一组通用方法,并使用特定于该特定发行版的详细信息来完善它们。让我们考虑下面的例子。
    
    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 package如下表所述。
    序号 功能说明
    1
    describe()
    计算传递数组的几个描述性统计数据
    2
    gmean()
    沿指定轴计算几何平均值
    3
    hmean()
    计算沿指定轴的调和平均值
    4
    kurtosis()
    计算峰度
    5
    mode()
    返回模态值
    6
    skew()
    测试数据的偏度
    7
    f_oneway()
    执行单向方差分析
    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检验

    让我们了解 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并进行相同的测试。