統(tǒng)計學(xué)中的各種檢驗-scipy.stats和statsmodels.stats的使用

這里會羅列一些統(tǒng)計學(xué)中的檢驗方法,當(dāng)然順序以筆者遇到的為準(zhǔn)孝赫。

1.方差分析

1.1 概述

對于均值的檢驗募疮,一般分為以下幾種情況:

  • 某樣本均值與常數(shù)的比較
  • 兩個樣本均值的比較
  • 兩個以上樣本均值的比較
    對于前兩種檢驗,用t檢驗和z檢驗完全可以handle挤牛,第三種也可以用t/z檢驗兩兩進(jìn)行泥张,但是畢竟耗時呵恢,用方差分析就可以解決這個問題了。
    這個問題面試滴滴的時候有被問到,立志做數(shù)據(jù)科學(xué)家的朋友們,還是學(xué)習(xí)一下携茂。
    比較常用的方差分析方法包括:單因素方差分析坦辟、多因素方差分析鳄橘、協(xié)方差分析声离、多元方差分析、重復(fù)測量方差分析瘫怜、方差成分分析等。

1.2 常用術(shù)語

  • 因素
    因素是方差分析的研究對象鲸湃,是一個獨立的變量赠涮,比如飲料的不用顏色就是因素。
  • 水平
    因素的取值就是水平暗挑,比如飲料顏色的紅世囊、黃、藍(lán)窿祥、綠就是水平。
  • 控制變量
    方差分析中可以人為控制的變量蝙寨,比如飲料的顏色晒衩。
  • 隨機(jī)變量
    與控制變量相對應(yīng)就是不可以人為控制的變量。
  • 觀察變量與觀察值
    方差分析中受控制變量和隨機(jī)變量影響下觀察的目標(biāo)成為觀察變量墙歪,觀測得到的數(shù)值就是觀察值听系。飲料再不同顏色的銷售額就是觀測變量,具體的取值就是觀察值虹菲。

1.3 單因素方差分析原理

進(jìn)行方差分析的要滿足兩個前提:

  • 總體服從正態(tài)分布
  • 樣本滿足方差齊性
    方差分析的目的是檢驗各個樣本的均值是否相等靠胜,原假設(shè)是樣本均值相等,備擇假設(shè)是樣本均值不相等毕源。一般來說造成均值差異的原因有兩個:
  • 因素水平不同造成的差異浪漠,成為系統(tǒng)性誤差。
    承接飲料這個案例霎褐,飲料顏色就是系統(tǒng)性誤差址愿。系統(tǒng)性誤差用組間方差來衡量,當(dāng)然組間方差有可以衡量隨機(jī)性誤差冻璃,但主要是為了衡量系統(tǒng)性誤差响谓。
  • 樣本抽樣隨機(jī)性造成的誤差,成為隨機(jī)性誤差省艳。
    同樣娘纷,飲料在不同商場的銷售額也不同,這是隨機(jī)性誤差跋炕。隨機(jī)性誤差用組內(nèi)方差來衡量赖晶。
    如果因素水平對觀察變量影響不大,那么組間方差只有隨機(jī)性誤差的影響枣购,組間方差和組內(nèi)方差的比接近于1嬉探,相反則大于1擦耀,當(dāng)這個比值大于某個值的時候我們就可以得到顯著性差異的結(jié)論。方差分析就是通過比較方差做出接受或拒絕原假設(shè)的結(jié)論涩堤。

1.4 單因素方差分析案例

飲料案例眷蜓,我們要觀察飲料的不同顏色對銷售額是不是有顯著的影響,基礎(chǔ)數(shù)據(jù)如下:


基礎(chǔ)數(shù)據(jù)
  • 建立假設(shè)
    原假設(shè):飲料顏色對銷售額沒有顯著影響胎围。
    備擇假設(shè):飲料顏色對銷售額有顯著影響吁系。
  • 計算樣本均值和總體均值
  • 計算組間方差和和組內(nèi)方差和
  • 構(gòu)造F檢驗統(tǒng)計量
    這里注意自由度的問題:


    F檢驗統(tǒng)計量計算過程
  • 確定檢驗規(guī)則,做出決策
    1)P值檢驗
    根據(jù)F檢驗統(tǒng)計量計算P值白魂,此處計算的P值為0.000466汽纤,小于顯著性水平0.05,拒絕原假設(shè)福荸,接受備擇假設(shè)蕴坪,即飲料顏色對銷售額有顯著影響。
    P值是根據(jù)概率密度函數(shù)求的敬锐。
    2)臨界值
    臨界值是根據(jù)假設(shè)檢驗類型查表得到的背传,比如顯著性水平α=0.05,是雙側(cè)檢驗台夺,F(xiàn)檢驗的臨界值是3.24径玖,那么計算值F=10.486>3.24,是拒絕原假設(shè)颤介,所以認(rèn)為不同顏色是有顯著差異的梳星。

