You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Patsy的B样条中获取GLM模型的原始系数与分段斜率?

关于分段回归斜率计算的确认与解释

首先给你一个明确的结论:你的判断完全正确!不管用Patsy的bs()函数还是手动构造截断变量,分段2的斜率都是对应区间内所有生效解释变量的系数之和,分段1的斜率则直接取对应区间内生效的系数。下面详细拆解两种模型的逻辑:

1. Patsy bs(length, degree=1, knots=[32]) 的后台逻辑

当你指定degree=1(线性样条)和knots=[32]时,bs()会生成两个样条基函数:

  • 基函数1:当length <= 32时,值等于length;当length > 32时,值固定为32
  • 基函数2:当length <= 32时,值为0;当length > 32时,值等于length - 32

你的模型得到的系数是0.3763(对应基函数1)和0.4335(对应基函数2),所以:

  • 分段1(length <=32):只有基函数1生效,斜率就是第一个系数 → 0.3763
  • 分段2(length >32):两个基函数都生效,斜率是两个系数之和 → 0.3763 + 0.4335 = 0.8098

2. 手动构造变量 y ~ length + np.maximum(length-32,0) 的逻辑

这种写法是**折断回归(Broken Stick Regression)**的手动实现,两个解释变量的作用是:

  • 第一个变量length:全程生效,对应基础斜率
  • 第二个变量np.maximum(length-32,0):仅当length >32时生效,对应斜率的变化量

你的模型系数是0.0118(对应length)和-0.0074(对应截断变量),所以:

  • 分段1(length <=32):截断变量为0,斜率就是第一个系数 → 0.0118
  • 分段2(length >32):两个变量都生效,斜率是系数之和 → 0.0118 + (-0.0074) = 0.0044

为什么两种模型预测结果一致?

虽然两种写法的系数看起来差异很大,但本质是对同一个分段线性关系的不同参数化方式——你可以通过线性变换把bs()生成的基函数转换成手动构造的变量,反之亦然。参数化方式不同,但拟合出来的预测曲面(这里是分段直线)完全相同,所以预测结果一致。

通用规则总结

对于这两种分段线性回归的写法,计算分段斜率的规则是通用的:

  • 找到目标区间内所有非零的解释变量(不管是样条基还是手动截断变量)
  • 将这些变量对应的系数相加,就是该区间的斜率
  • 分段1(第一个区间)通常只有一个解释变量生效,斜率直接取其系数

内容的提问来源于stack exchange,提问作者Jordan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:47:36