Skip to main content

Command Palette

Search for a command to run...

Weibull Distribution: Overview

Updated

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 分布在實際應用中具有更高的靈活性與適用性,是理解與預測產品壽命及故障行為的重要工具。