1.5 python實現(xiàn)方差檢驗

很遺憾,python里沒有包直接做方差分析滚朵,但是自己實現(xiàn)一個類應(yīng)該是很簡單的冤灾。
python里有方差齊性檢驗的包叫l(wèi)evene,在scipy里辕近,直接調(diào)用scipy.stats.levene(rvs1, rvs2)
-- 2020.4.13更新
筆者原來說python里沒有方差檢驗的包瞳购,筆者說錯了,今天無意中發(fā)現(xiàn)
statsmodels.stats.power.FTestAnovaPower是可以進(jìn)行方差檢驗的亏推。

2.t檢驗

t檢驗的概念是通過比較不同數(shù)據(jù)之間的差值学赛,以觀察數(shù)據(jù)之間有沒有顯著差異。適用于小樣本(30個以下)吞杭,總體方差未知的情況盏浇。
t檢驗有幾個假設(shè)條件:

  • 總體分布服從正態(tài)或近似服從正態(tài)分布。
  • 檢驗定量數(shù)據(jù)芽狗,即數(shù)據(jù)大小是有意義的绢掰,對于分類數(shù)據(jù)的檢驗請移步卡方檢驗。
    t檢驗有以下三種:
  • 單樣本t檢驗,檢驗單個樣本數(shù)據(jù)與某一個數(shù)據(jù)是否有顯著差異滴劲。比如檢驗燈泡平均壽命是不是等于3000小時攻晒。來看一下公式:


    標(biāo)準(zhǔn)誤差計算方法

    單樣本t檢驗計算公式

    這個很簡單了,使用python的包就可以求解:
    scipy.stats.ttest_1samp(data,pop_mean)其中班挖,data是樣本數(shù)據(jù)鲁捏,pop_mean是總體均值。一個小demo如下:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import stats
data = pd.Series([15.6,16.2 ,22.5 ,20.5 ,16.4 ,19.4 ,16.6, 17.9 ,12.7, 13.9])
data_mean = data.mean()
data_std = data.std()
pop_mean=20
t,p_towTail = stats.ttest_1samp(data,pop_mean)
  • 獨立樣本t檢驗
    用于分析定類數(shù)據(jù)與定量數(shù)據(jù)之間的關(guān)系萧芙,如男女生的身高是否有顯著差異给梅。獨立樣本t檢驗假設(shè)樣本來自于兩個不同的獨立總體,但方差相同双揪,除了要求單樣本t檢驗的那些條件动羽,還要求兩個樣本之間具有方差,需要進(jìn)行方差齊性檢驗渔期,參考方差分析运吓。
    計算方法我在網(wǎng)上找了一個ppt講解的很好:


    image.png

    python實現(xiàn)用的是scipy.stats.ttest_ind,來看一個小demo:

from  scipy.stats import ttest_ind, levene
import pandas as pd
x = [20.5, 19.8, 19.7, 20.4, 20.1, 20.0, 19.0, 19.9]
y = [20.7, 19.8, 19.5, 20.8, 20.4, 19.6, 20.2]
print(levene(x,y))
print(ttest_ind(x, y))
#levene檢驗p值大于0.05認(rèn)為是滿足方差齊性的疯趟,如果不滿足則加一個參數(shù)equal_var=False
print(ttest_ind(x,y,equal_var=False))
  • 配對樣本t檢驗
    配對樣本T檢驗用于分析配對定量數(shù)據(jù)之間的差異對比關(guān)系羽德,這個就和獨立樣本t檢驗區(qū)分開了,要求樣本量相同且前后順序要一一對應(yīng)迅办。比如通過兩組數(shù)據(jù)的對比分析,判斷背景音樂是否會影響消費行為章蚣。配對樣本t檢驗可以通過差值轉(zhuǎn)化為單樣本t檢驗:


    配對樣本t檢驗原理

    python實現(xiàn)用的是scipy.stats.ttest_rel(data1,data2)站欺,來看一個小demo:

from  scipy.stats import ttest_rel
import pandas as pd
x = [20.5, 18.8, 19.8, 20.9, 21.5, 19.5, 21.0, 21.2]
y = [17.7, 20.3, 20.0, 18.8, 19.0, 20.1, 20.0, 19.1]
# 配對樣本t檢驗
print(ttest_rel(x, y))

3.Z檢驗

Z檢驗和t檢驗其實一樣,都是對均值進(jìn)行檢驗纤垂,但是不一樣的地方在于Z檢驗要求樣本量比較大矾策,并且總體方差已知。由于t檢驗不要求總體方差已知峭沦,所以t檢驗的應(yīng)用范圍比較廣贾虽。Z檢驗其實和t檢驗有相同的計算形式:


Z檢驗的計算公式

python實現(xiàn)用的是scipy.stats.weightstats.ztest(data1,data2),來看一個小demo:

