在資料科學中,理解資料的分佈特性對於模型選擇、假設檢定和結果詮釋至關重要。常態分佈雖然是許多統計方法的基礎,但實際資料往往呈現更複雜的分佈形態,例如長尾分佈。t分佈在樣本量較小時更為適用,而二項分佈和卜瓦松分佈則分別適用於二元事件和隨機事件的建模。透過 QQ 圖等視覺化工具,可以直觀地比較樣本資料與理論分佈的擬合程度,進而選擇合適的統計模型。掌握這些統計分佈的特性和應用,有助於資料科學家更準確地分析資料、驗證假設並做出更有效的決策。
常態分佈:統計學的核心概念
常態分佈是一種鐘形分佈,在傳統統計學中具有重要地位。許多樣本統計量的分佈趨近常態分佈,使其成為數學公式近似分佈的有力工具。
常態分佈的關鍵術語
- 誤差:資料點與預測值或平均值之間的差異。
- 標準化:減去平均值並除以標準差。
- Z 分數:標準化後的資料點。
- 標準常態分佈:平均值為 0、標準差為 1 的常態分佈。
- QQ 圖:用於檢查樣本分佈是否接近特定分佈(如常態分佈)的視覺化工具。
常態分佈的特性
在常態分佈中(圖 2-10),約 68% 的資料落在平均值的一個標準差範圍內,而 95% 的資料落在兩個標準差內。雖然大多數原始資料並非常態分佈,但許多統計量的抽樣分佈趨近常態,這使得常態分佈在統計推斷中非常有用。
誤解與實際應用
常態分佈並非因大多數資料符合該分佈而得名。它的實用性源於許多統計量在抽樣分佈上趨近常態。除非必要,否則通常將常態假設作為最後手段。
常態分佈的歷史
常態分佈也稱為高斯分佈,以德國數學家 Carl Friedrich Gauss 命名。他在研究天文測量誤差時發現,這些誤差呈常態分佈。該分佈曾被稱為「誤差分佈」,因為它描述了測量誤差的分佈特性。
重點整理
- 常態分佈是一種理論上的理想分佈,用於描述許多自然現象和統計量的行為。
- 在資料科學中,常態分佈假設通常用於缺乏經驗機率分佈或 Bootstrap 分佈的情況。
圖表說明
此圖示展示了常態曲線的主要特性,包括資料在不同標準差範圍內的分佈情況。圖表顯示,大多數資料集中在平均值附近,並隨著距離平均值的增加而迅速減少。
程式碼範例:計算常態分佈的機率
import numpy as np
from scipy.stats import norm
# 定義平均值和標準差
mean = 0
std_dev = 1
# 計算特定範圍內的機率
probability = norm.cdf(2, loc=mean, scale=std_dev) - norm.cdf(-2, loc=mean, scale=std_dev)
print(f"資料落在平均值 ±2 個標準差內的機率: {probability:.2%}")
內容解密:
import numpy as np和from scipy.stats import norm:匯入必要的函式庫,分別用於數值計算和統計函式。mean和std_dev定義:設定常態分佈的平均值和標準差,這裡使用標準常態分佈(平均值 = 0,標準差 = 1)。norm.cdf:計算累積分佈函式(CDF),表示資料小於或等於某個值的機率。這裡用於計算 -2 到 2 之間的機率。probability計算:透過norm.cdf(2) - norm.cdf(-2)獲得資料落在平均值 ±2 個標準差內的機率。結果約為 95%,符合常態分佈的特性。print結果輸出:顯示計算出的機率,並格式化為百分比形式。
標準常態分配與QQ圖
標準常態分配是指在x軸上的單位以標準差表示與平均值的偏差。要將資料與標準常態分配進行比較,需要減去平均值然後除以標準差;這個過程也被稱為正規化或標準化。需要注意的是,這裡的「標準化」與資料函式庫記錄的標準化(轉換為通用格式)無關。轉換後的值稱為z分數,而常態分配有時也被稱為z分配。
QQ圖的使用
QQ圖用於視覺化判斷樣本資料是否接近特定的分配——在本例中是常態分配。QQ圖將z分數從低到高排序,並在y軸上繪製每個值的z分數;x軸則是對應的常態分配分位數。由於資料已經過正規化,單位對應於與平均值的標準差數量。如果點大致落在對角線上,則樣本分配可以被視為接近常態分配。圖2-11顯示了從常態分配中隨機產生的100個值的QQ圖;正如預期的,點緊密地遵循著直線。
R語言實作QQ圖
norm_samp <- rnorm(100)
qqnorm(norm_samp)
abline(a=0, b=1, col='grey')
Python實作QQ圖
fig, ax = plt.subplots(figsize=(4, 4))
norm_sample = stats.norm.rvs(size=100)
stats.probplot(norm_sample, plot=ax)
內容解密:
- 標準化:將資料減去平均值並除以標準差,使其具有與標準常態分配相同的尺度,方便比較。
- QQ圖:透過比較樣本的z分數與理論常態分配的分位數,視覺化評估樣本是否接近常態分配。
qqnorm函式(R)與stats.probplot(Python):用於生成QQ圖的函式,分別在R和Python中實作相同的功能。
重點概念
- 常態分配在統計學的發展中至關重要,因為它允許對不確定性和變異性進行數學近似。
- 原始資料通常不是常態分配,但誤差、平均值和大樣本中的總和往往趨近於常態分配。
- 將資料轉換為z分數後,可以與常態分配進行比較,但這並不改變資料的原始分配。
長尾分配
大多數資料並非呈現常態分配,尤其是在實際應用中。長尾分配的特點是具有較長的尾部,表示極端值的出現頻率較高。
長尾分配的關鍵術語
- 尾部(Tail):頻率分佈中相對極端的值出現頻率較低的狹長部分。
- 偏度(Skew):當一個分配的一側尾部比另一側長時,表示分配不對稱。
現實案例:股票收益率
以Netflix(NFLX)的每日股票收益率為例,其QQ圖顯示資料並非常態分配,極端值出現的頻率遠高於常態分配的預測。
R語言實作NFLX收益率QQ圖
nflx <- sp500_px[,'NFLX']
nflx <- diff(log(nflx[nflx>0]))
qqnorm(nflx)
abline(a=0, b=1, col='grey')
Python實作NFLX收益率QQ圖
nflx = sp500_px.NFLX
nflx = np.diff(np.log(nflx[nflx>0]))
fig, ax = plt.subplots(figsize=(4, 4))
stats.probplot(nflx, plot=ax)
內容解密:
- 長尾現象:Netflix股票收益率的QQ圖顯示資料具有長尾特性,極端值的出現頻率高於常態分配的預期。
- Tukey的觀察:資料在中間部分可能接近常態分配,但尾部明顯更長。
- 應用意義:認識到長尾分配的存在,可以避免低估極端事件(如黑天鵝事件)的發生機率。
重點概念
- 大多數資料並非常態分配。
- 假設資料為常態分配可能導致對極端事件的低估。
t分配
t分配是一種形狀類別似常態分配但尾部更厚、更長的分配。它廣泛用於描述樣本統計量的分佈,尤其是在樣本量較小的情況下。隨著樣本量的增加,t分配逐漸趨近於常態分配。
重點概念
- t分配在樣本統計量的分佈描述中非常重要。
- t分配的形狀取決於樣本大小,樣本越大,越接近常態分配。
透過上述分析,我們可以看到不同型別的資料分佈及其特性,並瞭解如何透過視覺化工具(如QQ圖)來評估資料是否符合特定的理論分佈。同時,也強調了理解資料分佈對於正確應用統計方法的重要性。
學生t分佈(Student’s t-Distribution)關鍵概念解析
樣本大小與自由度的重要性
在統計學中,樣本大小(n)是決定統計推斷準確性的關鍵因素。自由度(Degrees of freedom)則是描述樣本中獨立觀測值的數量,通常用於計算統計量,如樣本平均值。t分佈的特性與自由度密切相關,不同的自由度對應不同的t分佈形狀,使其能夠適應各種樣本大小和統計量的需求。
t分佈的由來與歷史背景
t分佈最初由W.S. Gosset於1908年在《Biometrika》期刊上以「Student」為筆名發表。Gosset當時受僱於Guinness啤酒廠,為了避免競爭對手得知該公司使用統計方法的資訊,發表時被要求隱藏真實身份。Gosset的研究起因於探究「從較大母體中抽取樣本,其平均值的抽樣分佈為何」這個問題。他進行了一系列的重抽樣實驗,從3000筆罪犯身高和手指長度的資料中隨機抽取4筆樣本,計算標準化結果(z分數)並繪製頻率圖。同時,他推匯出t分佈的數學函式,並將其擬合到實驗結果上。
t分佈的應用與侷限性
t分佈廣泛用於評估樣本平均值、兩個樣本平均值之間的差異、迴歸引數等統計量的置信區間。例如,給定樣本大小n和樣本標準差s,可以使用t分佈計算樣本平均值的90%置信區間:
[ \overline{x} \pm t_{n-1, 0.05} \cdot \frac{s}{\sqrt{n}} ]
其中( t_{n-1, 0.05} )是自由度為( n-1 )的t分佈中截斷上下5%的臨界值。t分佈的適用性依賴於樣本統計量是否近似正態分佈,這得益於中心極限定理(Central Limit Theorem),即使原始資料非正態分佈,樣本統計量仍可能近似正態。
程式碼範例:R語言中的t分佈應用
# 計算t分佈的機率密度函式
x <- seq(-4, 4, by = 0.1)
y <- dt(x, df = 10)
plot(x, y, type = "l", main = "t分佈機率密度函式 (df = 10)")
# 計算90%置信區間的臨界值
qt(p = 0.95, df = 9)
內容解密:
- dt函式:用於計算t分佈的機率密度函式,第一個引數x是變數的取值,第二個引數df是自由度。
- plot函式:繪製t分佈的機率密度曲線,以視覺化展示其形狀。
- qt函式:用於計算t分佈的臨界值,例如在自由度為9時,計算單側95%分位數的臨界值,用於構建置信區間。
資料科學中的t分佈與中心極限定理
在資料科學領域,雖然經驗性Bootstrap抽樣方法可以回答大多數關於抽樣誤差的問題,但仍需理解t分佈及其相關概念。資料科學家在進行A/B測試、迴歸分析時,會經常遇到t統計量,因此熟悉其原理和使用場景至關重要。
重點整理
- t分佈是一族類別似正態分佈但尾部更厚的分佈,用於描述樣本統計量的分佈。
- t分佈廣泛用於評估樣本平均值、兩個樣本平均值的差異等統計量的置信區間。
- 資料科學家需理解t分佈及其在統計推斷中的作用,儘管現代計算能力已使Bootstrap方法成為主要工具。
二項分佈(Binomial Distribution)解析
試驗、成功與二項分佈的基本概念
二項分佈描述了一系列獨立試驗中成功次數的機率分佈,每次試驗只有兩個可能的結果,例如拋硬幣或點選轉化購買等二元事件。二項分佈由試驗次數(n)和每次試驗的成功機率(p)決定。
二項分佈的數學表達與應用
二項分佈可用於回答諸如「在給定點選次數和轉化機率下,觀察到特定數量轉化的機率是多少」的問題。在R語言中,可以使用dbinom函式計算二項分佈的機率,例如:
# 計算在200次點選中觀察到0次銷售的機率,假設每次點選轉化為銷售的機率為0.02
dbinom(x = 0, size = 200, p = 0.02)
內容解密:
dbinom函式:第一個引數x表示成功的次數,第二個引數size表示試驗總次數,第三個引數p表示每次試驗的成功機率。- 應用場景:可用於評估在給定廣告點選次數和轉化率下,觀察到特定數量轉化的可能性。
累積機率的計算
除了單一事件的機率,有時我們更關心在n次試驗中觀察到x次或以下成功的累積機率,此時可以使用pbinom函式:
# 計算在200次點選中觀察到0次或1次銷售的累積機率
pbinom(q = 1, size = 200, prob = 0.02)
內容解密:
pbinom函式:第一個引數q表示觀察到的成功次數上限,第二個引數size表示試驗總次數,第三個引數prob表示每次試驗的成功機率。- 實際意義:可用於風險評估,例如計算在特定條件下發生少於某個數量事件的總體機率。
重點整理
- 二項分佈描述了一系列獨立二元試驗中成功次數的機率分佈。
- R語言中的
dbinom和pbinom函式分別用於計算二項分佈的單點機率和累積機率。 - 二項分佈在實際應用中可用於評估二元事件(如點選轉化)的發生機率和風險管理。
二項分佈
在統計學中,二項分佈是一種離散機率分佈,用於描述在 $n$ 次獨立試驗中,成功次數的機率分佈,其中每次試驗的成功機率為 $p$。在 R 語言中,可以使用 pbinom 函式計算二項分佈的累積機率。例如:
pbinom(2, 5, 0.1)
這將傳回 0.9914,即在 5 次試驗中觀察到 2 次或更少成功的機率,其中每次試驗的成功機率為 0.1。
在 Python 中,可以使用 scipy.stats 模組中的 binom.pmf 和 binom.cdf 函式計算二項分佈的機率品質函式和累積分佈函式:
import scipy.stats as stats
stats.binom.pmf(2, n=5, p=0.1)
stats.binom.cdf(2, n=5, p=0.1)
內容解密:
stats.binom.pmf(2, n=5, p=0.1)用於計算在 5 次試驗中恰好成功 2 次的機率,其中每次試驗的成功機率為 0.1。stats.binom.cdf(2, n=5, p=0.1)用於計算在 5 次試驗中成功次數小於或等於 2 的累積機率。
二項分佈的平均值為 $n \times p$,代表在 $n$ 次試驗中預期的成功次數。變異數為 $n \times p \times (1 - p)$。當 $n$ 足夠大,且 $p$ 不太接近 0 或 1 時,二項分佈近似於常態分佈。
重點概念
- 二項分佈用於描述具有兩種可能結果的試驗中的成功次數。
- 當 $n$ 較大,且 $p$ 不太極端時,二項分佈可近似為常態分佈。
卡方分佈
卡方分佈常用於檢驗觀察值與期望值之間的差異,尤其是在分類別資料的分析中。卡方統計量衡量觀察值與期望值之間的差異,並將其標準化以便與參考分佈進行比較。
重點概念
- 卡方分佈用於衡量觀察值與期望值之間的差異。
- 卡方統計量用於檢驗分類別變數之間的獨立性。
F 分佈
F 分佈用於比較不同組別之間的變異是否顯著大於隨機變異,常見於實驗設計和線性迴歸分析中。F 統計量是組間變異與組內變異的比率,用於檢驗不同組別之間的平均值是否存在顯著差異。
重點概念
- F 分佈用於比較不同組別之間的變異。
- F 統計量用於檢驗不同處理之間的差異是否顯著。
Poisson 分佈及其相關分佈
許多過程會隨機產生事件,例如網站訪客或瑕疵產品。Poisson 分佈用於描述在固定時間或空間內發生的事件次數。
重點概念
- Poisson 分佈用於描述隨機發生的事件。
- Poisson 分佈的平均值和變異數相等。
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
title 常態與其他統計分佈概念解析
package "統計分析流程" {
package "資料收集" {
component [樣本資料] as sample
component [母體資料] as population
}
package "描述統計" {
component [平均數/中位數] as central
component [標準差/變異數] as dispersion
component [分佈形狀] as shape
}
package "推論統計" {
component [假設檢定] as hypothesis
component [信賴區間] as confidence
component [迴歸分析] as regression
}
}
sample --> central : 計算
sample --> dispersion : 計算
central --> hypothesis : 檢驗
dispersion --> confidence : 估計
hypothesis --> regression : 建模
note right of hypothesis
H0: 虛無假設
H1: 對立假設
α: 顯著水準
end note
@enduml
此圖示展示了不同統計分佈之間的關係。
圖表解密:
- 二項分佈、卡方分佈、F 分佈和 Poisson 分佈都是重要的統計分佈。
- 二項分佈用於描述二元結果的試驗。
- 卡方分佈用於檢驗分類別資料的獨立性。
- F 分佈用於比較不同組別之間的變異。
- Poisson 分佈用於描述隨機發生的事件。
卜瓦松分佈及其相關分佈的關鍵術語
Lambda(λ)
事件發生的速率(每單位時間或空間)。
卜瓦松分佈(Poisson Distribution)
在抽樣的時間或空間單位中,事件發生次數的頻率分佈。
指數分佈(Exponential Distribution)
從一個事件到下一個事件的時間或距離的頻率分佈。
威布林分佈(Weibull Distribution)
指數分佈的廣義版本,允許事件發生率隨時間變化。
卜瓦松分佈
根據先前的匯總資料(例如,每年的流感感染人數),我們可以估計單位時間或空間內的平均事件發生次數(例如,每天或每個普查單位的感染人數)。我們可能還想知道這在不同的時間/空間單位之間會有怎樣的變化。卜瓦松分佈告訴我們,當我們抽樣多個這樣的單位時,每個單位中事件發生次數的分佈。在處理排隊問題時,例如「我們需要多少容量才能保證在任何五秒鐘內完全處理到達伺服器的網路流量?」,卜瓦松分佈非常有用。
卜瓦松分佈的關鍵引數是$\lambda$(lambda),即在特定時間或空間間隔內發生的平均事件次數。卜瓦松分佈的變異數也是$\lambda$。
一個常見的技術是透過卜瓦松分佈生成隨機數,作為排隊模擬的一部分。R語言中的rpois函式實作了這一點,它只需要兩個引數:所需的隨機數量和lambda:
rpois(100, lambda=2)
對應的Python scipy函式是stats.poisson.rvs:
import numpy as np
from scipy import stats
stats.poisson.rvs(2, size=100)
內容解密:
rpois(100, lambda=2)和stats.poisson.rvs(2, size=100)用於生成100個來自卜瓦松分佈的隨機數,其中$\lambda = 2$。- 這個例子模擬了客戶服務電話平均每分鐘2個的情況,傳回100分鐘內每分鐘接到的電話數量。
指數分佈
使用與卜瓦松分佈相同的引數$\lambda$,我們還可以模擬事件之間的時間分佈:網站存取之間的時間或到達收費站的汽車之間的時間。它也用於工程領域來模擬故障時間,以及在流程管理中模擬每次服務呼叫所需時間。R語言中生成指數分佈隨機數的程式碼需要兩個引數:n(要生成的數字數量)和rate(每個時間段的事件數量)。例如:
rexp(n=100, rate=0.2)
在Python的stats.expon.rvs函式中,引數順序相反:
stats.expon.rvs(0.2, size=100)
內容解密:
rexp(n=100, rate=0.2)和stats.expon.rvs(0.2, size=100)生成100個來自指數分佈的隨機數,其中平均每個時間段的事件數量為0.2。- 這可用於模擬100個間隔(以分鐘為單位)的服務呼叫之間的時間,其中平均呼叫率為每分鐘0.2次。