python 比例之差z假设检验_假设检验在数据分析中的应用
前言
Z檢驗(yàn)
T檢驗(yàn)
獨(dú)立樣本t檢驗(yàn)
配對(duì)樣本t檢驗(yàn)
單樣本t檢驗(yàn)
前言
在這篇文章中,我不會(huì)具體去推導(dǎo)檢驗(yàn)統(tǒng)計(jì)量和相應(yīng)拒絕域的得出,這對(duì)于大部分非統(tǒng)計(jì)學(xué)專業(yè)的人士來(lái)說(shuō)是晦澀的,我只想通過(guò)一個(gè)案例告訴大部分初學(xué)者假設(shè)檢驗(yàn)怎么在數(shù)據(jù)挖掘中使用。
%matplotlib?inlineimport?matplotlib.pyplot?as?plt
import?pandas?as?pd
import?numpy?as?np
import?seaborn?as?sns
from?scipy?import?stats
from?statsmodels.stats?import?weightstats?as?mstats
df_exams?=?pd.read_csv('./StudentsPerformance.csv')
df_exams.head()
df_exams.rename(columns={'race/ethnicity':'ethnicity'},inplace=True)
df_exams.rename(columns={'parental?level?of?education':'parents_education'},inplace=True)
df_exams.rename(columns={'test?preparation?course':'test_prep_course'},inplace=True)
df_exams.rename(columns={'math?score':'math_score'},inplace=True)
df_exams.rename(columns={'reading?score':'reading_score'},inplace=True)
df_exams.rename(columns={'writing?score':'writing_score'},inplace=True)
查看前5行的信息
df_exams.head()接下來(lái)查看類別型數(shù)據(jù)是否均勻,數(shù)值型數(shù)據(jù)是否服從正態(tài)分布。
df_exams['ethnicity'].value_counts()group C 319
group D 262
group B 190
group E 140
group A 89
Name: ethnicity, dtype: int64
以宗族信息這一列為例,可以看出C的占比較重,group A 只有89例。這也就說(shuō)明當(dāng)選擇從每個(gè)group抽取80個(gè)樣本是不合適的,因?yàn)檫@對(duì)A來(lái)說(shuō)每次抽取,樣本信息幾乎沒(méi)有發(fā)生什么變化。
exams?=?['math_score','reading_score','writing_score']for?exam?in?exams:
????y?=?df_exams[exam]
????plt.figure(1);?plt.title('Normal')
????sns.distplot(y,?kde=False,?fit=stats.norm)
????plt.figure(2);?plt.title('Johnson?SU')
????sns.distplot(y,?kde=False,?fit=stats.johnsonsu)
????fig?=?plt.figure()
????res?=?stats.probplot(df_exams[exam],?plot=plt)
????plt.show()
這些圖片說(shuō)明數(shù)據(jù)并不是完全服從正態(tài)分布,密度函數(shù)的尾部與正態(tài)分布有些偏離,但大體還是可以認(rèn)為近似服從正態(tài)分布的,如果數(shù)據(jù)不服從正態(tài)分布,Z檢驗(yàn)和T檢驗(yàn)將是無(wú)法使用的。到目前為止請(qǐng)注意,我們用的都是全部的數(shù)據(jù)喲,而假設(shè)檢驗(yàn)的思想是用樣本的信息來(lái)推斷總體的信息,所以接下來(lái)我們要從總體中取出樣本。
#?從總體中隨機(jī)抽取一定比例的樣本df_exams?=?df_exams.sample(frac=1)
假設(shè)檢驗(yàn)被用來(lái)以科學(xué)嚴(yán)謹(jǐn)?shù)姆绞綑z驗(yàn)一個(gè)關(guān)于數(shù)據(jù)的理論,這樣我們就不會(huì)僅僅依賴于偶然性或主觀假設(shè)。接下來(lái)我們要進(jìn)行的是兩個(gè)正態(tài)總體均值的檢驗(yàn),以學(xué)生分?jǐn)?shù)為例,就是去檢驗(yàn)兩個(gè)不同的group的分?jǐn)?shù)是否有明顯的不同 。當(dāng)建立一個(gè)假設(shè)檢驗(yàn)時(shí),有一個(gè)原假設(shè)和一個(gè)備擇假設(shè)。還必須設(shè)置顯著性水平,通常為5%(Scipy,statsmodel)。假設(shè)檢驗(yàn)可以分為單尾或雙尾。單尾的情況,例如,“A組得分>B組”。雙尾的情況例如“A組的得分與B組不同”。簡(jiǎn)單介紹了這些 接下來(lái),我們從a組和B組各抽取50名學(xué)生作為樣本,然后計(jì)算該數(shù)據(jù)樣本的Z分?jǐn)?shù)。
?z分?jǐn)?shù)可以回答這樣一個(gè)問(wèn)題:“一個(gè)給定數(shù)距離平均數(shù)多少個(gè)標(biāo)準(zhǔn)差?”,在平均數(shù)之上的分?jǐn)?shù)會(huì)得到一個(gè)正的標(biāo)準(zhǔn)分?jǐn)?shù),在平均數(shù)之下的分?jǐn)?shù)會(huì)得到一個(gè)負(fù)的標(biāo)準(zhǔn)分?jǐn)?shù)。z分?jǐn)?shù)是一種可以看出某分?jǐn)?shù)在分布中相對(duì)位置的方法。
?group_a_sample?=?df_exams[df_exams['ethnicity']?==?'group?A']group_a_sample?=?group_a_sample[:50]
#?繪制QQ圖,檢驗(yàn)正態(tài)性
fig?=?plt.figure()
res?=?stats.probplot(group_a_sample['math_score'],?plot=plt)
plt.show()
group_b_sample?=?df_exams[df_exams['ethnicity']?==?'group?B']
group_b_sample?=?group_b_sample[:50]
fig?=?plt.figure()
res?=?stats.probplot(group_b_sample['math_score'],?plot=plt)
plt.show()
print(stats.zscore(group_a_sample['math_score']))
print(stats.zscore(group_b_sample['math_score']))
[ 0.47126865 0.05544337 2.06526555 0.26335601 0.33266022 -0.01386084
0.26335601 -0.77620719 0.05544337 0.54057286 -1.67716196 -0.01386084
-0.91481561 2.68900347 -1.19203247 1.37222342 -0.70690297 -0.56829455
0.7484855 -0.56829455 -0.70690297 -0.49899034 0.26335601 1.09500657
0.67918129 -1.60785775 0.33266022 0.47126865 -0.2910777 -0.36038191
0.67918129 -0.8455114 -1.8850746 -0.42968612 0.7484855 -1.46924932
-0.98411983 1.09500657 -0.98411983 0.47126865 -0.15246927 1.7880487
-0.2910777 0.1940518 -0.15246927 -0.56829455 0.12474758 2.48109083
-0.22177348 -1.39994511]
[-0.68278212 -2.57240054 -0.05290932 -1.69057861 0.26202709 -0.17888388
-0.24187116 0.57696349 -0.7457694 -0.17888388 0.70293805 0.82891261
0.45098893 -0.36784572 0.82891261 0.07306525 -0.93473124 -0.430833
0.26202709 -0.99771852 1.33281086 -0.87174396 1.5217727 1.89969638
1.08086173 -0.80875668 0.57696349 0.13605253 -0.99771852 0.63995077
0.51397621 -1.43862949 2.08865822 -0.36784572 1.64774726 -2.50941326
-0.55680756 -0.36784572 -0.05290932 1.14384902 -1.50161677 0.32501437
0.07306525 0.13605253 0.13605253 0.95488717 1.08086173 -0.61979484
0.19903981 -0.30485844]
Z檢驗(yàn)
下面的代碼是z測(cè)試的一個(gè)示例。測(cè)試是看A組樣本的“數(shù)學(xué)平均得分”是否小于總體平均值。
A組學(xué)生的平均“數(shù)學(xué)成績(jī)”與總體平均值相同。
A組學(xué)生的平均“數(shù)學(xué)成績(jī)”小于總體平均值。
首先介紹一下statsmodels 包中的 ztest 函數(shù)的一般用法如下:
#?計(jì)算總體均值和樣本均值population_mean?=?df_exams['math_score'].mean()
sample_group_a_mean?=?group_a_sample['math_score'].mean()
print(population_mean,sample_group_a_mean)
#?這是單樣本檢驗(yàn)
zstats,?pvalue?=?mstats.ztest(group_a_sample['math_score'],x2=None,value=population_mean,alternative='smaller')
print(pvalue)
66.089 61.2
0.008850880637695917
可以看出P值非常的小,小于5%,則在顯著性水平為5%的條件下,我們要拒絕原假設(shè)
T檢驗(yàn)
在T檢驗(yàn)中,假設(shè)樣本為正態(tài)分布,且總體參數(shù)未知。有3種情況:
獨(dú)立樣本t檢驗(yàn),比較兩個(gè)樣本所代表的兩個(gè)總體均值是否存在顯著差異。除了要求樣本來(lái)自正態(tài)分布,還要求兩個(gè)樣本的總體方差相等(ttest_ind)
配對(duì)樣本t檢驗(yàn),配對(duì)樣本主要是同一實(shí)驗(yàn)前后效果的比較,或者同一樣品用兩種方法檢驗(yàn)結(jié)果的比較。可以把配對(duì)樣本的差作為變量(ttest_rel)
單樣本t檢驗(yàn),單樣本t檢驗(yàn)是樣本均值與總體均值的比較問(wèn)題。其中總體服從正態(tài)分布,總體的方差未知,從正態(tài)總體中抽樣得到n個(gè)個(gè)體組成抽樣樣本,計(jì)算抽樣樣本均值和標(biāo)準(zhǔn)差,判斷總體均值與抽樣樣本均值是否相同。(ttest_1samp)
下面是這3個(gè)假設(shè)檢驗(yàn)的例子。注意:樣本的隨機(jī)性導(dǎo)致他們可能通過(guò)也可能不通過(guò)假設(shè),所以可能你得到的結(jié)論和我不同。
獨(dú)立樣本t檢驗(yàn)
讓我們來(lái)看看A組和B組在“數(shù)學(xué)成績(jī)”功能上的得分是否不同。
=樣本組A的平均“數(shù)學(xué)成績(jī)”與樣本組B相同。
=樣本組A的平均“數(shù)學(xué)成績(jī)”與樣本組B不同。
在5%顯著性水平下測(cè)試。這是一個(gè)雙尾檢驗(yàn)。
#?當(dāng)不確定兩總體方差是否相等時(shí),應(yīng)先利用levene檢驗(yàn),檢驗(yàn)兩總體是否具有方差齊性。print(stats.levene(group_a_sample['math_score'],group_b_sample['math_score']))
print(group_a_sample['math_score'].var(),group_b_sample['math_score'].var())
tscore,pvalue?=?stats.ttest_ind(group_a_sample['math_score'],group_b_sample['math_score'],equal_var=False)
print(pvalue)
print(group_a_sample['math_score'].mean(),group_b_sample['math_score'].mean())
LeveneResult(statistic=0.3789408560110682, pvalue=0.5395976230546553)
212.44897959183675 257.1983673469388
0.39114162148079246
61.2 63.84
P值小于5%,則在顯著性水平為5%的條件下,我們應(yīng)拒絕原假設(shè),認(rèn)為兩組成績(jī)不相同。
配對(duì)樣本t檢驗(yàn)
接下來(lái)看看A組在“數(shù)學(xué)成績(jī)”和“閱讀成績(jī)”上的得分是否不同。
=樣本組A的平均“數(shù)學(xué)成績(jī)”與“閱讀成績(jī)”相同。
=樣本組A的平均“數(shù)學(xué)成績(jī)”與“閱讀成績(jī)”不同。
在5%顯著性水平下測(cè)試。使用ttest_rel,這是一個(gè)雙尾檢驗(yàn)。
tscore,pvalue?=?stats.ttest_rel(group_a_sample['math_score'],group_a_sample['reading_score'])print(pvalue)
print(group_a_sample['math_score'].mean(),group_a_sample['reading_score'].mean())
0.025329567098176128
61.2 64.26
P值小于5%,則在顯著性水平為5%的條件下,我們應(yīng)拒絕原假設(shè),認(rèn)為兩個(gè)科目的成績(jī)不相同。
單樣本t檢驗(yàn)
讓我們看看A組樣本的平均“數(shù)學(xué)分?jǐn)?shù)”是否與總體平均值相同。
=樣本組A的平均“數(shù)學(xué)成績(jī)”與總體“數(shù)學(xué)成績(jī)”平均值相同。
=樣本組A的平均“數(shù)學(xué)成績(jī)”與總體“數(shù)學(xué)成績(jī)”平均數(shù)不同。
在5%顯著性水平下測(cè)試。這是一個(gè)雙尾測(cè)試。
tscore,pvalue?=?stats.ttest_1samp(group_a_sample['math_score'],df_exams['math_score'].mean())print(pvalue)
print(group_a_sample['math_score'].mean(),df_exams['math_score'].mean())
0.02167469754070706
61.2 66.089
P值小于5%,則在顯著性水平為5%的條件下,我們應(yīng)拒絕原假設(shè)。
后期文章將會(huì)涉及其他類型的檢驗(yàn),方差分析,一元回歸分析等,我將盡量減少不必要的數(shù)學(xué)推導(dǎo)公式,把最通俗易懂的內(nèi)容呈現(xiàn)給大家。
由于微信平臺(tái)算法改版,公號(hào)內(nèi)容將不再以時(shí)間排序展示,如果大家想第一時(shí)間看到我們的推送,強(qiáng)烈建議星標(biāo)我們和給我們多點(diǎn)點(diǎn)【在看】。星標(biāo)具體步驟為:
(1)點(diǎn)擊頁(yè)面最上方“小詹學(xué)Python”,進(jìn)入公眾號(hào)主頁(yè)。
(2)點(diǎn)擊右上角的小點(diǎn)點(diǎn),在彈出頁(yè)面點(diǎn)擊“設(shè)為星標(biāo)”,就可以啦。
感謝支持,比心。
總結(jié)
以上是生活随笔為你收集整理的python 比例之差z假设检验_假设检验在数据分析中的应用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python递归函数讲解_带你深入学习P
- 下一篇: rpm包安装mysql数据库