📅  最后修改于: 2020-11-05 04:35:36             🧑  作者: Mango
所有统计功能均位于子包scipy.stats中,可以使用info(stats)函数获得这些功能的相当完整的清单。也可以从stats子软件包的docstring中获取可用的随机变量列表。该模块包含大量的概率分布以及不断增长的统计功能库。
每个单变量分布都有自己的子类,如下表所示-
Sr. No. | Class & Description |
---|---|
1 |
rv_continuous A generic continuous random variable class meant for subclassing |
2 |
rv_discrete A generic discrete random variable class meant for subclassing |
3 |
rv_histogram Generates a distribution given by a histogram |
随机变量X可以取任何值的概率分布是连续随机变量。 location(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])
以上输出不可复制。要生成相同的随机数,请使用种子函数。
使用均一函数可以生成均一分布。让我们考虑以下示例。
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包中可用的一些基本统计功能。
Sr. No. | Function & Description |
---|---|
1 |
describe() Computes several descriptive statistics of the passed array |
2 |
gmean() Computes geometric mean along the specified axis |
3 |
hmean() Calculates the harmonic mean along the specified axis |
4 |
kurtosis() Computes the kurtosis |
5 |
mode() Returns the modal value |
6 |
skew() Tests the skewness of the data |
7 |
f_oneway() Performs a 1-way ANOVA |
8 |
iqr() Computes the interquartile range of the data along the specified axis |
9 |
zscore() Calculates the z score of each value in the sample, relative to the sample mean and standard deviation |
10 |
sem() Calculates the standard error of the mean (or standard error of measurement) of the values in the input array |
其中一些函数在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检验在SciPy中的作用。
计算一组得分的平均值的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中使用其他值并测试相同的值。