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

python用卡方檢驗(yàn),自動(dòng)分箱,結(jié)果是否可靠有待驗(yàn)證

def calc_chiSquare(sampleSet, feature, target):

創(chuàng)新互聯(lián)公司長(zhǎng)期為數(shù)千家客戶(hù)提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為廣信企業(yè)提供專(zhuān)業(yè)的成都做網(wǎng)站、成都網(wǎng)站制作,廣信網(wǎng)站改版等技術(shù)服務(wù)。擁有10年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。

'''

計(jì)算某個(gè)特征每種屬性值的卡方統(tǒng)計(jì)量

params:

? ? sampleSet: 樣本集

? ? feature: 目標(biāo)特征

? ? target: 目標(biāo)Y值 (0或1) Y值為二分類(lèi)變量

return:

? ? 卡方統(tǒng)計(jì)量dataframe

? ? feature: 特征名稱(chēng)

? ? act_target_cnt: 實(shí)際壞樣本數(shù)

? ? expected_target_cnt:期望壞樣本數(shù)

? ? chi_square:卡方統(tǒng)計(jì)量

'''

# 計(jì)算樣本期望頻率

target_cnt = sampleSet[target].sum()

sample_cnt = len(sampleSet[target])

expected_ratio = target_cnt * 1.0/sample_cnt

# 對(duì)變量按屬性值從大到小排序

df = sampleSet[[feature, target]]

col_value = list(set(df[feature]))?

# 計(jì)算每一個(gè)屬性值對(duì)應(yīng)的卡方統(tǒng)計(jì)量等信息

chi_list = []; target_list = []; expected_target_list = []

for value in col_value:

? ? df_target_cnt = df.loc[df[feature] == value, target].sum()

? ? df_cnt = len(df.loc[df[feature] == value, target])

? ? expected_target_cnt = df_cnt * expected_ratio

? ? chi_square = (df_target_cnt - expected_target_cnt)**2 / expected_target_cnt

? ? chi_list.append(chi_square)

? ? target_list.append(df_target_cnt)

? ? expected_target_list.append(expected_target_cnt)

# 結(jié)果輸出到dataframe, 對(duì)應(yīng)字段為特征屬性值, 卡方統(tǒng)計(jì)量, 實(shí)際壞樣本量, 期望壞樣本量

chi_stats = pd.DataFrame({feature:col_value, 'chi_square':chi_list,

? ? ? ? ? ? ? ? ? ? ? ? ? 'act_target_cnt':target_list, 'expected_target_cnt':expected_target_list})

return chi_stats[[feature, 'act_target_cnt', 'expected_target_cnt', 'chi_square']]

def chiMerge_maxInterval(chi_stats, feature, maxInterval=5):

'''

卡方分箱合并--最大區(qū)間限制法

params:

? ? chi_stats: 卡方統(tǒng)計(jì)量dataframe

? ? feature: 目標(biāo)特征

? ? maxInterval:最大分箱數(shù)閾值

return:

? ? 卡方合并結(jié)果dataframe, 特征分割split_list

'''

group_cnt = len(chi_stats)

split_list = [chi_stats[feature].min()]

# 如果變量區(qū)間超過(guò)最大分箱限制,則根據(jù)合并原則進(jìn)行合并

while(group_cnt maxInterval):

? ? min_index = chi_stats[chi_stats['chi_square']==chi_stats['chi_square'].min()].index.tolist()[0]

? ? # 如果分箱區(qū)間在最前,則向下合并

? ? if min_index == 0:

? ? ? ? chi_stats = merge_chiSquare(chi_stats, min_index+1, min_index)

? ? # 如果分箱區(qū)間在最后,則向上合并

? ? elif min_index == group_cnt-1:

? ? ? ? chi_stats = merge_chiSquare(chi_stats, min_index-1, min_index)

? ? # 如果分箱區(qū)間在中間,則判斷與其相鄰的最小卡方的區(qū)間,然后進(jìn)行合并

? ? else:

? ? ? ? if chi_stats.loc[min_index-1, 'chi_square'] chi_stats.loc[min_index+1, 'chi_square']:

