Python正態(tài)分布概率計(jì)算方法,喜歡算法的伙伴們可以參考學(xué)習(xí)下。需要用到math模塊。先了解一下這個(gè)模塊方法,再來(lái)寫代碼會(huì)更好上手。
目前創(chuàng)新互聯(lián)建站已為上千余家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、網(wǎng)站改版維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、岑鞏網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
def st_norm(u):
'''標(biāo)準(zhǔn)正態(tài)分布'''
import math
x=abs(u)/math.sqrt(2)
T=(0.0705230784,0.0422820123,0.0092705272,
0.0001520143,0.0002765672,0.0000430638)
E=1-pow((1+sum([a*pow(x,(i+1))
for i,a in enumerate(T)])),-16)
p=0.5-0.5*E if u0 else 0.5+0.5*E
return(p)
def norm(a,sigma,x):
'''一般正態(tài)分布'''
u=(x-a)/sigma
return(st_norm(u))
while 1:
'''輸入一個(gè)數(shù)時(shí)默認(rèn)為標(biāo)準(zhǔn)正態(tài)分布
輸入三個(gè)數(shù)(空格隔開)時(shí)分別為期望、方差、x
輸入 stop 停止'''
S=input('please input the parameters:\n')
if S=='stop':break
try:
L=[float(s) for s in S.split()]
except:
print('Input error!')
continue
if len(L)==1:
print('f(x)=%.5f'%st_norm(L[0]))
elif len(L)==3:
print('f(x)=%.5f'%norm(L[0],L[1],L[2]))
else:
print('Input error!')
正態(tài)分布:
若隨機(jī)變量x服從有個(gè)數(shù)學(xué)期望為μ,方差為σ2 的正態(tài)分布,記為N(μ,σ)
其中期望值決定密度函數(shù)的位置,標(biāo)準(zhǔn)差決定分布的幅度,當(dāng)υ=0,σ=0 時(shí)的正態(tài)分布是標(biāo)準(zhǔn)正態(tài)分布
判斷方法有畫圖/k-s檢驗(yàn)
如果隨機(jī)變量X的所有取值都可以逐個(gè)列舉出來(lái),則稱X為離散型隨機(jī)變量。相應(yīng)的概率分布有二項(xiàng)分布,泊松分布。
如果隨機(jī)變量X的所有取值無(wú)法逐個(gè)列舉出來(lái),而是取數(shù)軸上某一區(qū)間內(nèi)的任一點(diǎn),則稱X為連續(xù)型隨機(jī)變量。相應(yīng)的概率分布有正態(tài)分布,均勻分布,指數(shù)分布,伽馬分布,偏態(tài)分布,卡方分布,beta分布等。(真多分布,好恐怖~~)
在離散型隨機(jī)變量X的一切可能值中,各可能值與其對(duì)應(yīng)概率的乘積之和稱為該隨機(jī)變量X的期望值,記作E(X) 。比如有隨機(jī)變量,取值依次為:2,2,2,4,5。求其平均值:(2+2+2+4+5)/5 = 3。
期望值也就是該隨機(jī)變量總體的均值。 推導(dǎo)過(guò)程如下:
= (2+2+2+4+5)/5
= 1/5 2 3 + 4/5 + 5/5
= 3/5 2 + 1/5 4 + 1/5 5
= 0.6 2 + 0.2 4 + 0.2 5
= 60% 2 + 20% 4 + 20%*5
= 1.2 + 0.8 + 1
= 3
倒數(shù)第三步可以解釋為值為2的數(shù)字出現(xiàn)的概率為60%,4的概率為20%,5的概率為20%。 所以E(X) = 60% 2 + 20% 4 + 20%*5 = μ = 3。
0-1分布(兩點(diǎn)分布),它的隨機(jī)變量的取值為1或0。即離散型隨機(jī)變量X的概率分布為:P{X=0} = 1-p, P{X=1} = p,即:
則稱隨機(jī)變量X服從參數(shù)為p的0-1分布,記作X~B(1,p)。
在生活中有很多例子服從兩點(diǎn)分布,比如投資是否中標(biāo),新生嬰兒是男孩還是女孩,檢查產(chǎn)品是否合格等等。
大家非常熟悉的拋硬幣試驗(yàn)對(duì)應(yīng)的分布就是二項(xiàng)分布。拋硬幣試驗(yàn)要么出現(xiàn)正面,要么就是反面,只包含這兩個(gè)結(jié)果。出現(xiàn)正面的次數(shù)是一個(gè)隨機(jī)變量,這種隨機(jī)變量所服從的概率分布通常稱為 二項(xiàng)分布 。
像拋硬幣這類試驗(yàn)所具有的共同性質(zhì)總結(jié)如下:(以拋硬幣為例)
通常稱具有上述特征的n次重復(fù)獨(dú)立試驗(yàn)為n重伯努利試驗(yàn)。簡(jiǎn)稱伯努利試驗(yàn)或伯努利試驗(yàn)概型。特別地,當(dāng)試驗(yàn)次數(shù)為1時(shí),二項(xiàng)分布服從0-1分布(兩點(diǎn)分布)。
舉個(gè)栗子:拋3次均勻的硬幣,求結(jié)果出現(xiàn)有2個(gè)正面的概率 。
已知p = 0.5 (出現(xiàn)正面的概率) ,n = 3 ,k = 2
所以拋3次均勻的硬幣,求結(jié)果出現(xiàn)有2個(gè)正面的概率為3/8。
二項(xiàng)分布的期望值和方差 分別為:
泊松分布是用來(lái)描述在一 指定時(shí)間范圍內(nèi)或在指定的面積或體積之內(nèi)某一事件出現(xiàn)的次數(shù)的分布 。生活中服從泊松分布的例子比如有每天房產(chǎn)中介接待的客戶數(shù),某微博每月出現(xiàn)服務(wù)器癱瘓的次數(shù)等等。 泊松分布的公式為 :
其中 λ 為給定的時(shí)間間隔內(nèi)事件的平均數(shù),λ = np。e為一個(gè)數(shù)學(xué)常數(shù),一個(gè)無(wú)限不循環(huán)小數(shù),其值約為2.71828。
泊松分布的期望值和方差 分別為:
使用Python繪制泊松分布的概率分布圖:
因?yàn)檫B續(xù)型隨機(jī)變量可以取某一區(qū)間或整個(gè)實(shí)數(shù)軸上的任意一個(gè)值,所以通常用一個(gè)函數(shù)f(x)來(lái)表示連續(xù)型隨機(jī)變量,而f(x)就稱為 概率密度函數(shù) 。
概率密度函數(shù)f(x)具有如下性質(zhì) :
需要注意的是,f(x)不是一個(gè)概率,即f(x) ≠ P(X = x) 。在連續(xù)分布的情況下,隨機(jī)變量X在a與b之間的概率可以寫成:
正態(tài)分布(或高斯分布)是連續(xù)型隨機(jī)變量的最重要也是最常見的分布,比如學(xué)生的考試成績(jī)就呈現(xiàn)出正態(tài)分布的特征,大部分成績(jī)集中在某個(gè)范圍(比如60-80分),很小一部分往兩端傾斜(比如50分以下和90多分以上)。還有人的身高等等。
正態(tài)分布的定義 :
如果隨機(jī)變量X的概率密度為( -∞x+∞):
則稱X服從正態(tài)分布,記作X~N(μ,σ2)。其中-∞μ+∞,σ0, μ為隨機(jī)變量X的均值,σ為隨機(jī)變量X的標(biāo)準(zhǔn)差。 正態(tài)分布的分布函數(shù)
正態(tài)分布的圖形特點(diǎn) :
使用Python繪制正態(tài)分布的概率分布圖:
正態(tài)分布有一個(gè)3σ準(zhǔn)則,即數(shù)值分布在(μ-σ,μ+σ)中的概率為0.6827,分布在(μ-2σ,μ+2σ)中的概率為0.9545,分布在(μ-3σ,μ+3σ)中的概率為0.9973,也就是說(shuō)大部分?jǐn)?shù)值是分布在(μ-3σ,μ+3σ)區(qū)間內(nèi),超出這個(gè)范圍的可能性很小很小,僅占不到0.3%,屬于極個(gè)別的小概率事件,所以3σ準(zhǔn)則可以用來(lái)檢測(cè)異常值。
當(dāng)μ=0,σ=1時(shí),有
此時(shí)的正態(tài)分布N(0,1) 稱為標(biāo)準(zhǔn)正態(tài)分布。因?yàn)棣?,σ都是確定的取值,所以其對(duì)應(yīng)的概率密度曲線是一條 形態(tài)固定 的曲線。
對(duì)標(biāo)準(zhǔn)正態(tài)分布,通常用φ(x)表示概率密度函數(shù),用Φ(x)表示分布函數(shù):
假設(shè)有一次物理考試特別難,滿分100分,全班只有大概20個(gè)人及格。與此同時(shí)語(yǔ)文考試很簡(jiǎn)單,全班絕大部分都考了90分以上。小明的物理和語(yǔ)文分別考了60分和80分,他回家后告訴家長(zhǎng),這時(shí)家長(zhǎng)能僅僅從兩科科目的分值直接判斷出這次小明的語(yǔ)文成績(jī)要比物理好很多嗎?如果不能,應(yīng)該如何判斷呢?此時(shí)Z-score就派上用場(chǎng)了。 Z-Score的計(jì)算定義 :
即 將隨機(jī)變量X先減去總體樣本均值,再除以總體樣本標(biāo)準(zhǔn)差就得到標(biāo)準(zhǔn)分?jǐn)?shù)啦。如果X低于平均值,則Z為負(fù)數(shù),反之為正數(shù) 。通過(guò)計(jì)算標(biāo)準(zhǔn)分?jǐn)?shù),可以將任何一個(gè)一般的正態(tài)分布轉(zhuǎn)化為標(biāo)準(zhǔn)正態(tài)分布。
小明家長(zhǎng)從老師那得知物理的全班平均成績(jī)?yōu)?0分,標(biāo)準(zhǔn)差為10,而語(yǔ)文的平均成績(jī)?yōu)?2分,標(biāo)準(zhǔn)差為4。分別計(jì)算兩科成績(jī)的標(biāo)準(zhǔn)分?jǐn)?shù):
物理:標(biāo)準(zhǔn)分?jǐn)?shù) = (60-40)/10 = 2
語(yǔ)文:標(biāo)準(zhǔn)分?jǐn)?shù) = (85-95)/4 = -2.5
從計(jì)算結(jié)果來(lái)看,說(shuō)明這次考試小明的物理成績(jī)?cè)谌客瑢W(xué)中算是考得很不錯(cuò)的,而語(yǔ)文考得很差。
指數(shù)分布可能容易和前面的泊松分布混淆,泊松分布強(qiáng)調(diào)的是某段時(shí)間內(nèi)隨機(jī)事件發(fā)生的次數(shù)的概率分布,而指數(shù)分布說(shuō)的是 隨機(jī)事件發(fā)生的時(shí)間間隔 的概率分布。比如一班地鐵進(jìn)站的間隔時(shí)間。如果隨機(jī)變量X的概率密度為:
則稱X服從指數(shù)分布,其中的參數(shù)λ0。 對(duì)應(yīng)的分布函數(shù) 為:
均勻分布的期望值和方差 分別為:
使用Python繪制指數(shù)分布的概率分布圖:
均勻分布有兩種,分為 離散型均勻分布和連續(xù)型均勻分布 。其中離散型均勻分布最常見的例子就是拋擲骰子啦。拋擲骰子出現(xiàn)的點(diǎn)數(shù)就是一個(gè)離散型隨機(jī)變量,點(diǎn)數(shù)可能有1,2,3,4,5,6。每個(gè)數(shù)出現(xiàn)的概率都是1/6。
設(shè)連續(xù)型隨機(jī)變量X具有概率密度函數(shù):
則稱X服從區(qū)間(a,b)上的均勻分布。X在等長(zhǎng)度的子區(qū)間內(nèi)取值的概率相同。對(duì)應(yīng)的分布函數(shù)為:
f(x)和F(x)的圖形分別如下圖所示:
均勻分布的期望值和方差 分別為:
一般的正態(tài)分布可以通過(guò)標(biāo)準(zhǔn)正態(tài)分布配合數(shù)學(xué)期望向量和協(xié)方差矩陣得到。如下代碼,可以得到滿足一維和二維正態(tài)分布的樣本。希望有用,如有錯(cuò)誤,歡迎指正!
1.直方圖
由于正態(tài)分布具有非常典型的中間高,兩邊低的圖形特征,如果樣本數(shù)據(jù)并不服從正態(tài)分布,我們可以通過(guò)直方圖很快地分辨出來(lái)。更進(jìn)一步地,Python可以輔助生成基于樣本數(shù)據(jù)估計(jì)的正態(tài)曲線,這樣就容易輔助我們進(jìn)行判斷。
圖形觀察雖然直觀,但是部分研究者認(rèn)為單純觀察圖形過(guò)于主觀,因此我們也可以選擇使用統(tǒng)計(jì)檢驗(yàn)的方法去研究數(shù)據(jù)是否服從正態(tài)分布。
操作步驟:
導(dǎo)入相關(guān)的包及數(shù)據(jù)
2 P-P圖及Q-Q圖
直方圖是最長(zhǎng)用于觀察數(shù)據(jù)分布的常用圖形選項(xiàng),尤其是帶正態(tài)曲線的直方圖,可以非常直觀地看到實(shí)際數(shù)據(jù)分布和正態(tài)曲線的對(duì)比,而P-P圖及Q-Q圖則是另一種選擇,它可以直觀給出實(shí)際數(shù)據(jù)分布和理論的差距。
值得注意的是,雖然P-P圖及Q-Q圖常用用于判斷數(shù)據(jù)樣本是否服從正態(tài)分布,但實(shí)際上它們也能判斷數(shù)據(jù)樣本是否服從其他的分布
P-P圖:反映的是數(shù)據(jù)的實(shí)際累積概率與假定所服從分布的理論累積概率的符合程度。在此處,我們所假定的分布就是正態(tài)分布,如果數(shù)據(jù)樣本是服從正態(tài)分布的話,那么實(shí)際的累積概率與理論的累積概率應(yīng)該是相對(duì)一致的,放映在圖形中就是數(shù)據(jù)點(diǎn)應(yīng)該沿著圖形的對(duì)角線分布。
Q-Q圖的原理與P-P圖幾乎一致。P-P圖考察的是實(shí)際分布與理論分布的累積概率分布差異,而Q-Q圖考察的是實(shí)際百分位數(shù)與理論百分位數(shù)的差異。同理在此處,我們所假定的分布就是正態(tài)分布,如果數(shù)據(jù)樣本是服從正態(tài)分布的話,那么實(shí)際的分布應(yīng)該是相對(duì)一致的,反映在圖形中就是數(shù)據(jù)點(diǎn)應(yīng)該沿著圖形的對(duì)角線分布。
在Python中,statsmodels包中目前主要提供的是Q-Q圖的繪制
柯爾莫戈洛夫-斯米諾夫檢驗(yàn)(Kolmogorov-Smirnov test),一般又稱K-S檢驗(yàn),是一種基于累計(jì)分布函數(shù)的非參數(shù)檢驗(yàn),用以檢驗(yàn)兩個(gè)經(jīng)驗(yàn)分布是否不同或一個(gè)經(jīng)驗(yàn)分布與另一個(gè)理想分布是否不同。
K-S檢驗(yàn)的原假設(shè)是“樣本數(shù)據(jù)來(lái)自的分布與正態(tài)分布無(wú)顯著差異”,因此一般來(lái)說(shuō),KS檢驗(yàn)最終返回兩個(gè)結(jié)果,分別是檢驗(yàn)統(tǒng)計(jì)量及P值,檢驗(yàn)結(jié)果P0.05才是我們的目標(biāo)。
實(shí)際上,GraphPad不推薦使用單純的Kolmogorov-Smirnov test方法
夏皮洛-威爾克檢驗(yàn)(Shapiro—Wilk test),一般又稱W檢驗(yàn)。W檢驗(yàn)是一種類似于利用秩進(jìn)行相關(guān)性檢驗(yàn)的方法。同樣需要注意的是,W檢驗(yàn)與K-S檢驗(yàn)一樣,原假設(shè)是“樣本數(shù)據(jù)來(lái)自的分布與正態(tài)分布無(wú)顯著差異”,因此一般來(lái)說(shuō),W檢驗(yàn)最終返回兩個(gè)結(jié)果,分別是檢驗(yàn)統(tǒng)計(jì)量及P值。,檢驗(yàn)結(jié)果P0.05才是我們的目標(biāo)。
當(dāng)數(shù)據(jù)集中的數(shù)據(jù)無(wú)重復(fù)值時(shí),該方法的檢驗(yàn)效果比較好,但是當(dāng)數(shù)據(jù)集中有些數(shù)據(jù)不是獨(dú)一無(wú)二的,即有些數(shù)據(jù)的數(shù)值是相同的,那么該方法的檢驗(yàn)效果就不是很好
GraphPad官方推薦使用該方法。
首先計(jì)算 偏度和峰度以便在不對(duì)稱和形狀方面量化分布離高斯分布的距離。然后,其計(jì)算這些值中的每一個(gè)與高斯分布的預(yù)期值之間的差異,并基于這些差異的總和,計(jì)算各P值。這是一種通用和強(qiáng)大的正態(tài)性檢驗(yàn),推薦使用。請(qǐng)注意,D'Agostino開發(fā)了幾種正態(tài)性檢驗(yàn)。Prism使用的其中一個(gè)是“綜合K2”檢驗(yàn)。
安德森-達(dá)令檢驗(yàn)樣本數(shù)據(jù)是否來(lái)自特定分布,包括分布:'norm', 'expon', 'gumbel', 'extreme1' or 'logistic'.
原假設(shè) H0:樣本服從特定分布; 備擇假設(shè) H1:樣本不服從特定分布
實(shí)際上,從已有的文獻(xiàn)表明,對(duì)于數(shù)據(jù)分布的正態(tài)性研究,首選方法是圖形觀察,即利用直方圖、P-P圖或Q-Q圖進(jìn)行觀察,如果分布嚴(yán)重偏態(tài)和尖峰分布則建議進(jìn)行進(jìn)一步的假設(shè)檢驗(yàn)。如果圖形分布結(jié)果不好判斷,則再進(jìn)行正態(tài)性檢驗(yàn)。
實(shí)際上,從已有的文獻(xiàn)表明,對(duì)于數(shù)據(jù)分布的正態(tài)性研究,首選方法是圖形觀察,即利用直方圖、P-P圖或Q-Q圖進(jìn)行觀察,如果分布嚴(yán)重偏態(tài)和尖峰分布則建議進(jìn)行進(jìn)一步的假設(shè)檢驗(yàn)。如果圖形分布結(jié)果不好判斷,則再進(jìn)行正態(tài)性檢驗(yàn)。
其次,對(duì)于檢驗(yàn)方法來(lái)說(shuō),對(duì)于K-S檢驗(yàn)及W檢驗(yàn)結(jié)果來(lái)說(shuō),有文獻(xiàn)采用蒙特卡羅模擬方法進(jìn)行多次驗(yàn)證,結(jié)果表明W檢驗(yàn)結(jié)果相比于大部分方法都有較大的檢驗(yàn)功效,而K-S方法的檢驗(yàn)結(jié)果相對(duì)不佳。并且部分學(xué)者認(rèn)為,K-S檢驗(yàn)的實(shí)用性遠(yuǎn)不如圖形工具,因?yàn)樵跇颖玖可贂r(shí),該檢驗(yàn)不太敏感,但是在樣本量大時(shí),該檢驗(yàn)卻過(guò)于敏感。因此正常情況下,我們更常采用W檢驗(yàn)的結(jié)果。
值得注意的是,雖然說(shuō)K-S檢驗(yàn)結(jié)果相對(duì)不佳,但是不同檢驗(yàn)方法對(duì)于樣本量的敏感度是不一樣的。在樣本量較小的情況下(小于50個(gè)樣本的情況下),請(qǐng)優(yōu)先選擇W檢驗(yàn);在樣本量50-5000的情況下,可以酌情使用W檢驗(yàn)及K—S檢驗(yàn);在樣本量大于5000的情況下,請(qǐng)使用K-S檢驗(yàn)結(jié)果,尤其是在SPSS中,當(dāng)樣本量大于5000的情況下,將只顯示K-S檢驗(yàn)結(jié)果,而不顯示W(wǎng)檢驗(yàn)結(jié)果。
示例:
1、from numpy import *;
2、def rand_Matrix():
3、randArr=random.randn(2,3);
4、randMat=mat(randArr);
5、return randMat;
一種結(jié)果如下:
1、matrix([[ 0.3150869 , -0.02041996, -0.15361071],
2、[-0.75507988,? 0.80393683, -0.31790917]])
擴(kuò)展資料
Python正態(tài)分布概率計(jì)算方法:
def st_norm(u):
'''標(biāo)準(zhǔn)正態(tài)分布'''
import math
x=abs(u)/math.sqrt(2)
T=(0.0705230784,0.0422820123,0.0092705272,
0.0001520143,0.0002765672,0.0000430638)
E=1-pow((1+sum([a*pow(x,(i+1))
for i,a in enumerate(T)])),-16)
p=0.5-0.5*E if u0 else 0.5+0.5*E
return(p)
def norm(a,sigma,x):
'''一般正態(tài)分布'''
u=(x-a)/sigma
return(st_norm(u))
while 1:
'''輸入一個(gè)數(shù)時(shí)默認(rèn)為標(biāo)準(zhǔn)正態(tài)分布
輸入三個(gè)數(shù)(空格隔開)時(shí)分別為期望、方差、x
輸入 stop 停止'''
S=input('please input the parameters:\n')
if S=='stop':break
try:
L=[float(s) for s in S.split()]
except:
print('Input error!')
continue
if len(L)==1:
print('f(x)=%.5f'%st_norm(L[0]))
elif len(L)==3:
print('f(x)=%.5f'%norm(L[0],L[1],L[2]))
else:
print('Input error!')