簡介:為什麼要使用廣義線性模型(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:x2或x1*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 中,我們主要使用兩種類型的殘差:
- Pearson 殘差: 基於觀測值與預測值之間的差異,並按標準差進行縮放。
- 離差殘差(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 在準確性與簡潔性之間取得平衡。