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


套路 5: 單一樣本Z檢定 (One-Sample Z 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計算單一樣本Z檢定:
方法一: 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
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)
zScore = (xBar - mu) / se
pVal = scipy.stats.norm.sf(abs(zScore))*2 # two-sided
zScore, pVal

結果: (-1.701410668011921, 0.08886589946624719)
p = 0.0888 > 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 statsmodels.stats.weightstats
statsmodels.stats.weightstats.ztest(dat, value = 15, alternative='two-sided')
結果: (-1.701410668011921, 0.08886589946624719)
p = 0.0888 > 0.05接受假設H0: m = 15彈塗魚的平均身長為15 cm


留言

這個網誌中的熱門文章

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

兩組獨立樣本變異數相同 t 檢定 (Two-Sample t test with equal variances,parametric)

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