以节点为参数的分段线性回归

机器算法验证 回归 样条 分段线性
2022-03-06 17:52:35

我想拟合一个以结为参数的分段线性回归。我想知道什么是最好的解决方案。

  • 我是否应该使用所有可能的节点运行一组回归并选择可以最小化信息标准(例如 AIC(Akaike 信息标准))的节点?
  • 如果这是最好的解决方案,我如何计算我的估计的标准误差?
4个回答

在模型中设置无节点参数会将问题变成一个不适合使用标准估计软件的复杂问题。标准误差的计算变得非常复杂。线性样条对节点的放置位置非常敏感,并且对不太可能是真实的“肘部”进行建模,除非日历时间。三次样条具有以下优点:(1)没有肘部,因为它们具有 3 个连续性顺序,以及(2)即使您移动节点也能提供类似的拟合。因此,您通常可以根据X=X并且不将节点估计作为优化问题的一部分。将三次回归样条限制为尾部的线性(超出外部结),称为自然样条或受限三次样条,减少了要估计的参数数量并进行更真实的拟合。

一旦您创建了设计矩阵,这种方法允许您使用标准估计和假设检验工具,并且不需要任何特殊的回归拟合函数。更多信息请参见http://biostat.mc.vanderbilt.edu/CourseBios330下的讲义。拟合受限三次样条后,您可以将其与置信带(也可以使用标准方法获得)一起绘制,并查看斜率变化。的预先指定区域中将两个结放在一起X

Frank Harell 提出了一些有趣的替代方案。然而,在某些情况下,人们可能对估计分段线性模型感兴趣:

  • 对节点位置本身的兴趣:节点位置可以代表一个人们想知道的临界点、不连续点。
  • 减少参数数量

我在这里假设您有兴趣找到结的位置。这在一些文献中被称为分段回归阈值回归,它们是变化点、结构中断回归的一般情况(弗兰克回答中的𝑋 = 日历时间)。请注意,在这些模型中,线不一定限制通过节点(即您在每个方案中分别拟合截距和斜率)。

这篇文献回答了你的两个问题:

  1. 估计:这通常使用非线性最小二乘 (NLS) 来完成。一个简单的算法是在网格上搜索每个结,然后选择具有最低 LS 误差的那个。对于多个节点,该算法将需要 2D 网格、3D 网格等……这变得不可行,但幸运的是,已经提出了更有效的解决方案(参见 Killick 等人 2012 年的一个示例)。几个 R 包允许这样做,例如segmentedseglm

  2. 一种估计是使用类似 LASSO 的估计器,对每个观察使用一个系数,并惩罚系数之间的差异(即使用惩罚)。结是的位置。优点是在这种情况下存在有效的估计器,例如参见 Tibshirani 和 Taylor (2011)。这进一步在 R 包genlasso中实现。|βkβk1|βkβk1

  3. 推理坏消息是这些模型中的推理非常复杂(假设有几个大断点)。参见例如 Hansen (1996, 2000)

参考:

  • Hansen, BE,1996 年 3 月。在零假设下未确定有害参数时的推断。计量经济学 64 (2), 413–30。

  • Hansen, BE,2000 年 5 月。样本分割和阈值估计。计量经济学 68 (3), 575–604。

  • Killick, R.、Fearnhead, P. 和 Eckley, IA (2012),“具有线性计算成本的变化点的最佳检测”,美国统计协会杂志 107(500),1590–1598。

  • Tibshirani, RJ 和 Taylor, J. (2011),“广义套索的解决路径”,统计年鉴,39,1335-1371。[843]

我之所以制作 R 包mcp,正是因为缺少量化关于推断的变化点位置的不确定性(例如 SE)的包。在贝叶斯框架中,变化点问题在概念上很简单,并且可以使用 Gibbs 采样的变体进行计算(在此预印本中阅读更多内容)。

mcp包括具有三个线性段的数据集:

> head(ex_demo)
      time  response
1 68.35820 32.842651
2 87.29038 -1.160003
3 69.01173 27.564248
4 11.59361 10.062971
5 19.50091 14.056859
6 46.12009 18.292640

让我们用三个段拟合分段线性回归。mcp你这样做时,每个段都有一个公式:

library(mcp)

# Define the model
model = list(
  response ~ 1,  # plateau
  ~ 0 + time,    # joined slope
  ~ 1 + time     # disjoined slope
)

# Fit it.
fit = mcp(model, data = ex_demo)

我们先形象化一下:

plot(fit)

x 轴上的蓝色曲线是变化点的后验。您可以更直接地使用plot_pars(fit). 请注意,它们很少符合任何“干净”的已知密度,如正态分布。

使用 . 查看摘要summary(fit)mcp包括测试参数值、模型比较等功能。在mcp 网站上阅读更多内容。

在此处输入图像描述

MARS(多元自适应回归样条)是另一种可能更接近您的目标的方法。这是原始论文的链接和实现它的 python 库:https ://github.com/scikit-learn-contrib/py-earth 。