广义加性模型

简要介绍

在统计学中,广义加性模型(GAM)是一种广义线性模型,其中线性响应变量线性地依赖于一些预测变量的未知光滑函数,并且人们对这些光滑函数的推理很感兴趣。

GAM最初由Trevor Hastie和Robert Tibshirani[1]开发,用于将广义线性模型的性质与加性模型相结合。它们可以被解释为朴素贝叶斯生成模型的判别推广。该模型将一个单变量响应变量Y和一些预测变量x_i联系起来。为Y指定指数族分布,例如正态分布、二项分布或者泊松分布,以及通过如下结构

$g(\mathrm{E}(Y))=\beta_0+f_1(x_1)+f_2(x_2)+\cdots+f_m(x_m).$

将Y的期望值与预测变量相关的连接函数g(例如恒等式或者对数函数),用于连接线性和分布族。函数f_i可以是具有指定参数形式的函数(例如多项式或者一个变量的非惩罚回归样条曲线),也可以是非参数或者半参数的,简单地指定为“平滑函数”,通过非参数的方法进行估计。

组成函数

这里简单介绍一下这里的参数函数、非参数或者半参数函数。在GAM模型中,响应变量(或者称为因变量,例如时间序列中下一个时间点的值)被建模为若干预测变量(例如时间、季节性因子等)函数的和。每个预测变量对应的函数记作f_i,可以有不同的形式

1. 参数形式(parametric form):f_i可以是参数化的函数形式,比如多项式,在这种情况下,函数的形状是通过一系列参数决定的,例如在二次多项式中,有三个参数(二次项系数、一次项系数和常数项)。

例如,我们想要根据某人的年龄(age)预测其健康指数(Health index),并且我们假设年龄与健康指数之间的关系可以用二次多项式建模。那么年龄对应的函数f_i(age)可以写为

f_i(age)={\beta}_0+{\beta}_1*age+{\beta}_2*age^2

这里{\beta}_0, {\beta}_1, {\beta}_2是多项式的系数,这些需要从数据中估计得到。

2. 半参数形式(semi-parametric):设想在建模某种环境指数(environment index)对健康指数的影响时,我们同时考虑了季节性影响,并假设它有一个周期性的效应。在这种情况下,我们可以使用半参数方法。例如,我们将周期性效应(Seasonality)建模为一个非参数光滑函数f_{seasonality},而环境指数用线性项\beta * environmental_{index}来建模:

f_seasonality(Season)  # 非参数的周期性效应,使用光滑函数表示
f_environmental(Environmental_Index) = β * Environmental_Index  # 线性参数模型

这样,GAM 模型可以结合非参数和参数形式的函数来适应数据的特点。

3. 非参数形式(non-parametric):f_i也可以是非参数形式,也就是不通过参数化的形式指定其确切的数学表达式,而是允许数据自己“讲述”函数的形状,这种情况下,函数是通过平滑(smooth)地逼近数据点来估计的。常用的方法包括核平滑(kernel smoothing)和局部回归(local regression)。

例如,如果我们没有足够的信息来假设年龄和健康指数之间的确切关系形式,我们可以允许数据自己决定最佳拟合曲线,而不是预先定义一个参数化的函数。这时候,我们可以用一种非参数的方法,比如光滑样条(smooth spline),来建模f_i(age),其中我们不假定具体的函数形式,而是让曲线在一定光滑性约束下尽可能贴近数据点。非参数形式通常涉及到可调整的光滑参数或者光滑度选择,这些可以通过交叉验证等方法在模型训练过程中确定。

举用一个更具体的例子,

非参数方法的一个典型示例是核平滑(Kernel Smoothing)。首先,让我们通过一个简单的散点数据集来理解非参数估计是如何工作的。

假设我们有一个数据集,其中包含一组独立变量 X(比如时间点)和相应的因变量 Y(比如某一测量值),我们没有预设 Y 与 X 之间关系的具体形式。非参数估计的目标是找到一个趋势线或者光滑曲线,使其能够尽量贴近这些散点数据。

在下面的 Python 代码示例中,我们将使用一个简单的非参数光滑器:局部加权散点平滑(Locally Weighted Scatterplot Smoothing, LOWESS)。我们不会预设关系的形式,而是让数据自身来揭示这一关系。

import numpy as np
import matplotlib.pyplot as plt
from statsmodels.nonparametric.smoothers_lowess import lowess

# 创建一个数据集,其中包含一定的非线性关系
# 比如我们考虑 Y = sin(X) + ε,其中 ε 是随机噪声
np.random.seed(0)
X = np.linspace(0, 2 * np.pi, 100)
Y = np.sin(X) + np.random.normal(0, 0.5, len(X))

# 使用 LOWESS 方法来估计 Y 和 X 之间的关系
# fracy 参数表示使用数据点的一部分来估计每一个y值的局部回归
Y_smoothed = lowess(Y, X, frac=0.1)[:, 1]

# 可视化原始数据和 LOWESS 光滑曲线
plt.scatter(X, Y, label='Original Data', color='lightblue')
plt.plot(X, Y_smoothed, label='LOWESS Smoothed', color='darkred', linewidth=2)
plt.legend()
plt.title('Non-parametric Estimation with LOWESS')
plt.show()

在这个例子中,LOWESS 算法遍历每个 X 值(或者一个X值的窗口),并且对于每个X值,它寻找周围的点并根据它们的距离给予不同的权重。然后,它使用一个加权最小二乘法在每个小区域内拟合出一条直线(或者曲线,取决于给定的多项式度数)。这些局部拟合的结果汇总起来就形成了整体的光滑曲线,不需要预设 X 和 Y 之间的具体关系。

请注意,光滑参数 frac 控制了每次拟合中考虑的数据点的比例——frac 值越大,曲线越光滑(但可能会忽略一些局部特征);frac 值越小,曲线越能捕捉数据的局部特征(但可能会受到噪声的影响)。通过尝试不同的 frac 值,我们可以找到一个适当的平衡,从而以非参数的方式揭示数据的内在关系。

在实际应用中,选择函数形式需要根据你所拥有的数据的特点和领域知识。参数化模型通常容易解释,但可能缺乏灵活性;而非参数或半参数模型更灵活,但可能较难解释,并且可能需要更多数据来准确估计。

理论背景

自20世纪50年代以来(通过Kolmogorov–Arnold表示定理),人们就知道任何多变量连续函数都可以表示为单变量函数的和组成

f(\vec{x})=\sum_{q=0}^{2n}\Phi_q\left(\sum_{p=1}^n\phi_{q,p}(x_p)\right).

不幸的是,尽管Kolmogorov–Arnold表示定理断言了这种形式的函数的存在,但它没有给出可以构造函数的机制。某些构造型证明存在,但它们往往需要高度复杂的(即分形)函数,因此不适合建模方法。因此广义加性模型去掉了外和,而是要求函数属于更简单的类

其中\Phi是一个平滑单调函数。将g记作\Phi的逆,这在传统上被写为

当这个函数近似于某个观测量的期望值时,可被谢伟

这是广义加性模型的标准公式。然后证明了[1][如何?]反拟合算法将始终收敛于这些函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值