這里會羅列一些統(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ù)如下:
- 建立假設(shè)
原假設(shè):飲料顏色對銷售額沒有顯著影響胎围。
備擇假設(shè):飲料顏色對銷售額有顯著影響吁系。 - 計算樣本均值和總體均值
- 計算組間方差和和組內(nèi)方差和
-
構(gòu)造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小時攻晒。來看一下公式:
這個很簡單了,使用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講解的很好:
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檢驗:
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檢驗有相同的計算形式:
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)差換成了比例而已,可以用單樣本也可以用雙樣本圣拄。
其中π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è)檢驗的方法。