SciPy - 統計



所有統計函式都位於子包scipy.stats中,可以使用info(stats)函式獲得這些函式的相當完整的列表。還可以從stats子包的文件字串 (docstring)中獲得可用隨機變數的列表。此模組包含大量機率分佈以及不斷增長的統計函式庫。

每個單變數分佈都有其自己的子類,如下表所述:

序號 類和描述
1

rv_continuous

一個通用的連續隨機變數類,用於子類化

2

rv_discrete

一個通用的離散隨機變數類,用於子類化

3

rv_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])

上述輸出不可重現。要生成相同的隨機數,請使用seed函式。

均勻分佈

可以使用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. ])

描述性統計

諸如最小值、最大值、均值和方差之類的基本統計資料以NumPy陣列作為輸入,並返回相應的結果。scipy.stats包中提供的一些基本統計函式在以下表格中進行了描述。

序號 函式和描述
1

describe()

計算傳遞陣列的幾個描述性統計資料

2

gmean()

沿指定軸計算幾何平均值

3

hmean()

沿指定軸計算調和平均值

4

kurtosis()

計算峰度

5

mode()

返回眾數

6

skew()

檢驗資料的偏度

7

f_oneway()

執行單因素方差分析 (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檢驗

讓我們瞭解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中使用不同的值並測試相同的內容。

廣告