Weibull Distribution: Overview
1. 主要用途與定義
存活分析或可靠性分析中,指數分布可以描述風險率(hazard rate;即個體單位時間發生風險的比率)恆定的情況。然而,現實中許多風險率會隨時間改變,這時就需要一種能夠描述「風險率隨時間變化」的分布。Weibull 分布正是基於此考量而提出的,它可視為針對指數分布風險率一般化的結果。
Weibull 分布在多個領域中都有廣泛應用,包括:
- 生存分析:統計病患的生存時間,評估治療效果。
- 可靠性工程:預測電子元件、機械零部件等的使用壽命與故障風險。
- 風速分析:描述風速分布,指導風電場設計。
- 材料科學:分析脆性材料的斷裂強度,預測材料失效概率。
1.1 概率密度函數(PDF)
Weibull 分布的概率密度函數定義為
\[ f(t; \lambda, k) = \begin{cases} \displaystyle \frac{k}{\lambda}\left(\frac{t}{\lambda}\right)^{k-1} \exp\left[-\left(\frac{t}{\lambda}\right)^k\right], & t \ge 0,\ \\[1mm] 0, & t < 0, \end{cases} \]
其中:
- \( \lambda > 0 \) 為尺度參數,控制分布在時間軸上的拉伸或壓縮;
- $ k > 0 $ 為形狀參數,決定風險率隨時間的變化模式。
1.2 累積分布函數(CDF)
累積分布函數表示隨機變量小於等於 $t$ 的機率,定義為
\[ F(t; \lambda, k) = 1 - \exp\left[-\left(\frac{t}{\lambda}\right)^k\right],\quad t \ge 0. \]
例如,當 \(t = \lambda\) 時,得到
\[ F(\lambda; \lambda, k) = 1 - e^{-1} \approx 0.632, \]
表示約 63.2% 的樣本在 \(t=\lambda\) 時已發生風險(失效)。
1.3 風險率函數(Hazard Function)
風險率函數 $h(t)$ 定義為
\[ h(t) = \frac{f(t)}{1-F(t)}, \]
對於 Weibull 分布,經化簡後可得
\[ h(t) = \frac{k}{\lambda^k}\,t^{\,k-1}. \]
這裡的特點在於:
- 當 \(k=1\) 時,\(h(t)=\frac{1}{\lambda}\) 為常數,此情況下 Weibull 分布即退化為指數分布,表現為「無記憶性」;
- 當 $k<1$ 時,$h(t)$ 隨 $t$ 下降,適用於描述初期風險(如嬰兒死亡現象);
- 當 $k>1$ 時,$h(t)$ 隨 $t$ 上升,反映病人老化(或零件磨損)風險逐漸提高。
2. 參數意義與一般化關係
尺度參數 \( \lambda \):
它相當於對時間座標進行縮放的因子,類似於指數分布中唯一的參數。較大的 \( \lambda \) 表示整體壽命較長,反之則較短。形狀參數 $ k $:
決定了風險率隨時間的變化趨勢。當 \(k=1\) 時,風險率恆定,即指數分布;當 \(k\neq 1\) 時,Weibull 分布就能描述風險率隨時間增加或減少的現象,從而對指數分布做了一般化。
因此,Weibull 分布不僅涵蓋了指數分布(\(k=1\) 的特例),還能更靈活地刻畫實際中不同的風險機制。
3. Code for Visualization
import numpy as np
import matplotlib.pyplot as plt
# Define time range (avoiding zero)
t = np.linspace(0.1, 10, 500)
# Parameters
lambda_vals = [1, 2] # Two lambda values
k_vals = [0.5, 1, 1.5] # Three k values
line_styles = {0.5: "solid", 1: "dashed", 1.5: "dotted"}
colors = {1: "gray", 2: "orange"} # lambda=1: gray; lambda=2: orange
# Define functions
def pdf(t, lam, k):
return (k / (lam**k)) * (t**(k-1)) * np.exp(- (t/lam)**k)
def cdf(t, lam, k):
return 1 - np.exp(- (t/lam)**k)
def hazard(t, lam, k):
return (k / (lam**k)) * (t**(k-1))
# Create subplots: 1 row x 3 columns
fig, axs = plt.subplots(1, 3, figsize=(18, 5), sharex=True)
# Plot PDF
for lam in lambda_vals:
for k in k_vals:
# Append extra label for k=1
extra = " (exponential)" if k == 1 else ""
label = f"lambda={lam}, k={k}{extra}"
axs[0].plot(t, pdf(t, lam, k), color=colors[lam], linestyle=line_styles[k], label=label)
axs[0].set_title("PDF")
axs[0].set_ylabel("f(t)")
axs[0].grid(True)
axs[0].legend()
# Plot CDF
for lam in lambda_vals:
for k in k_vals:
extra = " (exponential)" if k == 1 else ""
label = f"lambda={lam}, k={k}{extra}"
axs[1].plot(t, cdf(t, lam, k), color=colors[lam], linestyle=line_styles[k], label=label)
axs[1].set_title("CDF")
axs[1].set_ylabel("F(t)")
axs[1].grid(True)
axs[1].legend()
# Plot Hazard Function
for lam in lambda_vals:
for k in k_vals:
extra = " (exponential)" if k == 1 else ""
label = f"lambda={lam}, k={k}{extra}"
axs[2].plot(t, hazard(t, lam, k), color=colors[lam], linestyle=line_styles[k], label=label)
axs[2].set_title("Hazard Function = PDF / (1 - CDF)")
axs[2].set_xlabel("Time t")
axs[2].set_ylabel("h(t)")
axs[2].grid(True)
axs[2].legend()
plt.tight_layout()
plt.show()

尺度參數 \(\lambda\) 決定了故障事件的發生時間的縮放。
形狀參數 $k$ 的調整,能夠描述不同的失效模式:
- $k<1$ 表示初期風險率高,隨後降低;
- \(k=1\) 表示風險率固定,退化為 Exponential 分布。
- $k>1$ 表示隨著時間增長風險率上升。
4. 小結
Weibull 分布透過引入形狀參數 $ k $ 對指數分布進行了擴展,使其能夠描述隨時間變化的風險率。這種一般化方法使得 Weibull 分布在實際應用中具有更高的靈活性與適用性,是理解與預測產品壽命及故障行為的重要工具。