
久經考場的你肯定對于很多概念類題目里問到的 “區(qū)別和聯(lián)系” 不陌生,與之類似,在統(tǒng)計領域要研究的是數(shù)據(jù)之間的區(qū)別和聯(lián)系 ,也就是差異性分析和相關性分析。本節(jié)我們重點關注數(shù)據(jù)的差異性分析。
我們知道,比較兩個數(shù)之間的大小,要么前后兩者求差,要么求比。差值大于零說明前者大于后者。比值大于1說明分子大于分母。
那么如何比較兩組數(shù)據(jù)的差異性呢?大道至簡,其實和上面原理類似
我們先從簡單的看起,先比較一組數(shù)和一個給定數(shù)的差異,即,單個總體的差異性分析:
常見的單個總體差異性的假設檢驗分為3個類型:均值、比例、方差
顧名思義,就是檢驗指定值與樣本均值的差異,按是否已知可以分2種情況:
接下來我們用代碼舉例實現(xiàn)一下你就明白怎么用了:
例5.1 檢驗一批廠家生產的紅糖是否夠標重
監(jiān)督部門稱了50包標重500g的紅糖,均值是498.35g,少于所標的500g。對于廠家生產的這批紅糖平均起來是否夠份量,需要統(tǒng)計檢驗。
分析過程: 由于廠家聲稱每袋500g,因此原假設為總體均值等于500g(被懷疑對象總是放在零假設)。而且由于樣本均值少于500g(這是懷疑的根據(jù)),把備擇假設設定為總體均值少于500g (上面這種備選假設為單向不等式的檢驗稱為單側檢驗,而備選假設為不等號“”的稱為雙側檢驗,后面會解釋)
于是我們有了原假設和備擇假設
:
引入相關庫、讀取數(shù)據(jù)如下
from scipy import stats
import scipy.stats
import numpy as np
import pandas as pd
import statsmodels.stats.weightstats
data = [493.01,498.83,494.16,500.39,497.63,499.72,493.41,498.97,501.94,503.45,497.47,494.19,500.99,495.81,499.63,494.91,498.90,502.43,491.34,497.50,505.95,496.56,501.66,492.02,497.68,493.48,505.40,499.21,505.84,499.41,505.65,500.51,489.53,496.55,492.26,498.91,496.65,496.38,497.16,498.91,490.98,499.97,501.21,502.85,494.35,502.96,506.21,497.66,504.66,492.11]
進行z檢驗:
z, pval = statsmodels.stats.weightstats.ztest(data, value=500,alternative = 'smaller')
# 'two-sided': 樣本均值與給定的總體均值不同
# 'larger' : 樣本均值小于給定總體均值
# 'smaller' : 樣本均值大于給定總體均值
print(z,pval)
# -2.6961912076362085 0.0035068696715304876
結論: 選擇顯著性水平 0.05 的話,P=0.0035 < 0.05
, 故應該拒絕原假設。具體來說就是該結果傾向于支持平均重量小于500g的備則假設。
例5.2 檢驗汽車實際排放是否低于其聲稱的排放標準
汽車廠商聲稱其發(fā)動機排放標準的一個指標平均低于20個單位。在抽查了10臺發(fā)動機之后,得到下面的排放數(shù)據(jù):
17.0 21.7 17.9 22.9 20.7 22.4 17.3 21.8 24.2 25.4
該樣本均值為21.13.究竟能否由此認為該指標均值超過20?
分析過程: 由于廠家聲稱指標平均低于20個單位,因此原假設為總體均值等于20個單位(被懷疑對象總是放在零假設)。而且由于樣本均值大于20(這是懷疑的根據(jù)),把備擇假設設定為總體均值大于20個單位
于是我們有了原假設和備擇假設
:
讀取數(shù)據(jù)如下
data = [17.0, 21.7, 17.9, 22.9, 20.7, 22.4, 17.3, 21.8, 24.2, 25.4]
進行t檢驗如下:
import scipy.stats
t, pval = scipy.stats.ttest_1samp(a = data, popmean=20,alternative = 'greater')
# 說明
# a 為給定的樣本數(shù)據(jù)
# popmean 為給定的總體均值
# alternative 定義備擇假設。以下選項可用(默認為“two-sided”):
# ‘two-sided’:樣本均值與給定的總體均值(popmean)不同
# ‘less’:樣本均值小于給定總體均值(popmean)
# ‘greater’:樣本均值大于給定總體均值(popmean)
print(t, pval)
# '''
# P= 0.004793 < 5%, 拒絕原假設,接受備擇假設樣本
# '''
結論: 選擇顯著性水平 0.01 的話,P=0.1243 > 0.05
, 故無法拒絕原假設。具體來說就是該結果無法支持指標均值超過20的備則假設。
例5.3 檢驗高爾夫球場女性球員比例是否因促銷活動而升高
某高爾夫球場去年打球?????????的人當中有20%是女性,為了增加女性球員的比例,該球場推出了一項促銷活動來吸引更多的女性參加高爾夫運動,在活動實施了1個月后,球場的研究者想通過統(tǒng)計分析研究確定高爾夫球場的女性球員比例是否上升,收集到了400個隨機樣本,其中有100是女性
分析過程: 由于研究的是女性球員所占的比例是否上升,因此選擇上側檢驗比較合適,備擇假設是比例大于20%
:
import numpy as np
from statsmodels.stats.proportion import proportions_ztest
count = 100
nobs = 400
p_0 = 0.2
p_bar = count/nobs
p_0 = 0.2
n = 400
# 執(zhí)行單一樣本比例檢驗 statsmodels.stats.proportion.proportions_ztest
z_statistic, p_value = proportions_ztest(count, nobs, value = p_0,alternative='larger',prop_var = value)
# 注:statsmodels.stats.proportion.proportions_ztest 的函數(shù)有幾個問題:講在第八節(jié)之后說明,感興趣的讀者請持續(xù)關注
# 打印結果
print("z統(tǒng)計量:", z_statistic)
print("p值:", p_value)
#z統(tǒng)計量: 2.4999999999999996
#p值: 0.006209665325776138
count = 100
nobs = 400
p_0 = 0.2
p_bar = count/nobs
p_0 = 0.2
n = 400
def calc_z_score(p_bar, p_0, n):
z = (p_bar - p_0) / (p_0 * (1 - p_0) / n)**0.5
return z
z = calc_z_score(p_bar, p_0, n)
p = stats.norm.sf(z)
# 打印結果
print("z統(tǒng)計量:", z)
print("p值:", p)
# z統(tǒng)計量: 2.4999999999999996
# p值: 0.006209665325776138
結論: 選擇顯著性水平 0.05 的話,P=0.0062 < 0.05
, 拒絕原假設。具體來說就是該結果支持特定的促銷活動能夠提升該球場女性運動員比例的備則假設。
import numpy as np
from scipy import stats
def chi2test(sample_var, sample_num,sigma_square,side, alpha=0.05):
'''
參數(shù):
sample_var--樣本方差
sample_num--樣本容量
sigma_square--H0方差
返回值:
pval
'''
chi_square =((sample_num-1)*sample_var)/(sigma_square)
p_value = None
if side == 'two-sided':
p = stats.chi2(df=sample_num-1).cdf(chi_square)
p_value = 2*np.min([p, 1-p])
elif side == 'less':
p_value = stats.chi2(df=sample_num-1).cdf(chi_square)
elif side == 'greater':
p_value = stats.chi2(df=sample_num-1).sf(chi_square)
return chi_square,p_value
例5.4 檢驗公交車到站時間的方差是否比規(guī)定標準大
某市中心車站為規(guī)范化提升市民對于公交車到站時間的滿意度,對于公交車的到站時間管理做了規(guī)定,標準是到站時間的方差不超過4。為了檢驗時間的到站時間的方差是否過大,隨機抽取了24輛公交車的到站時間組成一個樣本,得到的樣本方差是 ,假設到站時間的總體分布符合正態(tài)分布,請分析總體方差是否過大。
分析過程: 由于研究的是方差是否過大,因此選擇上側檢驗比較合適,備擇假設是方差大于4
于是我們有了原假設和備擇假設
:
chi_square,p_value = chi2test(sample_var = 4.9, sample_num = 24, sigma_square = 4,side='greater')
print("p值:", p_value)
# p值: 0.2092362676676498
結論: 選擇顯著性水平 0.05 的話,P=0.2092 > 0.05
, 無法拒絕原假設。具體來說就是該結果不支持方差變大的備則假設。
例5.5 檢驗某考試中心升級題庫后考生分數(shù)的方差是否有顯著變化
某數(shù)據(jù)分析師認證考試機構CDA考試中心,歷史上的持證人考試分數(shù)的方差為 ,現(xiàn)在升級了題庫,該考試中心希望新型考題的方差保持在原有水平上,為了研究該問題,收集到了30份新考題的考分組成的樣本,樣本方差是,在 的顯著性水平下進行假設檢驗。
分析過程:由于目標是希望考試分數(shù)的方差保持原有水平,因此選擇雙側檢驗
于是我們有了原假設和備擇假設
:
p_value = chi2test(sample_var = 162, sample_num = 30, sigma_square = 100,side='two-sided')
print("p值:", p_value)
# p值: 0.07213100536907469
結論: 選擇顯著性水平 0.05 的話,P=0.0721 > 0.05
, 故無法拒絕原假設。具體來說就是不支持方差發(fā)生了變化的備則假設。
例5.6(數(shù)據(jù):drug.txt) 檢驗某藥物在實驗組的指標是否低于對照組
為檢測某種藥物對情緒的影響,對實驗組的100名服藥者和對照組的150名非服藥者進行心理測試,得到相應的某指標。需要檢驗實驗組指標的總體均值是否大于對照組的指標的總體均值。這里假定兩個總體獨立地服從正態(tài)分布。相應的假設檢驗問題為:
分析過程:由于目標是檢驗實驗組指標的總體均值是否大于對照組的指標的總體均值,因此選擇上側檢驗
于是我們有了原假設和備擇假設
:
data = pd.read_table("./t-data/drug.txt",sep = ' ')
data.sample(5)
ah | id |
---|---|
4.4 | 2 |
6.8 | 2 |
9.6 | 2 |
4.8 | 2 |
13.2 | 1 |
a = data[data['id']==1]['ah']
b = data[data['id']==2]['ah']
'''
H0: 實驗組的均值等于對照組
H1: 實驗組的均值大于對照組
'''
t, pval = scipy.stats.ttest_ind(a,b,alternative = 'greater')
print(t,pval)
# 0.9109168350628888 0.18161186154576608
結論: 選擇顯著性水平 0.05 的話,p = 0.1816 > 0.05
,無法拒絕H0,具體來說就是該結果無法支持實驗組均值大于對照組的備則假設。
例5.7(數(shù)據(jù): diet.txt) 檢驗減肥前后的重量是否有顯著性差異(是否有減肥效果)
這里有兩列50對減肥數(shù)據(jù)。其中一列數(shù)據(jù)(變量名before)是減肥前的重量,另一列(變量名after)是減肥后的重量(單位: 公斤),人們希望比較50個人在減肥前和減肥后的重量。
分析過程:這里不能用前面的獨立樣本均值差的檢驗,這是因為兩個樣本并不獨立。每一個人減肥后的重量都和自己減肥前的重量有關,但不同人之間卻是獨立的,所以應該用配對樣本檢驗。同時,由于研究的是減肥前后的重量變化,期望減肥前的重量大于減肥后的重量,所以備擇假設是期望減肥前的重量大于減肥后的重量
于是我們有了原假設和備擇假設:
:
data = pd.read_table("./t-data/diet.txt",sep = ' ')
data.sample(5)
before | after |
---|---|
58 | 50 |
76 | 71 |
69 | 65 |
68 | 76 |
81 | 75 |
a = data['before']
b = data['after']
stats.ttest_rel(a, b,alternative = 'greater')
# Ttest_relResult(statistic=3.3550474801424173, pvalue=0.000769424325484219)
結論 選擇顯著性水平 0.05 的話,p = 0.0007 < 0.05
,故應該拒絕原假設。具體來說就是該結果傾向支持減肥前后的重量之差大于零(即減肥前重量大于減肥后,也就是有減肥效果)的備則假設。
import numpy as np
import scipy.stats as stats
def proportion_test(p1, p2, n1, n2, side='two-sided'):
"""
參數(shù):
p1: 樣本1的比例
p2: 樣本2的比例
n1: 樣本1的數(shù)量
n2: 樣本2的數(shù)量
side: 假設檢驗的方向,可選'two-sided'(雙側檢驗,默認), 'greater'(右側檢驗), 'less'(左側檢驗)
返回值:
z_value: Z統(tǒng)計量的值
p_value: 對應的p值
"""
p = (p1 * n1 + p2 * n2) / (n1 + n2)
se = np.sqrt(p * (1 - p) * (1 / n1 + 1 / n2))
z_value = (p1 - p2) / se
if side == 'two-sided':
p_value = 2 * (1 - stats.norm.cdf(np.abs(z_value)))
elif side == 'greater':
p_value = 1 - stats.norm.cdf(z_value)
elif side == 'less':
p_value = stats.norm.cdf(z_value)
else:
raise ValueError("Invalid side value. Must be 'two-sided', 'greater', or 'less'.")
return z_value, p_value
例5.8 檢驗不同保險客戶的索賠率是否存在差異
某保險公司抽取了單身與已婚客戶的樣本,記錄了他們在一段數(shù)據(jù)內的索賠次數(shù),計算了索賠率,現(xiàn)在需要檢驗兩種保險客戶的索賠率是否存在差異
分析過程:由于目標比例是否有差異,因此選擇比例之差的雙側檢驗
于是我們有了原假設和備擇假設
:
p1 = 0.14
p2 = 0.09
n1 = 250
n2 = 300
z_value, p_value = proportion_test(p1, p2, n1, n2, side='two-sided')
# 選擇雙側檢驗 alternative = 'two-sided'
print("Z_value:", z_value)
print("p_value:", p_value)
# Z_value: 1.846189280616294
# p_value: 0.0648647268570739
結論 選擇顯著性水平 0.05 的話,p = 0.0648 > 0.05
,故應該拒絕原假設。具體來說就是該結果傾向支持兩種保險客戶的索賠率存在差異的備則假設。
import numpy as np
from scipy import stats
def f_test_by_s_square(n1, n2, s1_square,s2_square, side ='two-sided'):
"""
n1 :樣本1的數(shù)量;n2 :樣本2的數(shù)量
s1_square:樣本1的方差;s2_square:樣本2的方差
# F_value :F統(tǒng)計量的值;# p_value :對應的p值
"""
F_value = s1_square/s2_square
F = stats.f(dfn = n1-1, dfd = n2-1)
if side=='two-sided':
print("two-sided")
p_value = 2*min(F.cdf(F_value), 1-F.cdf(F_value))
return F_value,p_value
elif side=='greater':
print("greater")
p_value = 1-F.cdf(F_value)
return F_value,p_value
例5.9 檢驗不同公交公司的校車到達時間的方差是否有差異
某學校的校車合同到期,先需要在A、B兩個校車供應公司中選擇一個,才有到達時間的方差作為衡量服務質量的標準,較低方差說明服務質量穩(wěn)定且水平較高,如果方差相等,則會選擇價格更低的公司,,如果方差不等,則優(yōu)先考慮方差更低的公司。 現(xiàn)收集到了A公司的26次到達時間組成一個樣本,方差68,B公司16次到達時間組成一個樣本,方差是30,請檢驗AB兩個公司的到達時間方差。
分析過程:由于目標是希望的方差保持原有水平,因此選擇雙側檢驗。兩總體方差之比用F檢驗,將方差較大的A視為總體1
于是我們有了原假設和備擇假設
:
f_statistic , p_value= f_test_by_s_square(n1=26, n2=16,s1_square=78,s2_square=20,side='two-sided')
# 選擇雙側檢驗所以side='two-sided'
# 打印檢驗結果
print("F statistic:", f_statistic)
print("p-value:", p_value)
#two-sided
#F statistic: 3.9
#p-value: 0.00834904415829052
結論 選擇顯著性水平 0.05 的話,p = 0.0083 < 0.05
,故拒絕原假設。結果傾向支持AB兩個公司的到達時間方差存在差異的備則假設。
例5.10 檢驗修完Python課程的學生是否比修完數(shù)據(jù)庫課程的學生考CDA的成績方差更大
某高校數(shù)據(jù)科學專業(yè)的學生,修完一門數(shù)據(jù)庫課程的41名學生考CDA的方差,修完Python課程的31名學生考CDA的方差是,這些數(shù)據(jù)是否表明,修完數(shù)據(jù)庫的學生要比修完Python的學生CDA成績的方差更大?
分析過程:由于目標是希望修完Python的學生CDA成績的方差更大,因此選擇上側檢驗。兩總體方差之比用F檢驗,將方差較大的數(shù)據(jù)庫課程的考試成績視為總體1,另一個視為總體2,于是我們有了原假設和備擇假設
:
f_statistic , p_value= f_test_by_s_square(n1=41, n2=31,s1_square=120,s2_square=80,side='greater')# 打印檢驗結果
# 選擇上側檢驗所以side='greater'
print("F statistic:", f_statistic)
print("p-value:", p_value)
結論 選擇顯著性水平 0.05 的話,p = 0.1256 > 0.05,故無法原假設。結果無法支持修完數(shù)據(jù)庫的學生要比修完Python的學生CDA成績的方差更大的備則假設。
關于知識的學習,你會發(fā)現(xiàn)有很多相似的邏輯,抓住問題的本質去理解的話就沒那么復雜了,比如概念題里面的 區(qū)別和聯(lián)系 延伸到數(shù)據(jù)分析里的差異性和相關性;再比如計算機數(shù)據(jù)結構里的 樹、森林、網絡 到機器學習里面的決策樹、隨機森林、神經網絡;再比如從 互聯(lián)網、區(qū)塊鏈到元宇宙,都是想通過技術的手段去刻畫客觀世界;算法應用里面的圖像識別、語音識別,替代人的眼耳鼻舌身意中的前二者去感知世界。抓住了問題的本質不僅可以幫助我們理解知識,還可以將一個領域的知識或模型遷移到另一個領域加以創(chuàng)新和應用。
假設檢驗背后的故事:統(tǒng)計學史上最著名的女士品茶
下期將為大家?guī)?a href="http://www.3lll3.cn/bigdata/205066.html" style="text-decoration: none; color: #1e6bb8; word-wrap: break-word; font-weight: bold; border-bottom: 1px solid #1e6bb8;">《統(tǒng)計學極簡入門》之方差分析
這里分享一個你一定用得到的小程序——CDA數(shù)據(jù)分析師考試小程序。
它是專為CDA數(shù)據(jù)分析認證考試報考打造的一款小程序??梢詭湍憧焖賵竺荚?、查成績、查證書、查積分,通過該小程序,考生可以享受更便捷的服務。
掃碼加入CDA小程序,與圈內考生一同學習、交流、進步!
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
CDA 數(shù)據(jù)分析師:表結構數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結構數(shù)據(jù)(如數(shù)據(jù)庫表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預期算子的內涵、作用與應用解析 動態(tài)隨機一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結構數(shù)據(jù)特征價值的專業(yè)核心 表結構數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲的結構化數(shù)據(jù),如數(shù)據(jù)庫表、Excel 表、 ...
2025-09-17Excel 導入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實戰(zhàn)應用 在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時,“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗與 t 檢驗:差異、適用場景與實踐應用 在數(shù)據(jù)分析與統(tǒng)計學領域,假設檢驗是驗證研究假設、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結構數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結構數(shù)據(jù)(以 “行 - 列” 存儲的結構化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計劃中 rows 數(shù)量的準確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調優(yōu)中,EXPLAIN執(zhí)行計劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對象的 text 與 content:區(qū)別、場景與實踐指南 在 Python 進行 HTTP 網絡請求開發(fā)時(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結構數(shù)據(jù)價值的核心操盤手 表格結構數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫表)是企業(yè)最基礎、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請求工具對比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請求(如接口調用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點數(shù)據(jù)的科學計數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長浮點數(shù)據(jù)時的科學計數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務數(shù)據(jù)分析步驟的落地者與價值優(yōu)化者 業(yè)務數(shù)據(jù)分析是企業(yè)解決日常運營問題、提升執(zhí)行效率的核心手段,其價值 ...
2025-09-12用 SQL 驗證業(yè)務邏輯:從規(guī)則拆解到數(shù)據(jù)把關的實戰(zhàn)指南 在業(yè)務系統(tǒng)落地過程中,“業(yè)務邏輯” 是連接 “需求設計” 與 “用戶體驗 ...
2025-09-11塔吉特百貨孕婦營銷案例:數(shù)據(jù)驅動下的精準零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當下,精準營銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務數(shù)據(jù)分析:概念辨析與協(xié)同價值 在數(shù)據(jù)驅動決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實踐到業(yè)務價值挖掘 在數(shù)據(jù)分析場景中,聚類分析作為 “無監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計模型的核心目的:從數(shù)據(jù)解讀到決策支撐的價值導向 統(tǒng)計模型作為數(shù)據(jù)分析的核心工具,并非簡單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10CDA 數(shù)據(jù)分析師:商業(yè)數(shù)據(jù)分析實踐的落地者與價值創(chuàng)造者 商業(yè)數(shù)據(jù)分析的價值,最終要在 “實踐” 中體現(xiàn) —— 脫離業(yè)務場景的分 ...
2025-09-10機器學習解決實際問題的核心關鍵:從業(yè)務到落地的全流程解析 在人工智能技術落地的浪潮中,機器學習作為核心工具,已廣泛應用于 ...
2025-09-09