Two Sample t-test
兩樣本t檢驗用於檢驗兩個總體的均值是否相等。兩總體都是未知的,且我們不想或不易測量出總體所有的個體,來求得總體均值。所以我們從總體中隨機抽樣得到樣本。對兩樣本進行統計檢驗,來看兩樣本差異是否顯著。
案例
- 若我們想知道兩個不同物種的烏龜的平均重量是否相等。我們可以進行隨機抽樣選擇部分烏龜來代表總體烏龜。由於存在誤差,兩個物種樣本的平均重量是存在差異的。而我們可以通過
two sample t-test知道它們之間的差異是否顯著。

前提假設
為使 two sample t-test結果有效,需要滿足一些條件。
- 兩總體相互獨立
- 兩總體均服從正太分布,且兩總體方差相等,若不相等考慮Welch’s t-test
- 樣本應近似正太分布,以及兩樣本方差也因近似相等
假設檢驗步驟
-
確定零假設:
- \(H_{0}: \mu_{1}=\mu_{2}\), 假設l兩總體均值相等,\(\mu_{1}\)等於\(\mu_{2}\)
-
確定備擇假設,這里有3種假設方法,根據實際問題進行假設:
- \(H_{1}: \mu_{1}\ne\mu_{2}\), 雙側檢驗,總體均值\(\mu_{1}\)不等於\(\mu_{2}\)
- \(H_{1}: \mu_{1}<\mu_{2}\), 雙側檢驗,總體均值\(\mu_{1}\)小於\(\mu_{2}\)
- \(H_{1}: \mu_{1}>\mu_{2}\), 雙側檢驗,總體均值\(\mu_{1}\)大於\(\mu_{2}\)
-
計算檢驗統計量\(t\):
\(t=\frac{(\bar{X_{1}}-\bar{X_{2}})}{S_p(\frac{1}{n_{1}}-\frac{1}{n_{2}})}\)
其中:
- \(\bar{x_1}, \bar{x_2}\): 樣本均數
- \(n_1, n_2\): 樣本大小
- \(S_{p}\)計算 \(S_p = \sqrt{\frac{(n_1-1)S^{2}_{1}+(n_2-1)S^{2}_{2} }{n_{1}+{n_{2}-2}}}\)
- \(S^{2}_{1}, S^{2}_{2}\): 樣本方差 -
計算p-value:
選擇一個顯著性水准\(\alpha\),(一般為0.01,0.05,0.1),然后根據\(\alpha\)和自由度\(df\)\((n-1)\),去找到相應的P-value。可以去查t界值表或者通過程序計算出來。
實例計算
以之前烏龜為例,若樣本數據為:
- 樣本大小: \(n_1 = 40\), $ n_2=38$
- 樣本均值: \(\bar{X_1} = 300\),\(\bar{X_2}=305\)
- 樣本標准差: \(S_1 = 18.5\), $ S_2=16.7$
建立檢驗假設,檢驗水准
- \(H_{0}: \mu_{1}=\mu_{2}\) ,即假設兩物種烏龜總體平均重量相等
- \(H_{1}: \mu_{1}\ne\mu_{2}\),即兩物種烏龜總體平均重量不相等
- \(\alpha=0.05\)
計算t檢驗統計量:
以\(\nu=76、|t|=|-1.2508|=1.2508\) 為輸入通過程序T Score to P Value Calculator計算,可得出\(P=0.21484\)。
確定結論
\(p=0.21484>\alpha=0.05\), 故不拒絕零假設\(H_{0}\),差異無統計學意義。沒有充分理由說明兩個烏龜物種的平均重量不相等。
Python 代碼實現
一般常見的算法,都是有Python庫封裝好的了,我們直接調用它給的接口就行了。
這里借助一個Python科學計算庫 scipy, 一般可以通過命令pip install scipy安裝。
import numpy as np
import scipy.stats as stats
## 研究者想知道兩種植物的平均高度是否相等,所以他們各搜集了20株植物
## group1,group2分別為兩個植物樣本身高
group1 = np.array([14, 15, 15, 16, 13, 8, 14, 17, 16, 14, 19, 20, 21, 15, 15, 16, 16, 13, 14, 12])
group2 = np.array([15, 17, 14, 17, 14, 8, 12, 19, 19, 14, 17, 22, 24, 16, 13, 16, 13, 18, 15, 13])
# 確定總體方差是否相等
# 根據經驗,如果較大的樣本方差與較小的樣本方差之比小於4:1,我們可以假定總體具有相同的方差。
print(np.var(group1), np.var(group2))
# 7.73 12.26 # 12.26 / 7.73 = 1.586,小於4。這意味着我們可以假設總體方差相等
## 通過stats.ttest_ind 進行兩樣本t檢驗
res = stats.ttest_ind(a=group1, b=group2, equal_var=True)
print("t statistic: ", res.statistic)
print("P Value: ", res.pvalue)
## output
## t statistic: -0.6337397070250238
## P Value: 0.5300471010405257
stats.ttest_ind 的參數a和b分布是第一個樣本和第二個樣本;equal_var只兩個總體方差是否相等。默認為True,若為False應使用Welch’s t-test
結果說明:
\(H_{0}: \mu_{1}=\mu_{2}\) 假設兩種植物平均高度相等
\(H_{1}: \mu_{1}\ne\mu_{2}\) 該植物平均高度不相等
因為此次檢驗p-value(0.53005) 大於 \(\alpha=0.05\), 不能拒絕\(H_{0}\),所以沒有充分的證據說明兩植物的平均高度不同。
R代碼
t-test在R里使用t.test進行計算
> group1 <- c(14, 15, 15, 16, 13, 8, 14, 17, 16, 14, 19, 20, 21, 15, 15, 16, 16, 13, 14, 12)
> group2 <- c(15, 17, 14, 17, 14, 8, 12, 19, 19, 14, 17, 22, 24, 16, 13, 16, 13, 18, 15, 13)
> ?t.test
> t.test(group1, group2, alternative = "two.sided", var.equal = T, mu=0)
Two Sample t-test
data: group1 and group2
t = -0.63374, df = 38, p-value = 0.53
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-2.726335 1.426335
sample estimates:
mean of x mean of y
15.15 15.80
t.test 中的參數設置:
alternative設置備擇假設的單雙尾檢驗,默認為"two.sided" ,雙尾檢驗,單位設置成"greater"或"less"- 參數
mu,為兩總體的差異均值,這里設為0,因為假設了兩總體均值相等。所以差值為0。 var.equal, 兩總體方差是否相等
最后的結果和Python中的一樣,甚至更詳細。
