如何用python來做假設檢驗,求假設檢驗、置信區間、效應量

「來源: |Python之王 ID:sen13717378202」

我們再在進行資料分析時,簡單的資料分析不能深刻的反映一組資料得總體情況,倘若我們用統計學角度來分析資料則會解決一些平常解決不了得問題.

本編文章將會給大家講解 假設檢驗、置信區間、效應量.

其中假設檢驗包括:t檢驗,w檢驗,卡方檢驗,f檢驗 ,我將會一一在這篇文章中介紹並用

python

程式碼來進行對應實操。 (話不多說,整起!)

無論是什麼檢驗第一步永遠是 設立假設!

就像我們初中學的一樣已知一個非負數來求解。我們可以先認為它等於0,經過推到發現我們做得想法是錯誤的,從而推出該數是大於0的!

我們通常第一步都會給出假設(零假設:H0 備擇假設:H1)

假設檢驗的規則如下:H0: 零假設總是表述為研究沒有改變,沒有效果,不起作用等,這裡就是不滿足標準。(w檢驗和f檢驗另說!) H1: 則與零假設保持相反

接下里我會為大家舉倆個列子:

例1:H0:在知乎上不同賬號下瀏覽量沒有顯著區別 H1在知乎上不同賬號下的流量量有顯著區別 例2:H0:煤氣排放量不滿足國家排放標準 H1:煤氣排放量滿足國家排放標準

以下是建設檢驗具體步驟

如何用python來做假設檢驗,求假設檢驗、置信區間、效應量

好了話不多說了,我們開始實操!ps:一下所有檢驗均為a=0。05下:

卡方檢驗

卡方檢驗是假設檢驗中的一類方法,用於比較兩個分類變數的關聯性 但不能表示強弱,基本思想是比較理論頻數與實際頻數的吻合程度。

倆個分類變數中其中一個必須是二分類不能都是多分類

例:男女對動物的喜愛程度,不同性別下投選候選班長(小米,小王,小李) 等 二分類:男女,不同性別 多分類:動物,候選班長

例題

下面是abi啤酒挑戰賽的資料,

我希望知道平臺和菜系是否存在某種關係

如何用python來做假設檢驗,求假設檢驗、置信區間、效應量

我們透過資料可以發現菜系和平臺都是字元型,這裡我們使用一個交叉表來整理資料計算頻數:

import pandas as pd

import numpy as pd

data=pd。read_excel(r“”) #讀取資料檔案

a=pd。crosstab(index=data[“平臺”],columns=data[“菜系”],margins=True) #使用交叉表來處理資料

print(a)

如何用python來做假設檢驗,求假設檢驗、置信區間、效應量

我們可以發現不同平臺下的各類菜系的頻數如圖所示,我想知道平臺和菜系是否存在某種關係?接下來我們匯入統計學庫

scipy : from scipy import stats

Python提供的庫能快速的解決很多問題,那麼scipy也是如此,卡方分佈在scipy中含有特定的api,我們只需寫上函式即可知道結果。

程式碼如下:

from scipy import stats #匯入統計學庫

b=stats。chi2_contingency(a)[0:3] #該函式返回4個引數,但我們只要前3個! 分別是t,p,自由度

如何用python來做假設檢驗,求假設檢驗、置信區間、效應量

它返回的結果是元組格式(a:t值,b:p值,c:自由度) 當p值小於0。05,則我們拒絕原假設 當p值大於0。05,則我們接受原假設 如圖所示我們可以看到 p值為1。400*10的負33次方<0。05,則我們拒絕原假設,接受備擇假設

既平臺跟菜系有關係(但不知道是什麼關係)

要比較兩類關係的強弱我們需要用到t檢驗和其他檢驗,接下來我們來講t檢驗從而引出w檢驗和f檢驗

T檢驗

在說t檢驗之前,我們需要進一步完善假設檢驗的概念,

假設檢驗主要分為:1、單尾檢驗 2、雙尾檢驗

