單一樣本Z檢定 (One-Sample Z test,parametric)
套路 5: 單一樣本Z檢定 (One-Sample Z test,parametric)
什麼是單一樣本假設檢定? 說白了就是只有一組資料做假設檢定。統計假設檢定檢定什麼?看H0。例如單一樣本假設檢定H0 : μ
= 0,HA : μ ¹ 0是檢定資料的平均值是否為0。又例如單一樣本假設檢定H0 : μ < 8,HA : μ
³ 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 = 15。HA: 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。
留言
張貼留言