哈嘍,我是cos大壯!~
前幾天,咱們已經(jīng)分享了關(guān)于假設(shè)檢驗(yàn)的一些內(nèi)容,今天針對(duì)一些細(xì)節(jié)問(wèn)題,又進(jìn)行了細(xì)化分享給大家。
假設(shè)檢驗(yàn)方法用于通過(guò)統(tǒng)計(jì)手段判斷樣本數(shù)據(jù)是否支持某個(gè)假設(shè),幫助決策者做出基于數(shù)據(jù)的推斷。它為數(shù)據(jù)分析提供了系統(tǒng)的驗(yàn)證工具,有助于避免僅憑樣本結(jié)果得出誤導(dǎo)性的結(jié)論。通過(guò)假設(shè)檢驗(yàn),可以在不確定性中評(píng)估數(shù)據(jù)的顯著性,確保分析結(jié)果的科學(xué)性和可靠性。
先給大家列舉10種假設(shè)檢驗(yàn)方法,以及核心關(guān)鍵:
- t 檢驗(yàn):適用于均值差異的假設(shè)檢驗(yàn)。
- Z 檢驗(yàn):用于大樣本或已知總體方差的均值差異檢驗(yàn)。
- 卡方檢驗(yàn):適用于分類變量的獨(dú)立性或擬合優(yōu)度檢驗(yàn)。
- 方差分析(ANOVA):用于多個(gè)組均值的比較。
- Mann-Whitney U 檢驗(yàn):用于比較兩個(gè)獨(dú)立樣本的非正態(tài)分布數(shù)據(jù)。
- Kruskal-Wallis 檢驗(yàn):用于比較三個(gè)或更多組的非正態(tài)分布數(shù)據(jù)。
- Wilcoxon 符號(hào)秩檢驗(yàn):用于成對(duì)樣本的非參數(shù)檢驗(yàn)。
- Kolmogorov-Smirnov 檢驗(yàn)(K-S Test):用于檢驗(yàn)樣本分布與理論分布的一致性。
- Friedman 檢驗(yàn):用于比較多個(gè)相關(guān)樣本的分布差異。
- McNemar 檢驗(yàn):用于比較兩個(gè)配對(duì)樣本的二分類數(shù)據(jù)。
具體細(xì)節(jié),咱們下面詳細(xì)聊聊~
1. t 檢驗(yàn)(t-test)
原理
檢驗(yàn)用于比較兩個(gè)樣本均值之間是否有顯著差異。其背后的假設(shè)是,兩個(gè)樣本來(lái)自同一分布,如果它們的均值差異顯著,則表明兩者可能屬于不同的分布。
- 原假設(shè)(H0):兩個(gè)樣本均值沒(méi)有差異,即 。
- 備擇假設(shè)(H1):兩個(gè)樣本均值有顯著差異,即 。
核心公式
t檢驗(yàn)的核心是計(jì)算t統(tǒng)計(jì)量,并通過(guò)它判斷樣本均值之間的差異。公式如下:
對(duì)于獨(dú)立樣本t檢驗(yàn)(雙樣本t檢驗(yàn)):
其中:
t值通過(guò)查找t分布表來(lái)得到p值,p值越小,越說(shuō)明樣本間差異顯著。如果p值小于顯著性水平(通常是0.05),則拒絕原假設(shè)。
推導(dǎo)過(guò)程:
- 首先假設(shè)兩個(gè)樣本來(lái)自同一分布,計(jì)算樣本均值。
- 根據(jù)中心極限定理,樣本均值的分布是正態(tài)分布。
- 計(jì)算樣本之間的標(biāo)準(zhǔn)誤差,并通過(guò)公式計(jì)算t值。
- 通過(guò)查表或計(jì)算獲得p值,判斷是否可以拒絕原假設(shè)。
優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn):t檢驗(yàn)簡(jiǎn)單易用,適用于正態(tài)分布的數(shù)據(jù)。
- 缺點(diǎn):對(duì)于非正態(tài)分布、樣本量較小時(shí),結(jié)果不夠穩(wěn)定。t檢驗(yàn)還要求樣本的方差近似相等。
- 適用場(chǎng)景:當(dāng)我們需要比較兩個(gè)樣本的均值差異時(shí),例如實(shí)驗(yàn)組和控制組的表現(xiàn)差異。
案例代碼
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import stats
# 生成兩個(gè)不同均值的樣本數(shù)據(jù)
np.random.seed(42)
group1 = np.random.normal(50, 10, 100) # 均值為50,標(biāo)準(zhǔn)差為10
group2 = np.random.normal(55, 12, 100) # 均值為55,標(biāo)準(zhǔn)差為12
# t-test 兩組數(shù)據(jù)的均值
t_stat, p_value = stats.ttest_ind(group1, group2)
print(f'T-statistic: {t_stat}, P-value: {p_value}')
# 數(shù)據(jù)可視化
plt.figure(figsize=(10, 6))
# 密度圖
sns.kdeplot(group1, label='Group 1 (Mean=50)', color='blue', shade=True)
sns.kdeplot(group2, label='Group 2 (Mean=55)', color='red', shade=True)
# 箱線圖
plt.subplot(1, 2, 2)
sns.boxplot(data=[group1, group2], palette=['blue', 'red'])
plt.xticks([0, 1], ['Group 1', 'Group 2'])
plt.suptitle('t-Test Analysis: Group Comparison', fontsize=16)
plt.tight_layout()
plt.show()
在生成的圖中:
- 左側(cè)顯示兩個(gè)組的核密度估計(jì)(KDE)曲線,顯示了數(shù)據(jù)分布情況。
- 右側(cè)為箱線圖,比較了兩個(gè)組的中位數(shù)和四分位數(shù)。通過(guò)這兩個(gè)圖表,可以直觀地觀察到兩個(gè)組在均值上的差異。
從代碼輸出的t統(tǒng)計(jì)量和p值可以判斷,如果p值小于0.05,則可以拒絕原假設(shè),即認(rèn)為兩個(gè)樣本的均值有顯著差異。通過(guò)數(shù)據(jù)分析圖,KDE圖和箱線圖可以看出,group1和group2的均值有所不同。
2. z 檢驗(yàn)(z-test)
原理
z檢驗(yàn)類似于t檢驗(yàn),主要用于樣本量較大且已知總體標(biāo)準(zhǔn)差的情況。它可以用于檢驗(yàn)單樣本與總體均值的差異,也可以比較兩個(gè)樣本的均值差異。
- 原假設(shè)(H0):樣本均值與總體均值無(wú)顯著差異,或兩個(gè)樣本均值無(wú)顯著差異。
- 備擇假設(shè)(H1):樣本均值與總體均值有顯著差異,或兩個(gè)樣本均值有顯著差異。
核心公式
z檢驗(yàn)的核心公式為:
其中:
推導(dǎo)過(guò)程:
- 在大樣本的情況下,樣本均值的分布近似正態(tài)分布。
- 計(jì)算樣本均值與總體均值的差異,并標(biāo)準(zhǔn)化為z分布。
- 根據(jù)z值在標(biāo)準(zhǔn)正態(tài)分布中查找p值。
優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn):z檢驗(yàn)適用于大樣本數(shù)據(jù),計(jì)算簡(jiǎn)單,并且適用性廣泛。
- 缺點(diǎn):要求已知總體標(biāo)準(zhǔn)差,適用于大樣本,且不適合小樣本數(shù)據(jù)。
- 適用場(chǎng)景:適用于已知總體方差的大樣本數(shù)據(jù)。
案例代碼
# z-test示例,使用一個(gè)標(biāo)準(zhǔn)的正態(tài)分布數(shù)據(jù)集
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from scipy import stats
# 生成數(shù)據(jù):一個(gè)已知均值和方差的總體
np.random.seed(42)
population_mean = 100
population_std = 15
n = 50
# 從該總體中抽取樣本
sample = np.random.normal(population_mean, population_std, n)
# 假設(shè)總體均值為105,進(jìn)行單樣本z檢驗(yàn)
sample_mean = np.mean(sample)
sample_std = np.std(sample, ddof=1)
z_stat = (sample_mean - 105) / (population_std / np.sqrt(n))
p_value = 2 * (1 - stats.norm.cdf(abs(z_stat)))
print(f'Z-statistic: {z_stat}, P-value: {p_value}')
# 數(shù)據(jù)可視化
plt.figure(figsize=(10, 6))
# 核密度估計(jì)(KDE)顯示樣本的分布
sns.kdeplot(sample, label='Sample Distribution', color='green', shade=True)
# 添加總體均值和假設(shè)均值的豎線
plt.axvline(np.mean(sample), color='blue', linestyle='--', label='Sample Mean')
plt.axvline(105, color='red', linestyle='--', label='Hypothetical Mean')
plt.legend()
plt.title('Z-Test: Sample vs Hypothetical Mean')
plt.tight_layout()
plt.show()
- 核密度估計(jì)(KDE)展示了抽樣數(shù)據(jù)的分布。
- 紅色豎線表示假設(shè)的總體均值,藍(lán)色虛線表示樣本均值。這可以直觀地看到樣本均值與假設(shè)均值的偏差情況。
通過(guò)z統(tǒng)計(jì)量和p值,我們可以判斷樣本均值與假設(shè)均值是否有顯著差異。如果p值小于0.05,則拒絕原假設(shè)。
3. 卡方檢驗(yàn)(Chi-Square Test)
原理
卡方檢驗(yàn)用于分類變量的統(tǒng)計(jì)推斷,主要用于檢驗(yàn)變量之間的獨(dú)立性或分類分布的擬合度。其基本思想是比較觀察到的頻數(shù)和期望的頻數(shù)之間的差異,從而判斷變量之間是否獨(dú)立。
- 原假設(shè)(H0):變量之間相互獨(dú)立(沒(méi)有關(guān)聯(lián))。
- 備擇假設(shè)(H1):變量之間不獨(dú)立(有顯著關(guān)聯(lián))。
核心公式
卡方檢驗(yàn)的統(tǒng)計(jì)量公式為:
其中:
推導(dǎo)過(guò)程:
- 根據(jù)原假設(shè)計(jì)算每個(gè)組合的期望頻數(shù)。
- 使用公式計(jì)算卡方統(tǒng)計(jì)量,即觀察值與期望值之間的平方差除以期望值。
- 查找卡方分布表,根據(jù)自由度和顯著性水平判斷是否拒絕原假設(shè)。
優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn):適用于分類數(shù)據(jù),操作簡(jiǎn)單。特別適合用于樣本頻率的顯著性檢驗(yàn)。
- 缺點(diǎn):需要足夠大的樣本量,小樣本時(shí)可能導(dǎo)致錯(cuò)誤的結(jié)論;同時(shí),當(dāng)期望頻數(shù)較小時(shí),卡方檢驗(yàn)效果不佳。
- 適用場(chǎng)景:常用于檢驗(yàn)兩個(gè)類別變量之間的獨(dú)立性或擬合優(yōu)度。
案例代碼
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.stats import chi2_contingency
# 創(chuàng)建列聯(lián)表(例如性別和是否購(gòu)買)
data = {'Gender': ['Male', 'Male', 'Female', 'Female', 'Male', 'Female', 'Female', 'Male'],
'Purchased': ['Yes', 'No', 'Yes', 'No', 'Yes', 'Yes', 'No', 'No']}
df = pd.DataFrame(data)
# 創(chuàng)建列聯(lián)表
contingency_table = pd.crosstab(df['Gender'], df['Purchased'])
print(contingency_table)
# 卡方檢驗(yàn)
chi2, p, dof, expected = chi2_contingency(contingency_table)
print(f'Chi2 Statistic: {chi2}, P-value: {p}')
# 數(shù)據(jù)可視化
plt.figure(figsize=(8, 6))
sns.heatmap(contingency_table, annot=True, cmap='YlGnBu', fmt='d')
plt.title('Contingency Table Heatmap')
plt.show()
圖中顯示了一個(gè)性別和是否購(gòu)買的列聯(lián)表(交叉表),并用熱圖可視化兩個(gè)變量的頻數(shù)分布。通過(guò)此表和圖,可以觀察到不同性別下是否購(gòu)買的頻率分布。
通過(guò)卡方統(tǒng)計(jì)量和p值,可以判斷是否拒絕原假設(shè)(即變量是否獨(dú)立)。如果p值小于0.05,則表明性別與購(gòu)買行為之間存在顯著關(guān)聯(lián)。
4. 方差分析(ANOVA, Analysis of Variance)
原理
方差分析(ANOVA)用于比較多個(gè)組的均值,判斷這些組之間是否存在顯著差異。它通過(guò)比較組間方差與組內(nèi)方差的比值,來(lái)評(píng)估不同組的均值是否相同。
- 原假設(shè)(H0):多個(gè)樣本組的均值相等。
- 備擇假設(shè)(H1):至少有一個(gè)樣本組的均值不相等。
核心公式
ANOVA 使用的統(tǒng)計(jì)量是 F 值,公式為:
其中:
推導(dǎo)過(guò)程:
- 計(jì)算每組均值與總體均值之間的方差(組間方差)。
- 計(jì)算每組內(nèi)部數(shù)據(jù)與組均值的方差(組內(nèi)方差)。
- 通過(guò)F統(tǒng)計(jì)量的比值,查找F分布表,判斷是否拒絕原假設(shè)。
優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn):可以同時(shí)比較多個(gè)組,適用于多個(gè)樣本組的均值差異檢驗(yàn)。
- 缺點(diǎn):要求樣本數(shù)據(jù)滿足正態(tài)性,且各組之間的方差相等。
- 適用場(chǎng)景:用于比較三個(gè)或更多組之間的均值差異,常用于實(shí)驗(yàn)設(shè)計(jì)分析。
案例代碼
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import stats
# 生成三個(gè)組的數(shù)據(jù)
np.random.seed(42)
group1 = np.random.normal(50, 10, 30)
group2 = np.random.normal(55, 10, 30)
group3 = np.random.normal(60, 10, 30)
# 方差分析
f_stat, p_value = stats.f_oneway(group1, group2, group3)
print(f'F-statistic: {f_stat}, P-value: {p_value}')
# 數(shù)據(jù)可視化
plt.figure(figsize=(12, 6))
# 箱線圖顯示各組的分布
sns.boxplot(data=[group1, group2, group3], palette='Set3')
plt.xticks([0, 1, 2], ['Group 1', 'Group 2', 'Group 3'])
plt.title('ANOVA Analysis: Group Comparison')
plt.show()
箱線圖展示了三個(gè)組的分布情況,包括每個(gè)組的中位數(shù)和四分位數(shù)。通過(guò)箱線圖,可以直觀地觀察各組之間均值和數(shù)據(jù)分布的差異。
通過(guò)F統(tǒng)計(jì)量和p值,我們可以判斷是否拒絕原假設(shè)。如果p值小于0.05,說(shuō)明至少有一個(gè)組的均值與其他組不同。
5. Mann-Whitney U 檢驗(yàn)
原理
Mann-Whitney U 檢驗(yàn)是一種非參數(shù)檢驗(yàn),適用于比較兩個(gè)獨(dú)立樣本的分布是否相同,尤其適用于數(shù)據(jù)不滿足正態(tài)分布的情況。
- 原假設(shè)(H0):兩個(gè)樣本的分布相同。
- 備擇假設(shè)(H1):兩個(gè)樣本的分布不同。
核心公式
Mann-Whitney U 檢驗(yàn)的統(tǒng)計(jì)量為 U 值,計(jì)算公式為:
其中:
推導(dǎo)過(guò)程:
- 將兩個(gè)樣本的數(shù)據(jù)排序,并分配秩次。
- 計(jì)算每個(gè)樣本的秩和,進(jìn)而計(jì)算U值。
- 通過(guò)U值查找標(biāo)準(zhǔn)正態(tài)分布或U分布表,判斷是否拒絕原假設(shè)。
優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn):適用于非正態(tài)分布數(shù)據(jù),不要求方差相等。
- 缺點(diǎn):不能精確評(píng)估均值,只能比較分布。
- 適用場(chǎng)景:當(dāng)兩個(gè)獨(dú)立樣本的數(shù)據(jù)不滿足正態(tài)分布時(shí),常用于社會(huì)科學(xué)實(shí)驗(yàn)和非正態(tài)分布數(shù)據(jù)分析。
案例代碼
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.stats import mannwhitneyu
# 生成兩個(gè)非正態(tài)分布的數(shù)據(jù)
np.random.seed(42)
group1 = np.random.exponential(scale=2, size=100)
group2 = np.random.exponential(scale=3, size=100)
# Mann-Whitney U 檢驗(yàn)
u_stat, p_value = mannwhitneyu(group1, group2)
print(f'U-statistic: {u_stat}, P-value: {p_value}')
# 數(shù)據(jù)可視化
plt.figure(figsize=(10, 6))
# KDE 圖顯示分布差異
sns.kdeplot(group1, label='Group 1', color='blue', shade=True)
sns.kdeplot(group2, label='Group 2', color='orange', shade=True)
plt.title('Mann-Whitney U Test: Group Distributions')
plt.legend()
plt.show()
KDE圖展示了兩個(gè)組的分布差異,數(shù)據(jù)明顯呈現(xiàn)非正態(tài)分布。通過(guò)這些圖,可以觀察兩個(gè)組在分布形狀上的不同。
根據(jù)U統(tǒng)計(jì)量和p值,如果p值小于0.05,則可以拒絕原假設(shè),說(shuō)明兩個(gè)樣本的分布不同。
6. Kruskal-Wallis 檢驗(yàn)
原理
Kruskal-Wallis 檢驗(yàn)是一個(gè)非參數(shù)檢驗(yàn),用于比較多個(gè)樣本組的分布差異。它是Mann-Whitney U 檢驗(yàn)的擴(kuò)展,適用于三個(gè)或更多組的比較。
- 備擇假設(shè)(H1):至少有一個(gè)樣本組的分布不同。
核心公式
Kruskal-Wallis檢驗(yàn)的核心統(tǒng)計(jì)量H值公式為:
其中:
推導(dǎo)過(guò)程:
- 將所有數(shù)據(jù)按大小順序排列并分配秩次。
- 計(jì)算各組的秩和,使用公式計(jì)算H值。
- 根據(jù)H值查找卡方分布表,判斷是否拒絕原假設(shè)。
優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn):適用于非正態(tài)分布數(shù)據(jù),不要求各組方差相等。
- 缺點(diǎn):只能判斷分布差異,不能評(píng)估具體的均值差異。
- 適用場(chǎng)景:當(dāng)數(shù)據(jù)不滿足正態(tài)性且需要比較三個(gè)或更多組時(shí),適合社會(huì)科學(xué)和生物學(xué)實(shí)驗(yàn)。
案例代碼
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.stats import kruskal
# 生成三組非正態(tài)分布的數(shù)據(jù)
np.random.seed(42)
group1 = np.random.gamma(2, 1, 50)
group2 = np.random.gamma(2, 2, 50)
group3 = np.random.gamma(2, 3, 50)
# Kruskal-Wallis 檢驗(yàn)
h_stat, p_value = kruskal(group1, group2, group3)
print(f'H-statistic: {h_stat}, P-value: {p_value}')
# 數(shù)據(jù)可視化
plt.figure(figsize=(12, 6))
# KDE 圖顯示三組數(shù)據(jù)的分布
sns.kdeplot(group1, label='Group 1', color='blue', shade=True)
sns.kdeplot(group2, label='Group 2', color='green', shade=True)
sns.kdeplot(group3, label='Group 3', color='red', shade=True)
plt.title('Kruskal-Wallis Test: Group Distributions')
plt.legend()
plt.show()
通過(guò)KDE圖可以清晰地看到三個(gè)樣本組的分布差異,這些數(shù)據(jù)明顯不是正態(tài)分布,可以通過(guò)Kruskal-Wallis 檢驗(yàn)進(jìn)行分析。
根據(jù)H統(tǒng)計(jì)量和p值,如果p值小于0.05,說(shuō)明至少有一個(gè)樣本組的分布與其他組顯著不同。
7. Wilcoxon 符號(hào)秩檢驗(yàn)(Wilcoxon Signed-Rank Test)
原理
Wilcoxon符號(hào)秩檢驗(yàn)是一種非參數(shù)檢驗(yàn),用于檢驗(yàn)兩個(gè)配對(duì)樣本之間的差異,通常用于替代配對(duì)樣本t檢驗(yàn)。它比較的是成對(duì)數(shù)據(jù)的符號(hào)秩次和,而非直接比較均值。
- 原假設(shè)(H0):配對(duì)樣本的中位數(shù)差異為0。
- 備擇假設(shè)(H1):配對(duì)樣本的中位數(shù)差異不為0。
核心公式
Wilcoxon檢驗(yàn)的統(tǒng)計(jì)量公式為:
其中 是每個(gè)樣本對(duì)的符號(hào)秩次和。
推導(dǎo)過(guò)程:
- 計(jì)算每對(duì)數(shù)據(jù)的差值。
- 對(duì)差值進(jìn)行排序,計(jì)算正負(fù)符號(hào)的秩和。
- 通過(guò)秩和的絕對(duì)值來(lái)判斷是否可以拒絕原假設(shè)。
優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn):適用于非正態(tài)分布的成對(duì)數(shù)據(jù)。
- 缺點(diǎn):不能用于無(wú)序或分類數(shù)據(jù)。
- 適用場(chǎng)景:當(dāng)兩個(gè)配對(duì)樣本數(shù)據(jù)不滿足正態(tài)性時(shí),用于替代配對(duì)樣本t檢驗(yàn)。
案例代碼
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.stats import wilcoxon
# 生成配對(duì)樣本數(shù)據(jù)
np.random.seed(42)
before = np.random.normal(20, 5, 50)
after = before + np.random.normal(-2, 2, 50)
# Wilcoxon 符號(hào)秩檢驗(yàn)
w_stat, p_value = wilcoxon(before, after)
print(f'W-statistic: {w_stat}, P-value: {p_value}')
# 數(shù)據(jù)可視化
plt.figure(figsize=(10, 6))
# KDE 圖顯示成對(duì)樣本的分布
sns.kdeplot(before, label='Before', color='blue', shade=True)
sns.kdeplot(after, label='After', color='red', shade=True)
plt.title('Wilcoxon Signed-Rank Test: Paired Sample Distributions')
plt.legend()
plt.show()
通過(guò)KDE圖可以觀察到處理前后兩個(gè)配對(duì)樣本的分布差異,直觀顯示數(shù)據(jù)的變化趨勢(shì)。
根據(jù)W統(tǒng)計(jì)量和p值,可以判斷配對(duì)樣本的中位數(shù)差異是否顯著。如果p值小于0.05,則可以拒絕原假設(shè),說(shuō)明成對(duì)數(shù)據(jù)之間有顯著差異。
8. Kolmogorov-Smirnov 檢驗(yàn)(K-S Test)
原理
Kolmogorov-Smirnov檢驗(yàn)是一種非參數(shù)檢驗(yàn),常用于比較樣本分布與某個(gè)理論分布是否一致,或比較兩個(gè)樣本的分布是否相同。
- 原假設(shè)(H0):樣本分布與理論分布相同,或兩個(gè)樣本的分布相同。
- 備擇假設(shè)(H1):樣本分布與理論分布不同,或兩個(gè)樣本的分布不同。
核心公式
K-S 檢驗(yàn)的統(tǒng)計(jì)量為 ,表示兩個(gè)累積分布函數(shù)之間的最大差值:
其中 和 是兩個(gè)分布的累積分布函數(shù)。
推導(dǎo)過(guò)程:
- 計(jì)算樣本和理論分布或兩個(gè)樣本的累積分布函數(shù)。
- 計(jì)算兩個(gè)分布函數(shù)之間的最大差異。
- 通過(guò)K-S統(tǒng)計(jì)量判斷是否可以拒絕原假設(shè)。
優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn):不依賴分布的具體形式,適用于任意分布的數(shù)據(jù)。
- 缺點(diǎn):對(duì)尾部差異更敏感,容易受極值影響。
- 適用場(chǎng)景:用于檢驗(yàn)樣本分布是否與理論分布一致,或比較兩個(gè)樣本的分布差異。
案例代碼
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.stats import kstest, norm
# 生成數(shù)據(jù),假設(shè)數(shù)據(jù)應(yīng)該服從正態(tài)分布
np.random.seed(42)
data = np.random.normal(0, 1, 100)
# Kolmogorov-Smirnov 檢驗(yàn)
ks_stat, p_value = kstest(data, 'norm')
print(f'K-S Statistic: {ks_stat}, P-value: {p_value}')
# 數(shù)據(jù)可視化
plt.figure(figsize=(10, 6))
# KDE 圖顯示樣本數(shù)據(jù)與理論分布的對(duì)比
sns.kdeplot(data, label='Sample Data', color='blue', shade=True)
sns.lineplot(x=np.linspace(-3, 3, 100), y=norm.pdf(np.linspace(-3, 3, 100)), label='Normal Distribution', color='red')
plt.title('Kolmogorov-Smirnov Test: Sample vs Normal Distribution')
plt.legend()
plt.show()
KDE圖和正態(tài)分布曲線對(duì)比顯示了樣本數(shù)據(jù)與理論分布的差異??梢酝ㄟ^(guò)目視化觀察和K-S檢驗(yàn)結(jié)果來(lái)判斷樣本分布是否符合正態(tài)分布。
如果K-S統(tǒng)計(jì)量的p值小于0.05,則可以拒絕原假設(shè),說(shuō)明樣本分布與理論分布之間存在顯著差異。
9. Friedman 檢驗(yàn)
原理
Friedman 檢驗(yàn)是一種非參數(shù)的方差分析方法,主要用于比較多個(gè)相關(guān)樣本(即重復(fù)測(cè)量或配對(duì)樣本)之間的差異。它是方差分析(ANOVA)的一種非參數(shù)替代方法,適合數(shù)據(jù)不滿足正態(tài)分布的情況。
- 原假設(shè)(H0):多個(gè)樣本的中位數(shù)相同。
- 備擇假設(shè)(H1):至少有一個(gè)樣本的中位數(shù)不同。
核心公式
Friedman 檢驗(yàn)的統(tǒng)計(jì)量 的公式為:
其中:
推導(dǎo)過(guò)程:
- 對(duì)每個(gè)重復(fù)測(cè)量樣本進(jìn)行排序并分配秩次。
- 計(jì)算每個(gè)樣本的秩和,使用公式計(jì)算Friedman統(tǒng)計(jì)量。
優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn):適用于不滿足正態(tài)分布的相關(guān)樣本數(shù)據(jù),適合多個(gè)樣本組。
- 缺點(diǎn):只能比較相關(guān)樣本,不能處理獨(dú)立樣本。
- 適用場(chǎng)景:當(dāng)有多個(gè)配對(duì)樣本或重復(fù)測(cè)量時(shí),特別適用于非正態(tài)分布的數(shù)據(jù)。
案例代碼
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.stats import friedmanchisquare
# 生成三個(gè)相關(guān)樣本數(shù)據(jù)
np.random.seed(42)
group1 = np.random.normal(50, 10, 20)
group2 = np.random.normal(52, 10, 20)
group3 = np.random.normal(54, 10, 20)
# Friedman 檢驗(yàn)
stat, p_value = friedmanchisquare(group1, group2, group3)
print(f'Friedman Statistic: {stat}, P-value: {p_value}')
# 數(shù)據(jù)可視化
plt.figure(figsize=(10, 6))
# 箱線圖顯示三個(gè)相關(guān)樣本的分布
sns.boxplot(data=[group1, group2, group3], palette='Set2')
plt.xticks([0, 1, 2], ['Group 1', 'Group 2', 'Group 3'])
plt.title('Friedman Test: Group Comparison')
plt.show()
箱線圖展示了三個(gè)相關(guān)樣本的分布情況,直觀顯示每個(gè)樣本的中位數(shù)和四分位范圍。通過(guò)箱線圖,可以觀察到三個(gè)組的分布是否有顯著差異。
通過(guò) Friedman 檢驗(yàn)統(tǒng)計(jì)量和 p 值,可以判斷多個(gè)相關(guān)樣本的中位數(shù)是否相同。如果 p 值小于 0.05,則拒絕原假設(shè),說(shuō)明至少有一個(gè)樣本的中位數(shù)與其他樣本不同。
10. McNemar 檢驗(yàn)
原理
McNemar 檢驗(yàn)是針對(duì)配對(duì)名義數(shù)據(jù)(分類數(shù)據(jù))的一種非參數(shù)檢驗(yàn),主要用于比較兩個(gè)配對(duì)樣本的分類數(shù)據(jù)差異,常用于前后對(duì)比實(shí)驗(yàn)或同一對(duì)象在兩種條件下的二分類數(shù)據(jù)分析。
- 原假設(shè)(H0):兩組配對(duì)樣本的分類結(jié)果一致。
- 備擇假設(shè)(H1):兩組配對(duì)樣本的分類結(jié)果不一致。
核心公式
McNemar 檢驗(yàn)的統(tǒng)計(jì)量公式為:
其中:
- 是配對(duì)樣本中第一次分類為 0,第二次分類為 1 的樣本數(shù)量。
- 是配對(duì)樣本中第一次分類為 1,第二次分類為 0 的樣本數(shù)量。
推導(dǎo)過(guò)程:
- 構(gòu)造配對(duì)數(shù)據(jù)的2x2列聯(lián)表。
- 計(jì)算b和c值,代入公式,計(jì)算卡方統(tǒng)計(jì)量。
優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn):適用于二分類數(shù)據(jù)的配對(duì)樣本,尤其是前后對(duì)比實(shí)驗(yàn)的結(jié)果分析。
- 缺點(diǎn):只適用于二分類數(shù)據(jù),不能處理多分類數(shù)據(jù)。
- 適用場(chǎng)景:用于比較兩個(gè)配對(duì)樣本的二分類數(shù)據(jù),常見(jiàn)于臨床實(shí)驗(yàn)和對(duì)比實(shí)驗(yàn)。
案例代碼
下面的代碼演示如何使用 McNemar 檢驗(yàn)來(lái)比較配對(duì)樣本的二分類數(shù)據(jù)。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from statsmodels.stats.contingency_tables import mcnemar
# 構(gòu)造 2x2 配對(duì)列聯(lián)表
data = [[10, 5], [20, 15]]
df = pd.DataFrame(data, index=['Condition 1', 'Condition 2'], columns=['Negative', 'Positive'])
# McNemar 檢驗(yàn)
result = mcnemar(df, exact=False)
print(f'Chi2 Statistic: {result.statistic}, P-value: {result.pvalue}')
# 數(shù)據(jù)可視化
plt.figure(figsize=(8, 6))
sns.heatmap(df, annot=True, cmap='coolwarm', fmt='d')
plt.title('McNemar Test: Contingency Table Heatmap')
plt.show()
熱圖展示了2x2列聯(lián)表,顯示配對(duì)樣本在兩種條件下的二分類分布情況。通過(guò)熱圖,可以直觀地看到每個(gè)分類的配對(duì)頻率。
通過(guò) McNemar 檢驗(yàn)統(tǒng)計(jì)量和 p 值,可以判斷配對(duì)樣本的分類結(jié)果是否一致。如果 p 值小于 0.05,則拒絕原假設(shè),說(shuō)明兩組配對(duì)樣本的分類結(jié)果存在顯著差異。