? ? ? ? ? ? chi_stats = merge_chiSquare(chi_stats, min_index, min_index+1)

? ? ? ? else:

? ? ? ? ? ? chi_stats = merge_chiSquare(chi_stats, min_index-1, min_index)

? ? group_cnt = len(chi_stats)

chiMerge_result = chi_stats

split_list.extend(chiMerge_result[feature].tolist())

return chiMerge_result, split_list

def chiMerge_minChiSquare(chi_stats, feature, dfree=4, cf=0.1, maxInterval=5):

'''

卡方分箱合并--卡方閾值法

params:

? ? chi_stats: 卡方統(tǒng)計(jì)量dataframe

? ? feature: 目標(biāo)特征

? ? maxInterval: 最大分箱數(shù)閾值, default 5

? ? dfree: 自由度, 最大分箱數(shù)-1, default 4

? ? cf: 顯著性水平, default 10%

return:

? ? 卡方合并結(jié)果dataframe, 特征分割split_list

'''

threshold = get_chiSquare_distuibution(dfree, cf)

min_chiSquare = chi_stats['chi_square'].min()

group_cnt = len(chi_stats)

split_list = [chi_stats[feature].min()]

# 如果變量區(qū)間的最小卡方值小于閾值,則繼續(xù)合并直到最小值大于等于閾值

while(min_chiSquare threshold and group_cnt maxInterval):

? ? min_index = chi_stats[chi_stats['chi_square']==chi_stats['chi_square'].min()].index.tolist()[0]

? ? # 如果分箱區(qū)間在最前,則向下合并

? ? if min_index == 0:

? ? ? ? chi_stats = merge_chiSquare(chi_stats, min_index+1, min_index)

? ? # 如果分箱區(qū)間在最后,則向上合并

? ? elif min_index == group_cnt-1:

? ? ? ? chi_stats = merge_chiSquare(chi_stats, min_index-1, min_index)

? ? # 如果分箱區(qū)間在中間,則判斷與其相鄰的最小卡方的區(qū)間,然后進(jìn)行合并

? ? else:

? ? ? ? if chi_stats.loc[min_index-1, 'chi_square'] chi_stats.loc[min_index+1, 'chi_square']:

? ? ? ? ? ? chi_stats = merge_chiSquare(chi_stats, min_index, min_index+1)

? ? ? ? else:

? ? ? ? ? ? chi_stats = merge_chiSquare(chi_stats, min_index-1, min_index)

? ? min_chiSquare = chi_stats['chi_square'].min()

? ? group_cnt = len(chi_stats)

chiMerge_result = chi_stats

split_list.extend(chiMerge_result[feature].tolist())

return chiMerge_result, split_list

def get_chiSquare_distuibution(dfree=4, cf=0.1):

'''

根據(jù)自由度和置信度得到卡方分布和閾值

params:

? ? dfree: 自由度, 最大分箱數(shù)-1, default 4

? ? cf: 顯著性水平, default 10%

return:

? ? 卡方閾值

'''

percents = [0.95, 0.90, 0.5, 0.1, 0.05, 0.025, 0.01, 0.005]

df = pd.DataFrame(np.array([chi2.isf(percents, df=i) for i in range(1, 30)]))

df.columns = percents

df.index = df.index+1

# 顯示小數(shù)點(diǎn)后面數(shù)字

pd.set_option('precision', 3)

return df.loc[dfree, cf]

def merge_chiSquare(chi_result, index, mergeIndex, a = 'expected_target_cnt',

? ? ? ? ? ? ? ? b = 'act_target_cnt', c = 'chi_square'):

'''

params:

? ? chi_result: 待合并卡方數(shù)據(jù)集

? ? index: 合并后的序列號(hào)

? ? mergeIndex: 需合并的區(qū)間序號(hào)

? ? a, b, c: 指定合并字段

return:

? ? 分箱合并后的卡方dataframe

'''

chi_result.loc[mergeIndex, a] = chi_result.loc[mergeIndex, a] + chi_result.loc[index, a]