這倆種檢驗存在一下差異:一、檢驗目的不同:雙尾檢驗(也就是雙側檢驗)是要檢驗樣本平均數和總體平均數,或樣本成數有沒有顯著差異。而單尾檢驗(也就是單側檢驗)目的是檢驗樣本所取自的總體引數值是否大於或小於某個特定值

二、用法不同1、研究目的是想判斷兩個資料的均值是否不同, 需要用雙尾檢驗。2、研究目的是僅僅想知道一個數據的均值是不是高於(或低於)另一個數據, 則可以採用單尾檢驗。實際操作中要根據研究的目的和假設來選擇單尾檢驗還是雙尾檢驗,如果假設中有一引數和另一引數方向性的比較,比如“大於”、“好於”、“差於”等,一般選擇單尾檢驗。如果只是檢驗兩引數之間是否有差異,就選擇雙尾檢驗。1、如果問題是:中學生中,男女生的身高是否存在性別差異, 因為實際的差異可能是男生平均身高比女生高,也可能是男生平均比女生矮。這兩種情況都屬於存在性別差異。需要用雙尾檢驗。2、如果問題為:中學生中,男生的身高是否比女生高,這個時候需要採用單尾檢驗。

如何用python來做假設檢驗,求假設檢驗、置信區間、效應量

我們先說單側檢驗

一、單樣本檢驗案例:汽車引擎

“超級引擎”是一家專門生產汽車引擎的公司,根據政府釋出的新排放要求,引擎排放平均值要低於20ppm。某公司製造出10臺引擎供測試使用,每一臺的排放水平如下:15。6 16。2 22。5 20。5 16。4 19。4 16。6 17。9 12。7 13。9 Q:怎麼知道,該公司生產的引擎是否符合政府規定呢?

如何用python來做假設檢驗,求假設檢驗、置信區間、效應量

我們建立一個array的陣列將資料存入,並記入tm的平均數和 標準差:(方差的1/2方) 平均數:可以反映這組資料平均情況 標準差:可以反映這組資料的離散情況(方差)越小越穩定

接下來回的我們的問題 設立零假設和備選假設

零假設H0:平均值u>=20,也就是該公司引擎排放不滿足標準;備選假設H1:平均值u<20,也就是公司引擎排放滿足標準。

t檢驗需要一個前提:樣本必須是正態分佈或近似正態分佈,所以我們需要檢驗該樣本是否滿足正態分佈 正態分佈檢驗:W檢驗

Stats。shapiro() w檢驗

H0:屬於正態分佈 H1:不屬於正態分佈

from scipy import stats #匯入統計學模組庫

stats。shapiro(data) #將引數data傳入其中即可得到結果 1、統計數 2、p值

#(0。973,0。921) p=0。921>;0。05 接受原假設則它屬於正態分佈

我們可以發現該組資料符合正態分佈,同時我們也可以用seaborn來進行繪圖觀看!

如何用python來做假設檢驗,求假設檢驗、置信區間、效應量

接下來我們匯入scipy中的api來進行單樣本t檢驗!

from scipy import stats

stats。ttest_1samp(a,b) #a : 資料集(data) b:滿足條件(20)

我們得到如下答案:

如何用python來做假設檢驗,求假設檢驗、置信區間、效應量

因為是單尾檢驗,但是匯入的是雙尾api這裡就要進行運算:雙尾=單尾*2,我們用的到的 p值/2 得到 0.00745 即p=0.00745<0.05 則接受備擇假設:我們達到了政府排放的需求

接下來我們用置信區間來表達我們的平均值範圍:

置信區間上限a=總體平均值- |t|

標準誤差 置信區間下限b=總體平均值+|t| 標準誤差**

我們需要計算 標準誤差和t值

t值計算

自由度=n-1 在0。95下在t值表查詢具體的t值** df=10-1=9

如何用python來做假設檢驗,求假設檢驗、置信區間、效應量

因為樣本量為10則自由度=n-1=9,(1-95%=0.05)既在9和0.05那列尋找t值:2.262

標準誤差:

from scipy import stats

stats。sem(data) # data 為資料集,該函式只能計算一個數據集下的標準誤差!

