基于spss的分段回归模型(piecewise linear regression)

本文介绍了分段回归模型的概念及应用,通过SPSS软件详细展示了分段回归模型的建立过程,包括图像分析和回归分析,以居民用电量与日平均气温间的关系为例,展示了如何确定分段点并进行模型拟合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、简介

 分段线性回归是指当y对x的回归在x的某一范围的服从某种线性关系,在其他范围内又服从斜率不同的线性关系时适用的一种回归估计方法。这种方法使用指示变量对各段(即不同范围的)数据同时拟合统—的回归模型 。
 某些变量之间的关系非常有趣,不是恒久的线性或非线性关系,可能其中一段表现为线性,而另一段表现为非线性。例如,我们举一个每个人都有切身体会的例子,人的身高和年龄的关系,在3岁到10岁期间,它们基本是线性相关,而高中以后,身高基本定型,不再随年龄的增加而增长。对于这样的变量关系,在3到10岁期间,我们可以用一个线性方程来拟合年龄和身高的关系,而高中以后则需要换另一个方程,可以是线性的,也可以是非线性的,需要根据数据情况来选择。这就是分段回归模型的分析思路。
 通常的做法是对每个部分进行单独拟合,但是这样做参数较多,且样本被人为分开,当样本量较小时会导致分析结果的准确性很差。
 SPSS的非线性回归模块完美的解决了这个问题,可直接对分段函数进行直接拟合,以充分利用信息,提高模型的预测精度。由于原理简单,我们下面用一个具体的案例来介绍如何利用SPSS进行分段回归模型拟合。

