# 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

```python

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()


```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1740362762077/f8e51382-b0ae-4d98-8bec-bf20db44ff5e.png align="center")

- **尺度參數 \\(\lambda\\) ** 決定了故障事件的發生時間的縮放。 

- **形狀參數 \\(k\\) ** 的調整，能夠描述不同的失效模式：  
  - \\(k<1\\) 表示初期風險率高，隨後降低；  
  - \\(k=1\\) 表示風險率固定，退化為 Exponential 分布。
  - \\(k>1\\) 表示隨著時間增長風險率上升。


---

# 4. 小結

Weibull 分布透過引入形狀參數 \\( k \\) 對指數分布進行了擴展，使其能夠描述隨時間變化的風險率。這種一般化方法使得 Weibull 分布在實際應用中具有更高的靈活性與適用性，是理解與預測產品壽命及故障行為的重要工具。