import statsmodels.stats.weightstats as sw
arr=[23,36,42,34,39,34,35,42,53,28,49,39,\
46,45,39,38,45,27,43,54,36,34,48,36,\
47,44,48,45,44,33,24,40,50,32,39,31]
sw.ztest(arr, value=39)

當(dāng)然了單樣本和雙樣本都可以做吼鱼。Z檢驗就不過多介紹了蓬豁。

4.F檢驗

如果大家還有印象,我們之前用F檢驗做過方差齊性分析菇肃。F檢驗還有一個廣為人知的名字叫聯(lián)合假設(shè)檢驗地粪,主要用在方差分析中。


計算公式如下

怎么實現(xiàn)我們之前已經(jīng)講過了琐谤,用scipy.stats.levene這個準(zhǔn)沒錯蟆技。

5.卡方檢驗

卡方檢驗是用于檢驗樣本實際值與理論值之間是否存在顯著差異,原假設(shè)是沒有顯著差異的。舉兩個好理解的例子:卡方檢驗可以檢驗?zāi)行曰蛘吲詫€上買生鮮食品有沒有區(qū)別质礼;也可以檢驗不同城市級別的消費者對買SUV車有沒有什么區(qū)別旺聚。
具體計算過程可以看這篇文章,講的很好:卡方檢驗的實際應(yīng)用
python實現(xiàn)用的是scipy.stats.chisquare眶蕉,來看一個小demo:

import scipy.stats as ss
obs=[107,198,192,125,132,248]
exp=[167]*6
#拒絕域 1%的顯著水平,自由度5
#jjy=ss.chi2.isf(0.01,5)
#卡方
kf=ss.chisquare(obs,f_exp=exp).statistic

6.比率檢驗

這個真的是太神奇了砰粹,通常用在互聯(lián)網(wǎng)中,用來比較兩個比率有沒有顯著差異妻坝。
使用A方案的付費轉(zhuǎn)化率為30%伸眶,使用B方案的付費轉(zhuǎn)化率為34%,可以檢驗這兩個轉(zhuǎn)化率之間是否有顯著不同刽宪。本質(zhì)和z檢驗一樣厘贼,把標(biāo)準(zhǔn)差換成了比例而已,可以用單樣本也可以用雙樣本圣拄。

比率檢驗統(tǒng)計量計算公式

其中π0是總體比率嘴秸,p是樣本比率。
比率檢驗的演化
用python的話調(diào)用statsmodels.stats里的相關(guān)函數(shù)庇谆,來看個小demo:
from statsmodels.stats.proportion import proportion_effectsize
from statsmodels.stats.power import zt_ind_solve_power
effect_size=proportion_effectsize(prop1=0.3, prop2=0.4, method=‘normal‘)
sample_size=zt_ind_solve_power(effect_size=effect_size, nobs1=None, alpha=0.05, power=0.8, ratio=1.0, alternative=‘two-sided‘)
這個包可以推廣到以上的F檢驗岳掐,t檢驗和Z檢驗。
基本上檢驗的方法和用途都說完了饭耳,希望起到啟發(fā)的作用串述,大家如有需要可以探索更多假設(shè)檢驗的方法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末寞肖,一起剝皮案震驚了整個濱河市纲酗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌新蟆,老刑警劉巖觅赊,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異琼稻,居然都是意外死亡吮螺,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門帕翻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鸠补,“玉大人,你說我怎么就攤上這事嘀掸∧迹” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵横殴,是天一觀的道長被因。 經(jīng)常有香客問我卿拴,道長,這世上最難降的妖魔是什么梨与? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任堕花,我火速辦了婚禮,結(jié)果婚禮上粥鞋,老公的妹妹穿的比我還像新娘缘挽。我一直安慰自己,他們只是感情好呻粹,可當(dāng)我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布壕曼。 她就那樣靜靜地躺著,像睡著了一般等浊。 火紅的嫁衣襯著肌膚如雪腮郊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天筹燕,我揣著相機(jī)與錄音轧飞,去河邊找鬼。 笑死撒踪,一個胖子當(dāng)著我的面吹牛过咬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播制妄,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼掸绞,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了耕捞?” 一聲冷哼從身側(cè)響起衔掸,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎砸脊,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體纬霞,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡凌埂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了诗芜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瞳抓。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖伏恐,靈堂內(nèi)的尸體忽然破棺而出孩哑,到底是詐尸還是另有隱情,我是刑警寧澤翠桦,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布横蜒,位于F島的核電站胳蛮,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏丛晌。R本人自食惡果不足惜仅炊,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望澎蛛。 院中可真熱鬧抚垄,春花似錦、人聲如沸谋逻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽毁兆。三九已至浙滤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間荧恍,已是汗流浹背瓷叫。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留送巡,地道東北人摹菠。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像骗爆,于是被迫代替她去往敵國和親次氨。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容