Scipy統計函數
所有的統計函數都位於子包scipy.stats
中,並且可以使用info(stats)
函數獲得這些函數的完整列表。隨機變量列表也可以從stats
子包的docstring
中獲得。 該模塊包含大量的概率分佈以及不斷增長的統計函數庫。
每個單變量分佈都有其自己的子類,如下表所述 -
編號
類
描述
1
rv_continuous
用於子類化的通用連續隨機變量類
2
rv_discrete
用於子類化的通用離散隨機變量類
3
rv_histogram
生成由直方圖給出的分佈
正態連續隨機變量
隨機變量X可以取任何值的概率分佈是連續的隨機變量。 位置(loc
)關鍵字指定平均值。 比例(scale
)關鍵字指定標準偏差。
作爲rv_continuous
類的一個實例,規範對象從中繼承了一系列泛型方法,並通過特定於此特定分發的細節完成它們。
要計算多個點的CDF,可以傳遞一個列表或一個NumPy數組。 看看下面的一個例子。
from scipy.stats import norm
import numpy as np
cdfarr = norm.cdf(np.array([1,-1., 0, 1, 3, 4, -2, 6]))
print(cdfarr)
執行上面示例代碼,得到以下結果 -
array([ 0.84134475, 0.15865525, 0.5 , 0.84134475, 0.9986501 ,
0.99996833, 0.02275013, 1. ])
要查找分佈的中位數,可以使用百分點函數(PPF),它是CDF的倒數。 可通過使用下面的例子來理解。
from scipy.stats import norm
ppfvar = norm.ppf(0.5)
print(ppfvar)
執行上面示例代碼,得到以下結果 -
0.0
要生成隨機變量序列,應該使用size
參數,如下例所示。
from scipy.stats import norm
rvsvar = norm.rvs(size = 5)
print(rvsvar)
執行上面示例代碼,得到以下結果 -
[-0.25993892 1.46653546 -0.53932984 -1.22796601 0.06542478]
上述輸出不可重現。 要生成相同的隨機數,請使用seed()
函數。
均勻分佈
使用統一函數可以生成均勻分佈。 參考下面的一個例子。
from scipy.stats import uniform
cvar = uniform.cdf([0, 1, 2, 3, 4, 5], loc = 1, scale = 4)
print(cvar)
上述程序將生成以下輸出 -
array([ 0. , 0. , 0.25, 0.5 , 0.75, 1. ])
構建離散分佈
生成隨機樣本,並將觀察到的頻率與概率進行比較。
二項分佈
作爲rv_discrete
類的一個實例,binom
對象從它繼承了一個泛型方法的集合,並通過特定於這個特定分佈的細節完成它們。 參考下面的例子。
from scipy.stats import uniform
cvar = uniform.cdf([0, 1, 2, 3, 4, 5], loc = 1, scale = 4)
print(cvar)
上述程序將生成以下輸出 -
array([ 0. , 0. , 0.25, 0.5 , 0.75, 1. ])
描述性統計
如Min
,Max
,Mean
和Variance
等基本統計數據將NumPy數組作爲輸入並返回相應的結果。 下表描述了scipy.stats
包中的一些基本統計函數。
編號
函數
描述
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))
sta = stats.ttest_1samp(rvs,5.0)
print(sta)
上述程序將生成以下輸出 -
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
中使用不同的值並測試相同的值。