單一樣本t檢定 (One-Sample t test,parametric)


套路 6: 單一樣本t檢定 (One-Sample t testparametric)

什麼是單一樣本假設檢定? 說白了就是只有一組資料做假設檢定。統計假設檢定檢定什麼?H0。例如單一樣本假設檢定H0 : μ = 0HA : μ ¹ 0是檢定資料的平均值是否為0。又例如單一樣本假設檢定H0 : μ < 8HA : μ ³ 8是檢定資料的平均值是否小於8。假設相等時為雙尾 (two-tailed test) 檢定。假設不相等時為單尾 (one-tailed test) 檢定。如下圖所示:
1. 使用時機: 用於比較觀測到的平均值(mean)和理論(期望)值。大樣本用Z檢定小樣本用t檢定
2. 分析類型: 母數分析(parametric analysis)直接使用資料數值算統計叫parametric方法把資料排序之後用排序的名次算統計叫non-parametric方法。
3. 前提假設: 資料為常態分布(normal distribution) 或接近常態分布
4. 資料範例: 咪路調查淡水河口彈塗魚的體長(cm)資料如下:
   14.3, 15.8, 14.6, 16.1, 12.9, 15.1, 17.3, 14.0, 14.5, 13.9, 16.2, 14.3, 14.6, 13.3, 15.5, 11.8, 14.8, 13.5, 16.3, 15.4, 15.5, 13.9, 10.7, 14.8, 12.9, 15.4
   : 這種彈塗魚的平均身長為15 cm? H0: m = 15HA: m ≠ 15
5. 畫圖看資料分布:
dat = [14.3, 15.8, 14.6, 16.1, 12.9, 15.1, 17.3, 14.0, 14.5, 13.9, 16.2, 14.3, 14.6, 13.3, 15.5, 11.8, 14.8, 13.5, 16.3, 15.4, 15.5, 13.9, 10.7, 14.8, 12.9, 15.4]
import seaborn as sns
sns.set(style="whitegrid")
ax = sns.boxplot(x = dat, orient = "v", color = "skyblue", width=0.2)
ax = sns.swarmplot(x = dat, orient = "v", color = "red")

結果:

6. 檢查資料是否為常態分布(H0:資料為常態分佈):

dat = [14.3, 15.8, 14.6, 16.1, 12.9, 15.1, 17.3, 14.0, 14.5, 13.9, 16.2, 14.3, 14.6, 13.3, 15.5, 11.8, 14.8, 13.5, 16.3, 15.4, 15.5, 13.9, 10.7, 14.8, 12.9, 15.4]
import scipy.stats
scipy.stats.shapiro(dat)

結果: (0.970967173576355, 0.6485393047332764)
p = 0.6485 > 0.05接受H0:資料為常態分佈。

7. 使用Python計算單一樣本t檢定:
方法一: Python 程式
dat = [14.3, 15.8, 14.6, 16.1, 12.9, 15.1, 17.3, 14.0, 14.5, 13.9, 16.2, 14.3, 14.6, 13.3, 15.5, 11.8, 14.8, 13.5, 16.3, 15.4, 15.5, 13.9, 10.7, 14.8, 12.9, 15.4]
from scipy.stats import t
n = len(dat)
t1 = 0
for i in range(n):
    t1 = t1 + dat[i]
xBar = t1 / n
mu = 15    # 假設彈塗魚的平均身長為15 cm H0: m = 15
t2 = 0
for i in range(n):
   t2 = t2 + (dat[i] - xBar)**2
se = (t2 / (n * (n-1)))**(1/2)
tStat = (xBar - mu) / se
df = n - 1
pVal = (1 - t.cdf(abs(tStat), df)) * 2   # two-sided
tStat, df, pVal

結果: (-1.701410668011921, 25, 0.10127268114788257)
p = 0.101 > 0.05接受假設H0: m = 15彈塗魚的平均身長為15 cm

方法二: Python 函數
dat = [14.3, 15.8, 14.6, 16.1, 12.9, 15.1, 17.3, 14.0, 14.5, 13.9, 16.2, 14.3, 14.6, 13.3, 15.5, 11.8, 14.8, 13.5, 16.3, 15.4, 15.5, 13.9, 10.7, 14.8, 12.9, 15.4]
import scipy.stats
scipy.stats.ttest_1samp(dat, 15)

結果: Ttest_1sampResult(statistic=-1.7014106680119085, pvalue=0.10127268114788486)
p = 0.101 > 0.05接受假設H0: m = 15彈塗魚的平均身長為15 cm


留言

這個網誌中的熱門文章

三因子變異數分析 (Three-Way ANOVA)

比較多組不同變異數獨立樣本平均值檢定 (Welch's Test for Analysis of Variance,parametric)

雙因子變異數分析 (Two-Way ANOVA)