我們可以根據經驗或統計量對一些事情做出斷言,問題是,如何判斷這個斷言的合理性?假設檢驗為我們提供了一種利用樣本檢驗斷言是否可靠的方法,能夠讓我們通過已有的證據驗證斷言是經過縝密的運算,還是毫無根據的瞎猜,
假設檢驗的背景
某個機器元件的質量標準是功率,功率越大越好,這個元件影響到公司的核心競爭力,技術組在攻克了重重難題后宣稱有了重大突破,總經理非常高興,宣布批量試制,然而改進后的資料卻并不那么漂亮,功率均值從原來的600mW提升到603mW,僅僅提升了0.5%,這讓總經理大為光火,立即召集技術組開會,

0.5%看起來確實沒什么太明顯的提升,面對面色鐵青的總經理,技術部拿出了改進前的功率分布:

這是個很陡峭的分布曲線,暗示著這個元件的功率控制得十分精細,或者說功率的波動很小,3mW的波動已經相當于“基因突變”了,這樣看來,0.5%的提升確實算得上是重大改進,
某個軟體公司用每千行的bug數量衡量軟體的質量(這里不討論這種方法是否合理),多年來也做過了很多專案,平均bug率是5.5‰,即每千行代碼5.5個bug,勉強達到CMM2的標準,
最近公司全面實施了新的開發方法,發現新專案的bug率降低到4.5‰,這可是降低了18%!于是QA部門的老大在年會上對著分布圖激動地宣布,公司軟體質量從此邁上了新臺階,

程式員們瞟了一眼分布圖,露出了謎之微笑,

上面兩個故事告訴我們,在質量改善的程序中,質量提升的百分比并不能作為有效性的唯一依據,0.5%可能是重大提升,18%也可能根本說明不了問題,檢驗的依據是,改善后是否在改善前總體正常波動的范圍內,如果在正常波動范圍內,則可以認為并沒有什么改善,否則認為有顯著改善,這個顯著性具體如何判斷呢?
顯著性水平與置信水平
假設下圖是哈爾濱市民年收入的概率分布:

大多數人都在20萬附近徘徊,
恰好李冰冰出生于哈爾濱市,不小心把她也統計進去了,大明星的收入肯定比普通市民多得多,

李冰冰明顯和普通市民不是一伙的,她的年收入顯著高于絕大多數市民,早已跨過了高收入的門坎,某個人的收入落在高收入群體的概率就是顯著性水平(Significant Level),
小明的年收入是25萬,和大多數人差不多,我們相信小明是一名普通市民的概率還是比較高的,這個概率就是置信水平(Confidenct Level),

高收入群體占了總體的多大比例呢?也就是顯著性水平應該如何取值?
第一個回答這個問題的人是羅納德?艾爾默?費舍爾(RonaldAylmerFisher),

