简介:为什么要使用广义线性模型(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 在准确性与简洁性之间取得平衡。