用Python進行卡方分析

《用十年學編程》(Teach Yourself Programming in Ten Years by Peter Norvig 原文地址:http://norvig.com/21-days.html) 里說學習編程的最好方法就是實踐,以任務為導向的學習往往更為高效。本文就是這樣一個筆記,算不上教程,只不過是菜鳥在記錄自己的腳步。如果你恰好不知道怎么做卡方分析,不妨來看一看。


什么是卡方分析

卡方分析有兩個常見的應用——適合度分析和獨立性分析。這個筆記著重于適合度分析。從我目前的經驗來看,這也是應用十分廣泛的一種統計分析方式。那么什么是卡方適合度分析呢?且聽我慢慢道來。

現象1 現象2 現象3
觀測值 a b c
預期值 A B C

常見的適合度分析的結構如下,一般有兩組數據,一組是你統計或者觀察到的值,另一組是理論上的預期值。如果這兩組值十分接近,證明觀測到的結果很“合適”,如果差距較大,則證明觀測到的數據不夠“合適”,這就是“適合度分析”名字的含義。

這種統計分析在科學研究中是十分常用的,因為科學家經常按照理論預期來推測試驗結果,而實際上由于各種誤差的存在,實驗數據不可能和理論預期完全一致,這時卡方檢驗就能很好地檢驗理論的正確性。

舉個栗子

某科學家預言拋一個色子,各面向上的幾率都相同。為了驗證自己理論的正確性,該科學家拋了600次硬幣,結果為一點102次,二點102次,三點96次,四點105次,五點95次,六點100次。顯然這個結果和理論預期并不完全一樣,那么,科學家的理論有錯嗎?我們就用Python來驗證一下。

from scipy import stats
obs = [102, 102, 96, 105, 95, 100]
exp = [100, 100, 100, 100, 100, 100]
stats.chisquare(obs, f_exp = exp)

輸出
(0.73999999999999999, 0.98070147251964801)

從結果來看,p 值為0.98,可以認為觀測到的值和預期值是相近即“合適”的。科學家的理論沒有錯,觀測值和理論值的不同是由偶然誤差造成的。(一般 p 值大于0.95即可)

解釋一下

Python中進行卡方分析的函數chisquare()位于scipy的stats模塊中。注意:stats在Python2.7的環境下使用是十分正常的,但是在Python3中使用就會報錯。說來慚愧,筆者之前試著在Py3下運行,結果折騰了大半天都沒成功,換到Py2.7下,一點問題都沒了。如果用Python進行數據分析,個人感覺還是Py2.7好使,很多模塊都沒有穩定的Py3版啊。當然之前的栗子也要求在Py2.7下運行。

scipy.stats.chisquare(f_obs, f_exp=None, ddof=0, axis=0)

參數解釋如下:
f_obs : 觀測值,為一個數列
f_exp : 理論值,為一個數列。如果不賦值,默認為所有情況出現的可能相等。所以栗子中可以不賦值

>>> stats.chisquare(obs)
(0.73999999999999999, 0.98070147251964801)

ddof : 即自由度, df = C - 1,數值上等于所有可能的情況數-1。可以不用賦值,只要obs和exp沒問題,程序可以自己算出來。

輸出的結果是:
chisq: 即k值
p : p 值,大于0.95即統計顯著。


看了這個簡單的小筆記,大家應該知道如何用Python進行適合度檢驗了吧。當然這只是個很簡單的筆記,如果有更多問題,還是要參考scipy的toturial。如果大家有什么問題或建議,歡迎大家在留言中和我討論。祝大家在python數據分析之路上玩的愉快!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容