Python卡方函數(shù),python 卡方分布

卡方檢驗詳解

為什么要叫“卡方”?因為原名是“chi-squared”,一半是音譯,一半是意譯。其中,chi 是希臘字母 的讀音,其實讀音更像是“開”,而不是“卡”。square表示平方,因此在英語中,卡方分布寫作 distribution。

創(chuàng)新互聯(lián)建站主營會澤網(wǎng)站建設的網(wǎng)絡公司,主營網(wǎng)站建設方案,手機APP定制開發(fā),會澤h5成都微信小程序搭建,會澤網(wǎng)站營銷推廣歡迎會澤等地區(qū)企業(yè)咨詢

在理解卡方檢驗之前,應當理解卡方分布??ǚ椒植际且环N連續(xù)概率分布。

如果一個隨機變量 服從標準正態(tài)分布,即 ,那么 就服從自由度為1的卡方分布。記作 或者

而如果 都服從標準正態(tài)分布,那么它們的平方和服從自由度為 的卡方分布,記作:

或者寫作 。

對于非負自變量 的自由度為 的卡方分布的概率密度函數(shù) (簡稱"pdf"):

(1)為什么 非負?因為根據(jù)定義,卡方分布的自變量是一個平方和。

(2)這里的 是一個函數(shù)。關于這個函數(shù)具體是什么,以及上門的概率密度函數(shù)如何推導,這里不展開,只需要知道有這么個函數(shù)即可。實在是好奇的,可以 參考這里 。

(3)卡方分布的均值為 ,而標準差為 。

(4)自由度越大,該函數(shù)圖像越對稱。

(5)為什么這里 需要正態(tài)分布,我的理解是,如果零假設為真,那么觀測值和期望值之間的波動程度,應該是正態(tài)分布的,或者說“噪聲”應該是正態(tài)分布的。

卡方檢驗有兩個用途:

擬合優(yōu)度檢驗 chi-squared test goodness of fit

獨立性檢驗 chi-squared test of independence

某新聞說某個籃球明星的原地兩連投的單次命中率是0.8,根據(jù)歷次比賽的數(shù)據(jù)匯總得到下面的表格:

意思是說,在比賽中,有5次兩連投是一次都沒中,有82次是在兩連投中命中1次?,F(xiàn)在,我們來用卡方檢驗驗證新聞說的0.8的命中率是否正確。零假設如下:

:兩連投的成功次數(shù)符合二項分布,且概率為

(1)先根據(jù)零假設計算“期望”的命中次數(shù)分布:

由于總的觀察次數(shù)為 ,于是在 成立的前提下,可以計算每種兩連投結果的期望次數(shù):

0次命中:

1次命中:

2次命中:

顯然,期望的觀察次數(shù)和實際的觀察次數(shù)是有偏差的,那么問題在于這個偏差是否大到具有統(tǒng)計顯著性,進而可以否定零假設。

(2)我們來構造卡方檢驗統(tǒng)計量(chi-squared test statistic):

這個值是把表里每個格子的實際值和期望值進行對比。為什么要用平方?目的在于規(guī)避正負號的影響。為什么要除以期望值?目的在于消除數(shù)量絕對值的影響。例如你預算3塊錢的水,商家加價50元,那么這個波動是你無法忍受的,而你預算20萬的車,商家加價50元,則變得可以忍受。也就是說,除以期望值目的在于聚焦于變化率,而不是變化量。

之后,把這些“變化率”加總得到 。而計算自由度有一個公式:

其中 R 表示行數(shù),C 表示列數(shù)。對于本例:

從另一個角度解釋為什么 :前面的定義是如果是 個符合標準正態(tài)分布的 相加,則自由度是 ,但是這里自有兩個格子可以自由變化,第三個格子可以用總觀察數(shù)減出來,例如 。

因此,真正自由的只有2個格子,所以自由度是2。

好了,將格子的數(shù)據(jù)代入,求出檢驗統(tǒng)計量:

(3)根據(jù)自由度為2的卡方分布,找到檢驗統(tǒng)計量對應的位置:

不難理解,隨著統(tǒng)計量增大,表示預期的分布和實際的分布的差異也就越來越大。

另外,由于通常意義上,p值是越小越能推翻零假設,那么顯然我們需要用右側的面積來表示p值,這里用Python計算來代替查表:

輸出:statistic: 17.26, pvalue: 0.0002

由于p值很?。僭O我們的顯著性水平的0.05),那么我們可以推翻零假設。

進一步的,我們來探索下,該運動員的兩連投的成功次數(shù)分數(shù)是否真的符合二項分布。零假設:

:兩連投的成功次數(shù)符合二項分布。

既然符合二項分布,那么我們需要先估算一下最合理的 概率,那當然是用總命中數(shù)除以總投籃數(shù)來計算了:

