統計 - 估計總體比例
總體比例是指屬於特定類別的總體份額。
置信區間用於估計總體比例。
估計總體比例
來自樣本的統計量用於估計總體的引數。
引數最可能的值是點估計。
此外,我們還可以為估計的引數計算一個下界和一個上界。
誤差範圍是下界和上界與點估計之間的差值。
下界和上界共同定義了置信區間。
計算置信區間
以下步驟用於計算置信區間:
- 檢查條件
- 找到點估計
- 確定置信水平
- 計算誤差範圍
- 計算置信區間
例如
- 總體:諾貝爾獎得主
- 類別:出生在美國
我們可以抽取一個樣本,看看其中有多少人出生在美國。
樣本資料用於估計所有諾貝爾獎獲得者在美國出生的比例。
透過隨機抽取 30 位諾貝爾獎獲得者,我們發現
樣本中有 30 位諾貝爾獎獲得者中有 6 位出生在美國
根據這些資料,我們可以按照以下步驟計算置信區間。
1. 檢查條件
計算比例置信區間的條件是
- 樣本是隨機選擇的
- 只有兩個選項
- 屬於該類別
- 不屬於該類別
- 樣本至少需要
- 5 個成員屬於該類別
- 5 個成員不屬於該類別
在我們的例子中,我們隨機抽取了 6 位出生在美國的人。
其餘的人不是出生在美國,所以其他類別有 24 人。
在這種情況下,條件得到滿足。
注意:在每種類別中都有 5 個的情況下,計算置信區間是可能的。但需要進行特殊調整。
2. 找到點估計
點估計是樣本比例(\(\hat{p}\))。
計算樣本比例的公式是發生次數(\(x\)) 除以樣本大小(\(n\))。
\(\displaystyle \hat{p} =\frac{x}{n}\)
在我們的例子中,30 人中有 6 人出生在美國:\(x\) 是 6,\(n\) 是 30。
因此,比例的點估計是
\(\displaystyle \hat{p} = \frac{x}{n} = \frac{6}{30} = \underline{0.2} = 20\%\)
因此,樣本中有 20% 的人出生在美國。
3. 確定置信水平
置信水平用百分比或小數表示。
例如,如果置信水平是 95% 或 0.95
那麼剩餘的機率(\(\alpha\)) 是:5% 或 1 - 0.95 = 0.05。
常用的置信水平是
- 90% 帶有 \(\alpha\) = 0.1
- 95% 帶有 \(\alpha\) = 0.05
- 99% 帶有 \(\alpha\) = 0.01
注意: 95% 的置信水平意味著,如果我們抽取 100 個不同的樣本並分別為每個樣本製作置信區間
真實引數將有 95 次出現在這 100 個置信區間內。
我們使用標準正態分佈來計算置信區間的誤差範圍。
剩餘的機率(\(\alpha\)) 被分成兩半,一半在分佈的左尾區域,一半在右尾區域。
分隔尾部區域和中間區域的 z 值軸上的值稱為臨界 z 值。
下面是標準正態分佈的圖,顯示了不同置信水平的尾部區域(\(\alpha\))。
4. 計算誤差範圍
誤差範圍是點估計與下界和上界之間的差值。
比例的誤差範圍(\(E\)) 使用臨界 z 值和標準誤差來計算
\(\displaystyle E = Z_{\alpha/2} \cdot \sqrt{\frac{\hat{p}(1-\hat{p})}{n}} \)
臨界 z 值 \(Z_{\alpha/2} \) 從標準正態分佈和置信水平計算得出。
標準誤差 \(\sqrt{\frac{\hat{p}(1-\hat{p})}{n}} \) 從點估計(\(\hat{p}\)) 和樣本大小(\(n\)) 計算得出。
在我們例子中,30 位諾貝爾獎獲得者樣本中有 6 位出生在美國,標準誤差是
\(\displaystyle \sqrt{\frac{\hat{p}(1-\hat{p})}{n}} = \sqrt{\frac{0.2(1-0.2)}{30}} = \sqrt{\frac{0.2 \cdot 0.8}{30}} = \sqrt{\frac{0.16}{30}} = \sqrt{0.00533..} \approx \underline{0.073}\)
如果我們選擇 95% 作為置信水平,則 \(\alpha\) 是 0.05。
所以我們需要找到臨界 z 值 \(Z_{0.05/2} = Z_{0.025}\)
臨界 z 值可以使用Z 表或程式語言函式找到。
示例
使用 Python,請使用 Scipy Stats 庫的 norm.ppf()
函式找到 \(\alpha\)/2 = 0.025 的 Z 值。
import scipy.stats as stats
print(stats.norm.ppf(1-0.025))
自己動手試一試 »
使用任一方法,我們都可以發現臨界 Z 值 \( Z_{\alpha/2} \) 約為 \(\underline{1.96}\)。
標準誤差 \(\sqrt{\frac{\hat{p}(1-\hat{p})}{n}}\) 約為 \(\underline{0.073}\)。
因此,誤差範圍(\(E\)) 是
\(\displaystyle E = Z_{\alpha/2} \cdot \sqrt{\frac{\hat{p}(1-\hat{p})}{n}} \approx 1.96 \cdot 0.073 = \underline{0.143}\)
5. 計算置信區間
置信區間的下界和上界是透過從點估計(\(\hat{p}\)) 減去和加上誤差範圍(\(E\)) 來找到的。
在我們的例子中,點估計為 0.2,誤差範圍為 0.143,那麼
下界是
\(\hat{p} - E = 0.2 - 0.143 = \underline{0.057} \)
上界是
\(\hat{p} + E = 0.2 + 0.143 = \underline{0.343} \)
置信區間是
\([0.057, 0.343]\) 或 \([5.7 \%, 34.4 \%]\)
我們可以透過陳述來總結置信區間:
出生在美國的諾貝爾獎獲得者比例的95%置信區間在5.7% 和 34.4%之間。
使用程式設計計算置信區間
置信區間可以使用許多程式語言計算。
對於大型資料集,使用軟體和程式設計計算統計量更為常見,因為手動計算會變得困難。
示例
使用 Python,請使用 scipy 和 math 庫來計算估計比例的置信區間。
這裡,樣本大小是 30,發生次數是 6。
import scipy.stats as stats
import math
# 指定樣本發生次數 (x)、樣本大小 (n) 和置信水平
x = 6
n = 30
confidence_level = 0.95
# 計算點估計、alpha、臨界 z 值、標準誤差和誤差範圍
point_estimate = x/n
alpha = (1-confidence_level)
critical_z = stats.norm.ppf(1-alpha/2)
standard_error = math.sqrt((point_estimate*(1-point_estimate)/n))
margin_of_error = critical_z * standard_error
# 計算置信區間的下界和上界
lower_bound = point_estimate - margin_of_error
upper_bound = point_estimate + margin_of_error
# 列印結果
print("點估計: {:.3f}".format(point_estimate))
print("臨界 Z 值: {:.3f}".format(critical_z))
print("誤差範圍: {:.3f}".format(margin_of_error))
print("置信區間: [{:.3f},{:.3f}]".format(lower_bound,upper_bound))
print("人口比例的 {:.1%} 置信區間為:".format(confidence_level))
print("介於 {:.3f} 和 {:.3f} 之間".format(lower_bound,upper_bound))
自己動手試一試 »
示例
使用 R,請使用內建的數學和統計函式來計算估計比例的置信區間。
這裡,樣本大小是 30,發生次數是 6。
# 指定樣本發生次數 (x)、樣本大小 (n) 和置信水平
x = 6
n = 30
confidence_level = 0.95
# 計算點估計、alpha、臨界 z 值、標準誤差和誤差範圍
point_estimate = x/n
alpha = (1-confidence_level)
critical_z = qnorm(1-alpha/2)
standard_error = sqrt(point_estimate*(1-point_estimate)/n)
margin_of_error = critical_z * standard_error
# 計算置信區間的下界和上界
lower_bound = point_estimate - margin_of_error
upper_bound = point_estimate + margin_of_error
# 列印結果
sprintf("點估計: %0.3f", point_estimate)
sprintf("臨界 Z 值: %0.3f", critical_z)
sprintf("誤差範圍: %0.3f", margin_of_error)
sprintf("置信區間: [%0.3f,%0.3f]", lower_bound, upper_bound)
sprintf("人口比例的 %0.1f%% 置信區間為:", confidence_level*100)
sprintf("介於 %0.4f 和 %0.4f 之間", lower_bound, upper_bound)
自己動手試一試 »