我們用這段程式碼來進行分析:

如何用python來做假設檢驗,求假設檢驗、置信區間、效應量

透過得到t值和標準差b來進行公式計算得到置信區間的下界和上節,如圖所示:可以得到平均值最大、最小跳動在這個範圍裡

我們拒絕了原假設則說明我們的統計有差異,差異有多大呢?此處的差異就是效應量

效應量

如何用python來做假設檢驗,求假設檢驗、置信區間、效應量

效應量:當假設檢驗具有統計顯著的結論時,需要進一步研究是否具有實際有意義,即實驗結果是否“效果顯著”,衡量效果顯著用Cohen’s d指標。#它表示:樣本均值1和樣本均值2差距了幾個標準差,差距的大小衡量標準是:0。2以內為小;0。5以內為中;0。8以內為大。

接下里我們用程式碼來計算效應量:

d=(data。mean()-20)/data。std()

# d=-0。94 即我們與原假設差0。94個標準差!

從而給出分析報告

如何用python來做假設檢驗,求假設檢驗、置信區間、效應量

雙樣本t檢驗

雙樣本t檢驗用途很廣:不同賬號下不同瀏覽量是否有關係、男女消費水平是否有明顯顯著水平差異 等…

雙樣本t檢驗跟單樣本不同,他需要滿足一下幾個標準 兩樣本均來自於正態總體 兩樣本相互獨立 滿足方差齊性,方差齊次性指的是樣本的方差在一個數量級水平上(透過方差齊性檢驗:F檢驗)

因為兩個樣本是需要相互獨立的,所以這裡就需要使用

f檢驗來觀看是否滿足方差齊性

,不滿足也是可以的,python的api已經考慮過這個問題了,你只需要只能滿不滿足在輸入引數即可

接下來我會用下面的例子來進行一一講述:

例:在知乎不同網名下相同文章的瀏覽量是否有顯著差異

H0:沒有差異 H1:有差異

如何用python來做假設檢驗,求假設檢驗、置信區間、效應量

這是我這是我自己建立的一張表,來分析知乎一和知乎二名字和瀏覽量是否有顯著性差異

首先我們第一步要分析是否滿足正態分佈:w檢驗

如何用python來做假設檢驗,求假設檢驗、置信區間、效應量

如何用python來做假設檢驗,求假設檢驗、置信區間、效應量

我們匯入對應的api 得到p值分別分 0。62,0。59 >0。05既為正太分佈 滿足正態分佈

F檢驗

H0:倆樣本具有齊次性 H1:倆樣本不具有齊次性

from scipy import stats

leneneTestRes=stats。levene(data。iloc[0,1:]。values,data。iloc[1,1:]。values)

print(leneneTestRes)

#

如何用python來做假設檢驗,求假設檢驗、置信區間、效應量

p=0。242>0。05,則接受原假設,倆樣本方差具有齊次性

接下來使用雙樣本t檢驗:

如何用python來做假設檢驗,求假設檢驗、置信區間、效應量

如何用python來做假設檢驗,求假設檢驗、置信區間、效應量

P=0.244>0.05,接受原假設,不同名字下瀏覽量沒有差異

沒有差異下,就可以不用看效應量了。

完整程式碼如下:

如何用python來做假設檢驗,求假設檢驗、置信區間、效應量

如何用python來做假設檢驗,求假設檢驗、置信區間、效應量

如何用python來做假設檢驗,求假設檢驗、置信區間、效應量

Python“

寶藏級

”公眾號【

Python之王

】專注於Python領域,

會爬蟲,數分,C++,tensorflow和Pytorch等等

近 2年共原創 100+ 篇技術文章。創作的精品

文章系列

有:

Python從入門到大師

P

ython爬蟲專欄

ython爬蟲專欄

資料分析

機器學習

日常收集整理了一批不錯的

AI基礎

學習資料,有需要的小夥可以自行免費領取。

Python

獲取方式如下:

回覆

公眾號

。領取Python等系列筆記,專案,書籍,直接套上模板就可以用了。

資料