費舍爾(1890 - 1962)是英國統計學家、生物進化學家、數學家、遺傳學家和優生學家,是現代統計科學的奠基人之一,著名的F分布就是費舍爾提出的,并以其姓氏的第一個字母命名,
費舍爾提出0.05顯著性水平,至于為何要選擇0.05,老頭在《研究作業者的統計方法》(Statistical Methods for Research Workers)中做過長篇大論,網上有一篇文章叫“Why P=0.05?”(http://www.jerrydallal.com/lhsp/p05.htm),很值得看一下,
現在我們用顯著性水平和置信水平去看待哈爾濱市民年收入的問題:

單側大于顯著性
高收入群體在曲線右側,是“單側大于”顯著性,表示一個人屬于高收入群體的概率是0.05,李冰冰明顯屬于這一側,相對的,一個人不屬于高收入群體的概率是0.95,
現在要判斷一個人是否屬于低收入群體,此時應當使用“單側小于”顯著性,小明隔壁正好住著一個叫王二的游手好閑的鄰居,每個月都等著領政府的救濟金混日子,年收入自然很低,絕大多數人都不愿意和他為伍,這類人游手好閑群體在曲線左側的0.05部分:

單側小于顯著性
除此之外,還有雙側顯著性,按照費舍爾的0.05顯著性水平理論,雙側檢驗時要在總體分布的兩端各設定一個臨界點,臨界點以外,兩端陰影部分的面積比率各為0.025,表示超低收入群體和高收入群體一樣稀少:

有人說我顯著性水平不用0.05行不行?當然沒問題,具體怎么設定完全取決于實際問題,0.05只是一個常用的取值,如果想檢驗得嚴一點,顯著性水平要相應放低,比如0.01;如果寬松一點,顯著性水平可以稍高一點,比如0.1,此時你也要同時承擔置信水平下降的后果,
有了顯著性水平后和置信水平后,就可以從直觀上回應總經理的憤怒并理解程式員們的謎之微笑,但我們仍然缺少一些理論知識,檢驗理論究竟蘊含著怎樣的邏輯呢?
假設檢驗的邏輯
我一直很喜歡打乒乓球,一個好友和我從小學一直打到大學畢業,基本上旗鼓相當,作業之后,我天天苦練球技,自認為如果再次交手一定比他更強,年假回家,我倆又一次站在球臺邊,并以15局為限,看看時隔多日之后誰更勝一籌,
結果是我5勝10敗,
由于幾乎每一局都是苦戰,所以我并不服氣,認為這純屬偶然,如果再打一次,結果完全不可預估,我的理由是:拋15次硬幣,10次正面朝上完全有可能,對方則是持否定態度,認為這絕對是實力的差距,
我們二人的爭論包含了兩種截然相反的假設:
我的假設,H0:雙方勢均力敵,獲勝的概率都是0.5,
朋友的假設,H1:這個結果表明實力的差距,他的獲勝的概率大于0.5,
從朋友的立場來看,他想要證明自己是對的,因此把我的H0假設看成原假設(或者叫待驗假設、虛無假設),也是他想要駁斥的假設,H1是H0的備擇假設(或者叫對立假設、備選假設),是他試圖肯定的假設,他的證明邏輯是:如果H0成立,那么出現H1這樣的資料的概率將小于α,這個概率用p表示,稱為p值(p-value),作為閾值的α是上一節的顯著性水平,取α=0.05,用p值是否大于α作為判斷依據:


這有點類似于反證法,如果無法直接證明H0是錯的,就轉換策略,暫且相信H0是對的, 這種情況下出現H1的概率將小于0.05,這種小概率事件應該不容易在抽樣中出現,但現在偏偏出現了,是個強有力的反駁證據,所有應當轉而相信H1,
現在來計算一下p值,按照原假設H0,我們二人實力相當,每一場比賽的勝率都相等,假設每場比賽都是獨立的,用隨機變數X表示朋友獲勝的總數,那么X符合總數是15,勝率是0.5的二項分布X~B(15, 0.5),p值是:

可以用計算機直接計算:
from scipy import stats c = stats.binom.cdf(10 - 1, n=15, p=0.5) # X~B(n, p)的累積分布 p = 1 - c
結果p ≈ 0.151 > 0.05,看起來是我贏了,應該相信H0,
朋友當然不會滿意這個結果,他反駁的理由是樣本數量太小,并不能反應真正的勝敗分布,于是他提出增加比賽次數,重新打100局,我欣然接受,
幾天后終于決出了結果,我38勝62敗,
還是沿用之前的原假設和備擇假設,用隨機變數X表示朋友獲勝的總數,這次的p值是:

p值小于顯著性水平,因此應當拒絕承認原假設H0,接受對立假設H1,從分布圖上能夠更清晰地看出這一結論,
import numpy as np import matplotlib.pyplot as plt from scipy import stats n, p = 100, 0.5 x = 62 # 獲勝次數 c = stats.binom.cdf(x - 1, n=n, p=p) # X~B(n, p)的累積分布, P(X <= x-1) p_value = https://www.cnblogs.com/bigmonkey/p/1 - c print(p_value) xs = np.arange(0, n + 1) ys = stats.binom.pmf(xs, n=n, p=p) # X~B(n, p) plt.vlines(xs, ymin=0, ymax=ys) plt.vlines(xs[x - 1], ymin=0, ymax=ys[x - 1], colors='r') plt.scatter(xs[x - 1], ys[x - 1], c='r', label='實際比賽結果') plt.xlim((30, 70)) plt.xlabel('X') plt.ylabel('P(X=x)') plt.legend(loc='upper right') plt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽 plt.show()

這次的樣本較大,證據要比之前充分得多,所以我應當承認這次的失利絕非偶然,
值得注意的是,假設檢驗無法并不能給出絕對的證明,僅僅是用小概率事件作為證據,對原假設進行駁斥,基于這個原因,我依然不服氣,提出再打100局,當然,朋友也堅決予以否定——1局也不行,
臨界值
38勝62敗的戰績為駁斥H0提供了強有力的證據,我現在想要知道的是,到底勝多少局才能不被駁斥?也就是0.95置信水平和0.05顯著性水平的臨界點應該在什么位置?
以c為臨界點,將置信水平和顯著性水平分隔開來,c的值稱為臨界值,用X表示朋友獲勝的數量,如果P(X ≥ c) = 1 – P(X < c) ≤ α,說明樣本位于拒絕域中,應該轉而相信備擇假設H1,

直接計算c值不太容易,需要使用分布的反函式,幸好可以通過計算機直接計算:
c = stats.binom.ppf(0.95, 100, 0.5) # 當P(X <= c) = 0.95時的c值
結果c=58,這意味著如果我輸掉58局以上,就應該屬于實力的差距,

假設檢驗與點估計
我們回到改善機器元件的故事,從抽樣分布的角度去看假設檢驗,
已知元件改善前的功率服從均值為μ0,方差為σ02的正態分布,以下是總經理和技術組的觀點,
總經理:技術組純粹是在說瞎話,質量毫無提升,
技術組:質量得到了極大的改善,
設改善后的總體均值是μ1,方差是σ1,現在用假設檢驗的邏輯翻譯一下:
總經理,原假設H0:改善前與改善后是同一個正態分布,μ0=μ1、σ0=σ1,
技術組,備擇假設H1:改善前與改善后是不同的正態分布,μ0 < μ1,
公司用新技術制造了大量元件,從中多次抽取容量是m(m≥30)的樣本并計算出均值,根據中心極限定理,樣本均值的抽樣分布服從均值為總體均值,方差為總體方差1/m的正態分布:

對樣本均值進行標準化處理:

按照原假設H0:

根據大數定律和點估計理論,樣本標準差σs是總體標準差的合理估計量:

假設元件原來的功率均值是600mW,技術改進后抽取了30個樣本進行對比,測得樣本的功率均值是603mW,標準差是6,代入后可以求得具體的Z值:

Z服從均值為0方差為1的標準正態分布,可以通過查表求得臨界值:

或者直接使用下面的代碼計算:
stats.norm.ppf(0.95, 0, 1) # 1.6448536269514722
z>c,z落入了拒絕域,因此應當拒絕相信H0,原假設不成立,技術組的觀點才是正確的,
接下來是非常繞的第一類錯誤和第二類錯誤(待續),
出處:微信公眾號 "我是8位的"
本文以學習、研究和分享為主,如需轉載,請聯系本人,標明作者和出處,非商業用途!
掃描二維碼關注作者公眾號“我是8位的”

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/83350.html
標籤:其他
上一篇:亞馬遜的企業服(Amazon WorkMail)有沒有做過C#使用Exchange發送郵件的啊,技術支持一下;必有酬謝
下一篇:求好心人幫助解決一個新手問題