二、模型分析

 分段线性回归模型由两条直线组成,但在折点处曲线仍是连续的。考虑以下的基本模型: Y i = β 0 + β 1 X t + u t Y_{i}=\beta_{0}+\beta_{1}X_{t}+u_{t} Yi=β0+β1Xt+ut 假定因变量 Y Y Y和解释变量 X X X均呈现随时间稳定增长的趋势,在时间 t = t 0 t=t_{0} t=t0处反映两者之间关系的曲线出现转折,使得两段曲线的截距和斜率都发生变化,但 Y Y Y的变化具有连续性。我们设定以下形式的虚拟变量: D t = { 0 ,    ( t < t 0 ) 1 ,    ( t ≥ t 0 ) D_{t}=\left\{\begin{matrix} 0,\: \: (t<t_{0})\\ 1,\: \: (t\geq t_{0})\end{matrix}\right. Dt={0,(t<t0)1,(tt0) 然后将待估计的分段线性回归模型写成: Y t = β 0 + β 1 X t + β 2 ( X t − X t 0 ) D t + u t     ( 1 ) Y_{t}=\beta_{0}+\beta_{1}X_{t}+\beta_{2}(X_{t}-X_{t_{0}})D_{t}+u_{t} \:\:\:(1) Yt=β0+β1Xt+β2(XtXt0)Dt+ut(1)由式(1)可以看出,当 t t t处于不同时间段时, Y Y Y的期望值分别为:
 当 t < t 0 t<t_{0} t<t0时,有 E ( Y t ) = β 0 + β 1 X t E(Y_{t})=\beta_{0}+\beta_{1}X_{t} E(Yt)=β0+β1Xt;
 当 t > t 0 t>t_{0} t>t0时,有 E ( Y t ) = ( β 0 − β 2 X t 0 ) + ( β 1 + β 2 ) X t E(Y_{t})=(\beta_{0}-\beta_{2}X_{t_{0}})+(\beta_{1}+\beta_{2})X_{t} E(Yt)=(β0β2Xt0)+(β1+β2)Xt
 当 t = t 0 t=t_{0} t=t0时,有 E ( Y t ) = β 0 + β 1 X t 0 = ( β 0 − β 2 X t 0 ) + ( β 1 + β 2 ) X t 0 E(Y_{t})=\beta_{0}+\beta_{1}X_{t_{0}}=(\beta_{0}-\beta_{2}X_{t_{0}})+(\beta_{1}+\beta_{2})X_{t_{0}} E(Yt)=β0+β1Xt0=(β0β2Xt0)+(β1+β2)Xt0
 即在 t = t 0 t=t_{0} t=t0处曲线为连续的。
在这里插入图片描述

三、基于spss的案例分析

 下面有一份数据,记录了该地去年5 月到8月的日平均气温,以及当天的居民用电总量,希望建立居民用电量与日平均气温间的预报方程。
在这里插入图片描述
##分析步骤

(一)图像分析

 根据散点图展示的变量关系,来选择合适的回归模型。
 绘制散点图:【图形】-【旧对话框】-【散点图】
在这里插入图片描述 由上图可知,日平均气温对用电量的影响分成两个阶段:24摄氏度以下时,用电量并不会随着气温的改变而显著增加;24摄氏度以上时,用电量随着平均气温的上升呈现明显的上升趋势。因此,该数据的模型可以这样写:
用 电 量 = b 1 ;     平 均 温 度 t < 2 4 o C 用电量=b_{1};\:\:\:平均温度t<24^{o}C =b1;t<24oC
用 电 量 = a 2 ∗ 平 均 温 度 + b 2 ;     平 均 气 温 t ≥ 2 4 o C 用电量=a_{2}*平均温度+b_{2};\:\:\:平均气温t\geq24^{o}C =a2+b2;t24oC

(二)回归分析

 选择菜单【分析】-【回归】-【非线性回归】;在跳出的对话框中作如下操作。将生活用电量选为因变量,在模型表达式框内输入:(平均气温 < 24)b1+(平均气温 >= 24)(a2*平均气温+b2);点击参数,设置表达式中的三个参数,由于是比较线性模型,迭代初始值都设置为1。点击继续,然后点击确定,输出结果:在这里插入图片描述
 根据模型参数值表格,我们可以写出两个回归方程:
用 电 量 = 2157.618 ;     平 均 温 度 t < 2 4 o C 用电量=2157.618;\:\:\:平均温度t<24^{o}C =2157.618;t<24oC
用 电 量 = 86.536 ∗ 平 均 温 度 + 77.562 ;     平 均 气 温 用电量=86.536*平均温度+77.562;\:\:\:平均气温 =86.536+77.562;
在这里插入图片描述
 为了验证根据前面我们根据散点图选定的24摄氏度趋势分界点是否为数据的合理趋势分界点,将24摄氏度代入回归方程2,可算得用电量的估计值为2157. 52,因此以24摄氏度作为分段点是比较合理的。
在这里插入图片描述
 上图是自变量与残差的散点图,可见在24摄氏度前后,残差的分布都是随机的,且前后没有明显变化,离散程度基本相同,因此对数据进行分段回归模型拟合是合理的。
 其中,预测值和残差图,要在构建回归模型页面【保存】-勾选【预测值】、【残差】

参考文章:

[1]百度百科:分段回归
[2]微信公众号生活统计学:SPSS分析技术:分段拟合;电业局如何通过简单的回归模型来预测居民用电量?

### 如何在 Python 中实现分段回归模型 为了实现在 Python 中构建分段回归模型,可以采用 `numpy` 和 `scipy` 这样的科学计算库来处理数据并执行统计分析。对于可视化部分,则可借助于 `matplotlib` 或者更高级别的绘图工具如 `seaborn` 来完成。 下面是一个简单的例子,展示了如何创建一个具有两个断点的一维分段线性回归模型: ```python import numpy as np from scipy import optimize import matplotlib.pyplot as plt def piecewise_linear(x, x0, y0, k1, k2): """定义分段函数""" return np.piecewise( x, [x < x0], [ lambda x: k1 * x + y0 - k1 * x0, lambda x: k2 * x + y0 - k2 * x0, ], ) # 创建一些模拟的数据集 np.random.seed(42) n_points = 15 x_data = np.linspace(-2, 12, n_points) y_true = piecewise_linear(x=x_data, x0=5, y0=7, k1=-1, k2=1.5) # 添加噪声 noise_level = 0.5 y_noisy = y_true + noise_level * np.random.randn(len(y_true)) # 使用最小二乘法拟合参数 params, params_covariance = optimize.curve_fit(f=piecewise_linear, xdata=x_data, ydata=y_noisy) print("Estimated parameters:", params) plt.figure(figsize=(8, 6)) plt.scatter(x_data, y_noisy, label="Data", color='gray') xfit = np.linspace(min(x_data), max(x_data), num=100) plt.plot(xfit, piecewise_linear(xfit, *params), 'b-', lw=2, label="Fitted line") plt.fill_between( xfit, piecewise_linear(xfit, *(params - 1.96 * np.sqrt(np.diag(params_covariance)))), piecewise_linear(xfit, *(params + 1.96 * np.sqrt(np.diag(params_covariance)))), alpha=.3, color='blue', label="Confidence interval" ) plt.legend() plt.show() ``` 上述代码片段首先定义了一个名为 `piecewise_linear()` 的辅助函数用来表示两段斜率不同的直线连接而成的曲线;接着生成了一些带有随机扰动的真实观测值作为输入样本;最后利用 SciPy 提供的优化模块中的 `curve_fit()` 函数来进行非线性的参数估计,并绘制出最终的结果图表[^1]。 #### 关键要点说明 - **分段函数设计**:通过自定义的 `piecewise_linear()` 函数实现了特定形式的分段关系。 - **数据生成与噪音引入**:构造了一组理想情况下的理论输出以及加入了高斯白噪后的实际测量结果。 - **参数求解方法**:采用了基于梯度下降原理的最优化技术寻找最佳匹配系数向量。 - **不确定性量化**:给出了由 Bootstrap 技术导出的经验分布所对应的近似置信带[^3]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值