然后,用該概率值重復之前的計算,也就是先計算出一個期望的表格:

注意,這里的 ,這是因為,我們每從數(shù)據(jù)估計一個參數(shù),那么我們就損失一個自由度。這里用了一個平均命中的概率,因此自由度只有 。

這時候,在使用 Python 進行計算時,注意調(diào)整默認的自由度:

這里的 ddof 就是額外損失的自由度,本意是“delta degree of freedom”

輸出:statistic: 0.34, pvalue: 0.56

可以看到p值很大,因此不足以推翻零假設,也就是說該運動員的投籃命中次數(shù)可能真的是二項分布。

下面表格表示喝酒頻率和與警察發(fā)生麻煩的頻數(shù)。

以第一列為例,表示從不喝酒的人中,4992人不發(fā)生麻煩,71人會發(fā)生麻煩。

現(xiàn)在的問題是,能否從以下數(shù)據(jù)推斷說喝酒頻率和與警察發(fā)生麻煩這兩個事件相互獨立?

我們的零假設應該如何設計?如果要說明兩者相互獨立,那么上表的分布應該滿足乘法公式。也就是說兩個獨立事件一起發(fā)生的概率等于分別發(fā)生的概率之積。

于是我們有:

發(fā)生麻煩的總人數(shù)除以總人數(shù)

不喝酒的總人數(shù)除以總人數(shù)

進一步,根據(jù)總人數(shù)算出不喝酒而發(fā)生麻煩的人數(shù)的期望(下標表示零假設):

用類似的算法,計算每一個格子在零假設成立的情況下的值,寫在原表數(shù)據(jù)下的括號里:

仔細觀察可以看出,其實每個格子就是對應的:

另外可以看到,零假設下的各個格子的行列之和與原來相同。這不是偶然的,我們用字母代替計算一下就知道了:

于是第一列的兩個格子應該是:

對于其他格子、行的總和,都一樣,這里不多說了。

好,繼續(xù)分析。我們直接用上表計算卡方統(tǒng)計量和p值:

這部分計算方法和擬合優(yōu)度是一樣的,就不贅述了。計算發(fā)現(xiàn)這個p值非常小,接近0,因此我們可以推翻零假設。也就是說,喝酒的頻率和被警察找麻煩的并不是獨立的,而是相關的。

關于獨立性檢驗,有一個比卡方檢驗更精準的檢驗,叫 fisher's exact test。它通過直接計算否定零假設的概率,也就直接得到了一個準確的p值。有一個經(jīng)典的女士品茶的統(tǒng)計學故事。有一個女士號稱可以區(qū)分出一杯茶是先倒入了奶還是先倒入了茶。統(tǒng)計學家 Fisher 為了驗證她的說法,做了一個實驗。拿了8杯茶,4杯是先茶后奶,4杯是先奶后茶。

實驗結果是全部說對了。那么問題是,這是否具有統(tǒng)計顯著性呢?比如說一個人猜對了一次硬幣,他的預測能力靠譜嗎?

我們假設女士的判斷是完全隨機的,這個是我們的零假設。那么8杯里面抽中4杯全對的概率是:

如果顯著性水平是0.01,那么我們不能推翻零假設,即不敢確定這位女士真有這個識別能力。如果顯著性水平定在0.05,則我們可以認為她確實有這個識別能力。

如果讓實驗結果有更大的說服力呢?一個簡單的辦法就是增加茶的數(shù)量,比如我們設定為兩種茶各10杯,要求10杯都判斷正確,那么p值為多少呢?

這個算起來比較麻煩,這里我寫一個 python 腳本來計算:

計算結果:

這個p值就小得很夸張了,基本可以斷定零假設不成立了。

那么,回到實驗本身,如果女士只選對了三杯,那么在零假設的前提下,這個發(fā)生的概率是多少?

這個概率比較大了,原大于通常使用的顯著性水平 0.05,因此我們沒有辦法推翻零假設。為什么要這樣 乘 呢?這個是因為一共有這么多種取法。你把所有可能的取法羅列處理,就是16種,然后除以總的取法數(shù),就是隨機取到這樣結果的概率。

比較 Fisher's exact test 和 chi-squared test,可以 參考這篇文章 。

一般來說,兩者都適用的情況下,應該優(yōu)先選擇 Fisher's exact test,因為它是精確值。如果實驗觀察的數(shù)量很?。ㄐ∮?0),應該不使用 chi-squared test。

下面使用一個腳本來計算:

python中如何進行開方運算

1、python中使用pow函數(shù)求n的n方根。首先打開python的編輯器,新建一個python 3的文件:

2、pow函數(shù)的用法很簡單,只要傳入待開方的數(shù),以及要開幾次方就可以了。比如演示里是3開3次方:

3、然后需要編譯運行,點擊菜單欄上run下面的run命令,執(zhí)行編譯運行:

4、在下方的結果中即可看到運算的結果尾27,說明是是正確的。以上就是python中開N次方的操作方法:

python生成卡方分布

若n個相互獨立的隨機變量 ,均服從標準正態(tài)分布(也稱獨立同分布于標準正態(tài)分布),則這n個服從標準正態(tài)分布的隨機變量的平方和

構成一新的隨機變量,其卡方分布規(guī)律稱為 分布(chi-square distribution),其中參數(shù) 稱為自由度,正如正態(tài)分布中均值或方差不同就是另一個正態(tài)分布一樣,自由度不同就是另一個分布??ǚ椒植际怯烧龖B(tài)分布構造而成的一個新的分布,當自由度 很大時, 分布近似為正態(tài)分布。 對于任意正整數(shù) , 自由度為 的卡方分布是一個隨機變量 的機率分布。

python 8個常用內(nèi)置函數(shù)解說

8個超好用內(nèi)置函數(shù)set(),eval(),sorted(),reversed(),map(),reduce(),filter(),enumerate()

python中有許多內(nèi)置函數(shù),不像print那么廣為人知,但它們卻異常的強大,用好了可以大大提高代碼效率。

這次來梳理下8個好用的python內(nèi)置函數(shù)

1、set()

當需要對一個列表進行去重操作的時候,set()函數(shù)就派上用場了。

用于創(chuàng)建一個集合,集合里的元素是無序且不重復的。集合對象創(chuàng)建后,還能使用并集、交集、差集功能。

2、eval()之前有人問如何用python寫一個四則運算器,輸入字符串公式,直接產(chǎn)生結果。用eval()來做就很簡單:eval(str_expression)作用是將字符串轉換成表達式,并且執(zhí)行。

3、sorted()在處理數(shù)據(jù)過程中,我們經(jīng)常會用到排序操作,比如將列表、字典、元組里面的元素正/倒排序。這時候就需要用到sorted() ,它可以對任何可迭代對象進行排序,并返回列表。對列表升序操作:

對元組倒序操作:

使用參數(shù):key,根據(jù)自定義規(guī)則,按字符串長度來排序:

根據(jù)自定義規(guī)則,對元組構成的列表進行排序:

4、reversed()如果需要對序列的元素進行反轉操作,reversed()函數(shù)能幫到你。reversed()接受一個序列,將序列里的元素反轉,并最終返回迭代器。

5、map()做文本處理的時候,假如要對序列里的每個單詞進行大寫轉化操作。這個時候就可以使用map()函數(shù)。

map()會根據(jù)提供的函數(shù),對指定的序列做映射,最終返回迭代器。也就是說map()函數(shù)會把序列里的每一個元素用指定的方法加工一遍,最終返回給你加工好的序列。舉個例子,對列表里的每個數(shù)字作平方處理:

6、reduce()前面說到對列表里的每個數(shù)字作平方處理,用map()函數(shù)。那我想將列表里的每個元素相乘,該怎么做呢?這時候用到reduce()函數(shù)。

reduce()會對參數(shù)序列中元素進行累積。第一、第二個元素先進行函數(shù)操作,生成的結果再和第三個元素進行函數(shù)操作,以此類推,最終生成所有元素累積運算的結果。再舉個例子,將字母連接成字符串。

你可能已經(jīng)注意到,reduce()函數(shù)在python3里已經(jīng)不再是內(nèi)置函數(shù),而是遷移到了functools模塊中。這里把reduce()函數(shù)拎出來講,是因為它太重要了。

7、filter()一些數(shù)字組成的列表,要把其中偶數(shù)去掉,該怎么做呢?

filter()函數(shù)輕松完成了任務,它用于過濾序列,過濾掉不符合條件的元素,返回一個迭代器對象。filter()函數(shù)和map()、reduce()函數(shù)類似,都是將序列里的每個元素映射到函數(shù),最終返回結果。我們再試試,如何從許多單詞里挑出包含字母w的單詞。

8、enumerate()這樣一個場景,同時打印出序列里每一個元素和它對應的順序號,我們用enumerate()函數(shù)做做看。

enumerate翻譯過來是枚舉、列舉的意思,所以說enumerate()函數(shù)用于對序列里的元素進行順序標注,返回(元素、索引)組成的迭代器。再舉個例子說明,對字符串進行標注,返回每個字母和其索引。

新聞標題:Python卡方函數(shù),python 卡方分布
標題路徑:http://muchs.cn/article8/hscpip.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、GoogleApp設計、網(wǎng)站改版、網(wǎng)站設計公司企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務器托管