chi_result.loc[mergeIndex, b] = chi_result.loc[mergeIndex, b] + chi_result.loc[index, b]

chi_result.loc[mergeIndex, c] = (chi_result.loc[mergeIndex, b] - chi_result.loc[mergeIndex, a])**2 /chi_result.loc[mergeIndex, a]

chi_result = chi_result.drop([index])

chi_result = chi_result.reset_index(drop=True)

return chi_result

for col in bin_col:

chi_stats = calc_chiSquare(exp_f_data_label_dr, col, 'label')

chiMerge_result, split_list = chiMerge_maxInterval(chi_stats, col, maxInterval=5)

print(col, 'feature maybe split like this:', split_list)

統(tǒng)計(jì)學(xué)入門(mén)級(jí):常見(jiàn)概率分布+python繪制分布圖

如果隨機(jī)變量X的所有取值都可以逐個(gè)列舉出來(lái),則稱(chēng)X為離散型隨機(jī)變量。相應(yīng)的概率分布有二項(xiàng)分布,泊松分布。

如果隨機(jī)變量X的所有取值無(wú)法逐個(gè)列舉出來(lái),而是取數(shù)軸上某一區(qū)間內(nèi)的任一點(diǎn),則稱(chēng)X為連續(xù)型隨機(jī)變量。相應(yīng)的概率分布有正態(tài)分布,均勻分布,指數(shù)分布,伽馬分布,偏態(tài)分布,卡方分布,beta分布等。(真多分布,好恐怖~~)

在離散型隨機(jī)變量X的一切可能值中,各可能值與其對(duì)應(yīng)概率的乘積之和稱(chē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,即:

則稱(chēng)隨機(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ī)變量所服從的概率分布通常稱(chēng)為 二項(xiàng)分布 。

像拋硬幣這類(lèi)試驗(yàn)所具有的共同性質(zhì)總結(jié)如下:(以拋硬幣為例)

通常稱(chēng)具有上述特征的n次重復(fù)獨(dú)立試驗(yàn)為n重伯努利試驗(yàn)。簡(jiǎn)稱(chēng)伯努利試驗(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)中介接待的客戶(hù)數(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)就稱(chēng)為 概率密度函數(shù) 。

概率密度函數(shù)f(x)具有如下性質(zhì) :

需要注意的是,f(x)不是一個(gè)概率,即f(x) ≠ P(X = x) 。在連續(xù)分布的情況下,隨機(jī)變量X在a與b之間的概率可以寫(xiě)成:

正態(tài)分布(或高斯分布)是連續(xù)型隨機(jī)變量的最重要也是最常見(jiàn)的分布,比如學(xué)生的考試成績(jī)就呈現(xiàn)出正態(tài)分布的特征,大部分成績(jī)集中在某個(gè)范圍(比如60-80分),很小一部分往兩端傾斜(比如50分以下和90多分以上)。還有人的身高等等。

正態(tài)分布的定義 :

如果隨機(jī)變量X的概率密度為( -∞x+∞):

則稱(chēng)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) 稱(chēng)為標(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è)有一次物理考試特別難,滿(mǎn)分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的概率密度為:

則稱(chēng)X服從指數(shù)分布,其中的參數(shù)λ0。 對(duì)應(yīng)的分布函數(shù) 為:

均勻分布的期望值和方差 分別為:

使用Python繪制指數(shù)分布的概率分布圖:

均勻分布有兩種,分為 離散型均勻分布和連續(xù)型均勻分布 。其中離散型均勻分布最常見(jiàn)的例子就是拋擲骰子啦。拋擲骰子出現(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ù):

則稱(chēng)X服從區(qū)間(a,b)上的均勻分布。X在等長(zhǎng)度的子區(qū)間內(nèi)取值的概率相同。對(duì)應(yīng)的分布函數(shù)為:

f(x)和F(x)的圖形分別如下圖所示:

均勻分布的期望值和方差 分別為:

python生成卡方分布

