簡介:為什麼要使用廣義線性模型(GLMs)?

歡迎!如果你已經掌握了線性迴歸(Linear Regression),你就會知道它是預測反應變數(response variable)的強大工具。然而,在現實世界中——特別是在精算工作中——數據通常不會遵循完美的「正態」(Normal)分佈。例如,索償次數通常是整數(服從泊松分佈 Poisson),而索償金額通常是正數且呈現偏態(服從伽瑪分佈 Gamma)。這就是廣義線性模型(GLMs)大顯身手的時候!

在本章中,我們將重點放在使用 R 語言操作 GLM 的實務層面。我們將學習如何告訴軟件使用哪種分佈「家族」(family)、如何解讀結果,以及如何判斷我們的模型是否真的理想。如果在 Paper A 中覺得理論太沉重,請別擔心;Paper B 的核心在於如何「解讀」輸出結果並理解其含義。

註:本章建立在大家對「擬合及解讀線性迴歸輸出」的知識基礎上。如果你已經熟悉 \(y \sim x\) 的語法,那你已經成功了一半!

1. 剖析 glm() 函數

在 R 中,我們使用 glm() 函數來擬合 GLM。其語法與 lm() 非常相似,但多了一個關鍵部分:family 參數。

基本的代碼結構:
my_model <- glm(response ~ explanatory_variables, family = distribution(link = "link_function"), data = my_data)

選擇家族(Family)與連結(Link)

family 告訴 R 反應變數的分佈,而連結函數(link function)則告訴 R 平均值如何與線性預測值產生關聯。在 CS1 課程大綱下,你應該熟悉以下常見的組合:

  • 正態(Normal / Gaussian): family = gaussian(link = "identity") — 這其實就是標準的線性迴歸!
  • 泊松(Poisson): family = poisson(link = "log") — 最適合處理索償次數。
  • 二項(Binomial): family = binomial(link = "logit") — 用於「是/否」的結果(例如:保單會失效嗎?)。
  • 伽瑪(Gamma): family = gamma(link = "inverse")link = "log" — 用於正數且偏態的數據,如索償成本。
  • 指數(Exponential): 這是伽瑪家族的一個特例。

核心概念:正則連結(The Canonical Link)。 每種分佈都有一個「自然」的連結函數,稱為正則連結。泊松分佈的正則連結是 log;二項分佈則是 logit。如果你沒有指定連結函數,R 會默認使用這些正則連結。

2. 理解線性預測值(Linear Predictor)

線性預測值通常用 \(\eta\) (eta) 表示,它是你所有變數的組合:

\(\eta = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + ...\)

在 R 中,我們可以包含不同類型的項:

  • 變數(Variables): 連續數字(例如:年齡、投保薪額)。
  • 因子(Factors): 類別數據(例如:地區、性別)。R 會自動為這些變數創建「虛擬變數」(dummy variables)。
  • 交互項(Interaction Terms): 寫作 x1:x2x1*x2。當一個變數的影響取決於另一個變數的水平時,就會用到交互項。

小貼士: 如果你在輸出中看到 RegionNorth,這意味著模型正在將「北方」(North)地區與「基準」(Baseline)地區(參考水平)進行比較。估計值顯示了與基準相比,線性預測值的差異。

3. 解讀 summary() 輸出結果

當你執行 summary(my_model) 後,R 會提供大量信息。讓我們為你的考試拆解最重要的部分。

係數表(The Coefficients Table)

對於每個變數,R 會提供:

  • Estimate(估計值): 計算出的 \(\beta\) 值。注意: 這些數值是基於連結函數尺度的!如果你使用了 log 連結,該估計值就是平均值 log 項的變化量。
  • Std. Error(標準誤): 估計值的不確定性。
  • z value(z 值): 檢驗統計量(\(Estimate \div Std. Error\))。
  • Pr(>|z|): p 值。如果此值小於 0.05,該變數通常被認為在 5% 置信水平下具有顯著性。

離差(Deviance)與縮放離差(Scaled Deviance)

在 GLM 中,離差(Deviance)取代了線性迴歸中的「平方和」。它衡量你的模型與完美模型(飽和模型 saturated model)之間的「距離」。

  • Null Deviance(零模型離差): 僅包含截距(無變數)的模型對反應變數的預測效果。
  • Residual Deviance(殘差離差): 你的模型對反應變數的預測效果。

經驗法則: 我們希望殘差離差越小越好。如果殘差離差遠小於零模型離差,說明你的變數發揮了很好的預測作用!

AIC (Akaike Information Criterion)

AIC 是衡量模型擬合度的指標,它會對加入過多變數懲罰。 AIC 越低 = 模型越好。 如果你在比較兩個模型,通常首選 AIC 較低的那個。

4. 模型選擇的統計檢驗

我們如何知道增加一個變數是否真的改善了模型?我們主要使用兩種檢驗:

似然比檢驗(LRT)/ 離差分析(Analysis of Deviance)

在 R 中,我們使用 anova() 函數來比較兩個嵌套(nested)模型(即一個模型是另一個模型的簡化版):

anova(model_simple, model_complex, test = "Chisq")

如果 p 值很小(例如 < 0.05),則較複雜的模型顯著優於簡化模型。

Pearson 卡方檢驗

這通常用於檢查擬合優度(Goodness of Fit)。我們將 Pearson 殘差與 \)\chi^2\) 分佈進行比較。如果 p 值非常小,則表明模型與數據的擬合並不理想。

5. 檢查殘差(Residuals)

即使 p 值看起來很完美,你仍必須檢查模型的假設是否成立。在 GLM 中,我們主要使用兩種類型的殘差:

  1. Pearson 殘差: 基於觀測值與預測值之間的差異,並按標準差進行縮放。
  2. 離差殘差(Deviance Residuals): 基於每個數據點對總離差的貢獻。

繪圖時要注意什麼:
使用 plot(my_model)。你尋找的是隨機分佈的點。如果你看到明顯的模式(如漏斗狀或曲線),你的模型可能遺漏了交互項,或者使用了錯誤的連結函數。

應避免的常見陷阱

  • 混淆連結與反應: 請記住,GLM 係數是在連結尺度上的。要獲得原始尺度上的預測值(例如實際索償次數),你通常需要在 R 中使用 predict(..., type = "response") 函數。
  • 過擬合(Overfitting): 添加過多變數會降低離差,但可能使模型對新數據失去預測能力。請務必參考 AIC
  • 忽視因子: 如果一個因子有 5 個水平,R 會顯示 4 個係數。第 1 個水平被隱藏在「(Intercept)」截距項中。

快速複習框

1. 函數: glm(y ~ x, family = poisson, data = d)
2. 顯著性: 檢查摘要表中的 Pr(>|z|)
3. 比較: 較低的 AIC殘差離差(Residual Deviance) 表示擬合效果更好。
4. 嵌套模型: 使用 anova(m1, m2, test = "Chisq") 來判斷額外的變數是否值得加入。
5. 尺度: 結果是在連結尺度(link scale)上的,除非你在預測時指定 type = "response"

總結要點

擬合 GLM 的核心在於為你的數據選擇正確的概率分佈,並使用連結函數將其與預測變數聯繫起來。解讀過程涉及尋找顯著的 p 值、降低零模型的離差,並利用 AIC 在準確性與簡潔性之間取得平衡。