若n個(gè)相互獨(dú)立的隨機(jī)變量 ,均服從標(biāo)準(zhǔn)正態(tài)分布(也稱(chēng)獨(dú)立同分布于標(biāo)準(zhǔn)正態(tài)分布),則這n個(gè)服從標(biāo)準(zhǔn)正態(tài)分布的隨機(jī)變量的平方和

構(gòu)成一新的隨機(jī)變量,其卡方分布規(guī)律稱(chēng)為 分布(chi-square distribution),其中參數(shù) 稱(chēng)為自由度,正如正態(tài)分布中均值或方差不同就是另一個(gè)正態(tài)分布一樣,自由度不同就是另一個(gè)分布。卡方分布是由正態(tài)分布構(gòu)造而成的一個(gè)新的分布,當(dāng)自由度 很大時(shí), 分布近似為正態(tài)分布。 對(duì)于任意正整數(shù) , 自由度為 的卡方分布是一個(gè)隨機(jī)變量 的機(jī)率分布。

python shap pypi變量分布

有幾種不同的分布方式。

01兩點(diǎn)分布0-1分布(兩點(diǎn)分布),它的隨機(jī)變量的取值為1或0即離散型隨機(jī)變量X的概率分布為:P{X=0}=1-p,P{X=1}=p,二項(xiàng)分布Binomialdistribution,泊松分布Poissondistribution正態(tài)分布,均勻分布Uniformdistribution,。

離散型隨機(jī)變量如果隨機(jī)變量X的所有取值都可以逐個(gè)列舉出來(lái),則稱(chēng)X為離散型隨機(jī)變量相應(yīng)的概率分布有二項(xiàng)分布,泊松分布連續(xù)型隨機(jī)變量如果隨機(jī)變量X的所有取值無(wú)法逐個(gè)列舉出來(lái),而是取數(shù)軸上某一區(qū)間內(nèi)的任一點(diǎn),則稱(chēng)X為連續(xù)型隨機(jī)變量相應(yīng)的概率分布有正態(tài)分布,均勻分布,指數(shù)分布,伽馬分布,偏態(tài)分布,卡方分布,beta分布等(真多分布,好恐怖~~)期望值在離散型隨機(jī)變量X的一切可能值中,各可能值與其對(duì)應(yīng)概率的乘積之和稱(chēng)為該隨機(jī)變量X的期望值,記作E(X)比如有隨機(jī)變量,取值依次為:2,2,2,4,5求其平均值:(2+2+2+4+5)/5=3。

卡方檢驗(yàn)詳解

為什么要叫“卡方”?因?yàn)樵恰癱hi-squared”,一半是音譯,一半是意譯。其中,chi 是希臘字母 的讀音,其實(shí)讀音更像是“開(kāi)”,而不是“卡”。square表示平方,因此在英語(yǔ)中,卡方分布寫(xiě)作 distribution。

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

如果一個(gè)隨機(jī)變量 服從標(biāo)準(zhǔn)正態(tài)分布,即 ,那么 就服從自由度為1的卡方分布。記作 或者

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

或者寫(xiě)作 。

對(duì)于非負(fù)自變量 的自由度為 的卡方分布的概率密度函數(shù) (簡(jiǎn)稱(chēng)"pdf"):

(1)為什么 非負(fù)?因?yàn)楦鶕?jù)定義,卡方分布的自變量是一個(gè)平方和。

(2)這里的 是一個(gè)函數(shù)。關(guān)于這個(gè)函數(shù)具體是什么,以及上門(mén)的概率密度函數(shù)如何推導(dǎo),這里不展開(kāi),只需要知道有這么個(gè)函數(shù)即可。實(shí)在是好奇的,可以 參考這里 。

(3)卡方分布的均值為 ,而標(biāo)準(zhǔn)差為 。

(4)自由度越大,該函數(shù)圖像越對(duì)稱(chēng)。

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

卡方檢驗(yàn)有兩個(gè)用途:

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

獨(dú)立性檢驗(yàn) chi-squared test of independence

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

意思是說(shuō),在比賽中,有5次兩連投是一次都沒(méi)中,有82次是在兩連投中命中1次。現(xiàn)在,我們來(lái)用卡方檢驗(yàn)驗(yàn)證新聞?wù)f的0.8的命中率是否正確。零假設(shè)如下:

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

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

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

0次命中:

1次命中:

2次命中:

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

(2)我們來(lái)構(gòu)造卡方檢驗(yàn)統(tǒng)計(jì)量(chi-squared test statistic):

這個(gè)值是把表里每個(gè)格子的實(shí)際值和期望值進(jìn)行對(duì)比。為什么要用平方?目的在于規(guī)避正負(fù)號(hào)的影響。為什么要除以期望值?目的在于消除數(shù)量絕對(duì)值的影響。例如你預(yù)算3塊錢(qián)的水,商家加價(jià)50元,那么這個(gè)波動(dòng)是你無(wú)法忍受的,而你預(yù)算20萬(wàn)的車(chē),商家加價(jià)50元,則變得可以忍受。也就是說(shuō),除以期望值目的在于聚焦于變化率,而不是變化量。

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

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

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

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

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

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

不難理解,隨著統(tǒng)計(jì)量增大,表示預(yù)期的分布和實(shí)際的分布的差異也就越來(lái)越大。

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

輸出:statistic: 17.26, pvalue: 0.0002

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

進(jìn)一步的,我們來(lái)探索下,該運(yùn)動(dòng)員的兩連投的成功次數(shù)分?jǐn)?shù)是否真的符合二項(xiàng)分布。零假設(shè):

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

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

然后,用該概率值重復(fù)之前的計(jì)算,也就是先計(jì)算出一個(gè)期望的表格:

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

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

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

輸出:statistic: 0.34, pvalue: 0.56

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

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

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

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

我們的零假設(shè)應(yīng)該如何設(shè)計(jì)?如果要說(shuō)明兩者相互獨(dú)立,那么上表的分布應(yīng)該滿(mǎn)足乘法公式。也就是說(shuō)兩個(gè)獨(dú)立事件一起發(fā)生的概率等于分別發(fā)生的概率之積。

于是我們有:

發(fā)生麻煩的總?cè)藬?shù)除以總?cè)藬?shù)

不喝酒的總?cè)藬?shù)除以總?cè)藬?shù)

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

用類(lèi)似的算法,計(jì)算每一個(gè)格子在零假設(shè)成立的情況下的值,寫(xiě)在原表數(shù)據(jù)下的括號(hào)里:

仔細(xì)觀察可以看出,其實(shí)每個(gè)格子就是對(duì)應(yīng)的:

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

于是第一列的兩個(gè)格子應(yīng)該是:

對(duì)于其他格子、行的總和,都一樣,這里不多說(shuō)了。

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

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

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

實(shí)驗(yàn)結(jié)果是全部說(shuō)對(duì)了。那么問(wèn)題是,這是否具有統(tǒng)計(jì)顯著性呢?比如說(shuō)一個(gè)人猜對(duì)了一次硬幣,他的預(yù)測(cè)能力靠譜嗎?

我們假設(shè)女士的判斷是完全隨機(jī)的,這個(gè)是我們的零假設(shè)。那么8杯里面抽中4杯全對(duì)的概率是:

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

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

這個(gè)算起來(lái)比較麻煩,這里我寫(xiě)一個(gè) python 腳本來(lái)計(jì)算:

計(jì)算結(jié)果:

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

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

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

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

一般來(lái)說(shuō),兩者都適用的情況下,應(yīng)該優(yōu)先選擇 Fisher's exact test,因?yàn)樗蔷_值。如果實(shí)驗(yàn)觀察的數(shù)量很?。ㄐ∮?0),應(yīng)該不使用 chi-squared test。

下面使用一個(gè)腳本來(lái)計(jì)算:

當(dāng)前文章:python卡方分布函數(shù) python 分布函數(shù)
分享URL:http://muchs.cn/article48/hgidep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、App設(shè)計(jì)、網(wǎng)站制作、企業(yè)網(wǎng)站制作、手機(jī)網(wǎng)站建設(shè)虛擬主機(jī)

廣告

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

搜索引擎優(yōu)化