逐步回归
关于变量选择
在有多个自变量的情况下,基于自变量的不同组合可以得到许多回归方程,这些回归方程的效果有好有坏
要得到最优的回归方程
- 回归效果最佳
- 自变量个数尽量少
变量选择常用方法 - 所有子集回归
- 逐步引入
- 逐步剔除
- 逐步回归
逐步回归的基本思想
基本原则
- 按照自变量对因变量影响的显著程度,从大到小逐个引入回归方程
- 每一个变量引入以后,判断先前引入的变量是否由于新变量的引入而变得不显著,若是,则将其剔除
- 引入一个自变量或剔除一个自变量,为逐步回归的一步
- 每一步都要进行检验,即,要进行引入变量是否显著以及剔除变量是否不显著的检验分析,一般地:显著性水平α进=0.05,α出=0.1显著性水平\alpha_{进}=0.05,\alpha_{出}=0.1显著性水平α进=0.05,α出=0.1
- 这个过程反复进行,直至既无变量需要引入,也无变量需要剔除,得到一个最佳的变量组合为止
逐步回归的MATLAB实现
stepwise(x, y, inmodel, alpha)
x,自变量数据,nxm阶矩阵
y,因变量数据,nx1阶矩阵
inmodel,初始模型中包含的自变量子集(缺省时默认为空集)
alpha(缺省时默认为0.05)
逐步回归实例
![![[Pasted image 20240815060454.png]]](https://i-blog.csdnimg.cn/direct/0a13e9b497714e8ebaeb5ab24123be02.png)
Matlab程序实现
- 数据输入
x1=[7 1 11 11 7 11 3 1 2 21 1 11 10]';
x2=[26 29 56 31 52 55 71 31 54 47 40 66 68]';
x3=[6 15 8 8 6 9 17 22 18 4 23 9 8]';
x4=[60 52 20 47 33 22 6 44 22 26 34 12 12]';
y=[78.5 74.3 104.3 87.6 95.9 109.2 102.7 72.5 93.1 115.9 83.8 113.3 109.4]';
x=[x1 x2 x3 x4];
- 逐步回归
stepwise(x, y)
![![[Pasted image 20240815061418.png]]](https://i-blog.csdnimg.cn/direct/f3d47e35a49842afb750ca981c7f919a.png)
第一个窗口,表示自变量x1,x2,x3,x4x_{1},x_{2},x_{3},x_{4}x1,x2,x3,x4的显著性程度的窗口
-
置信线都是红色的,表示这个变量当前不在模型里面,否则是蓝色,说明当前的模型中没有任何一个自变量,都是常数项
-
p-val表示自变量的显著性,p值越小越显著,即x4x_{4}x4对因变量的影响最显著
-
看p值是不是小于α进=0.05\alpha_{进}=0.05α进=0.05,小于可以引入
中间的窗口,表示一些模型的参数和统计量的取值 -
截距,表示常数项
最后一个窗口,表示逐步回归模型,在历次调试中的RMSE的值,即均方根误差 -
可以直接点击置信线引入
-
或者点击下一步引入
![![[Pasted image 20240815062215.png]]](https://i-blog.csdnimg.cn/direct/f2c170a8f4b24a6ebca44a728e6e78b1.png)
再次根据p值判断,引入x1x_{1}x1
![![[Pasted image 20240815062504.png]]](https://i-blog.csdnimg.cn/direct/3333f3e96c8a4b70a9ac2d149852249d.png)
没有需要剔除的变量
没有需要引入的变量
3. 对变量y与x1,x4x_{1},x_{4}x1,x4作线性回归
X=[ones(13,1) x1 x4];
[b, bint, r, rint, stats]=regress(y, X)
得
b = 103.0974
1.4400
-0.6140
最终模型为
y=103.0974+1.4400x1−0.614x4
y=103.0974+1.4400x_{1}-0.614x_{4}
y=103.0974+1.4400x1−0.614x4
可线性化的非线性回归
示例
1.
y=β0+β1ebz+ε
y=\beta_{0}+\beta_{1}e^{bz}+\varepsilon
y=β0+β1ebz+ε
令x′=ebxx'=e^{bx}x′=ebx
y=β0+β1x′+ε
y=\beta_{0}+\beta_{1}x'+\varepsilon
y=β0+β1x′+ε
2.
y=β0+β1x+β2x2+⋯+βmxm+ε
y=\beta_{0}+\beta_{1}x+\beta_{2}x^{2}+\dots+\beta_{m}x^{m}+\varepsilon
y=β0+β1x+β2x2+⋯+βmxm+ε
令x1=x,x2=x2,…,xm=xmx_{1}=x,x_{2}=x^{2},\dots,x_{m}=x^{m}x1=x,x2=x2,…,xm=xm
y=β0+β1x1+β2x2+⋯+βmxm+ε
y=\beta_{0}+\beta_{1}x_{1}+\beta_{2}x_{2}+\dots+\beta_{m}x^{m}+\varepsilon
y=β0+β1x1+β2x2+⋯+βmxm+ε
3.
y=aebxeε
y=ae^{bx}e^{\varepsilon}
y=aebxeε
等式两边取对数
lny=lna+bx+ε
\ln y=\ln a+bx+\varepsilon
lny=lna+bx+ε
能够线性化的非线性回归模型,称为本质线性回归模型
可线性化的非线性回归模型
![![[Pasted image 20240815064505.png]]](https://i-blog.csdnimg.cn/direct/06e5a7f1a8604cc7b2c05a2f8162205c.png)
钢包问题
![![[Pasted image 20240815064643.png]]](https://i-blog.csdnimg.cn/direct/0e5fcccf82894825af88ab1d7a6be0c2.png)
![![[Pasted image 20240815064657.png]]](https://i-blog.csdnimg.cn/direct/7ce2a2cbac9a4b9f8271a2766ad5e63c.png)
制作散点图
![![[Pasted image 20240815065047.png]]](https://i-blog.csdnimg.cn/direct/0d9ad142d0b04799878d8def70c59a6e.png)
可以看出是非线性回归或曲线回归问题
可以基于配曲线的思想进行求解
- 根据散点图确定须配曲线的类型
- 估计其中的未知参数
常用备选曲线
-
双曲线1y=a+bx\frac{1}{y}=a+ \frac{b}{x}y1=a+xb
![![[Pasted image 20240815065300.png]]](https://i-blog.csdnimg.cn/direct/f5a82723234546a08ab80b435868ecac.png)
-
幂函数曲线y=axby=ax^{b}y=axb其中x>0,a>0x>0,a>0x>0,a>0
![![[Pasted image 20240815065446.png]]](https://i-blog.csdnimg.cn/direct/a3c2fdf0dce842d692a1a7651516d934.png)
-
指数曲线y=aebxy=ae^{bx}y=aebx,其中a>0a>0a>0
![![[Pasted image 20240815065500.png]]](https://i-blog.csdnimg.cn/direct/a7600a869578446fada10a549b9922c1.png)
-
倒指数曲线y=aeb/xy=ae^{b/x}y=aeb/x其中a>0a>0a>0
![![[Pasted image 20240815065542.png]]](https://i-blog.csdnimg.cn/direct/fa17e8b124f946b0a5582dccb1d0bb23.png)
-
对数曲线y=a+blnx,x>0y=a+b\ln x,x>0y=a+blnx,x>0
![![[Pasted image 20240815065633.png]]](https://i-blog.csdnimg.cn/direct/487356a006894cdf8a5fa3b5ed60a3c0.png)
-
S型曲线y=1a+be−xy=\frac{1}{a+be^{-x}}y=a+be−x1
![![[Pasted image 20240815065649.png]]](https://i-blog.csdnimg.cn/direct/2388b1b461be41ada2c93352a54d8c3b.png)
求解
结合散点图变化趋势,选配倒指数曲线
y=aeb/x
y=ae^{b/x}
y=aeb/x
![![[Pasted image 20240815065816.png]]](https://i-blog.csdnimg.cn/direct/b1a42fcf3bb1476983944ebecbd03a7c.png)
同时取对数,线性化
lny=lna+b1x
\ln y=\ln a+b \frac{1}{x}
lny=lna+bx1
y′=A+bx′
y'=A+bx'
y′=A+bx′
用线性回归方法求解
得
A^=2.4587,b^=−1.1107
\hat{A}=2.4587,\quad \hat{b}=-1.1107
A^=2.4587,b^=−1.1107
由此
a^=eA^=11.6789
\hat{a}=e^{\hat{A}}=11.6789
a^=eA^=11.6789
最终非线性回归结果为
y=11.6789e−1.1107/x
y=11.6789e^{-1.1107/x}
y=11.6789e−1.1107/x
当常用的备选曲线都配不上对,如何解决
- 多项式回归
- 神经网络
- 支持向量机
多项式回归
一元多项式回归
基本概念
变量y关于x的m阶多项式回归模型为
y=a1xm+a2xm−1+⋯+amx1+am+1+ε
y=a_{1}x^{m}+a_{2}x^{m-1}+\dots+a_{m}x^{1}+a_{m+1}+\varepsilon
y=a1xm+a2xm−1+⋯+amx1+am+1+ε
其中,m是已知的阶数,ai(i=1,2,…,m)a_{i}(i=1,2,\dots,m)ai(i=1,2,…,m)是回归参数,ε∼N(0,σ2)\varepsilon \sim N(0,\sigma^{2})ε∼N(0,σ2)称为随机误差
一元多项式回归的Matlab实现
- 参数估计
[p, S]=polyfit(x, y, m)
x=(x1,x2,…,xn)x=(x_{1},x_{2},\dots,x_{n})x=(x1,x2,…,xn)为自变量取值向量
y=(y1,y2,…,yn)y=(y_{1},y_{2},\dots,y_{n})y=(y1,y2,…,yn)为因变量取值向量
mmm表示多项式回归模型的阶数
p=(a1,a2,…,am+1)p=(a_{1},a_{2},\dots,a_{m+1})p=(a1,a2,…,am+1)为多项式系数向量
SSS为一个结构数据,用来估计预测误差
2. 点预测和区间预测
y = polyval (p, x)
求回归多项式在x处的预测值y
[y, delta] = polyconf(p, x, S, alpha)
求回归多项式在x处的预测值y及预测值的显著性为1−alpha1-alpha1−alpha的置信区间:y±deltay \pm deltay±delta,alpha缺省时为0.05
示例
![![[Pasted image 20240815090641.png]]](https://i-blog.csdnimg.cn/direct/5fac451d09aa468d89a54250ea24bf2b.png)
求解
t = 1/30:1/30:14/30;
s=[11.86 15.67 20.60 26.69 33.71 41.93 51.13 61.49 72.90 85.44 99.08 ... 113.77 129.54 146.48];
[p, S] = polyfit(t, s, 2)
结果
p = 489.2946 65.8896 9.1329
S = struct:
R:[3 x 3 double]
df:11
normr:0.1157
得回归模型
s^=489.2946t2+64.8896t+9.1329
\hat{s}=489.2946t^{2}+64.8896t+9.1329
s^=489.2946t2+64.8896t+9.1329
预测及作图
[y_hat, delta] = polyconf(p, t, S)
plot(t, s, 'k+', t, y_hat, 'r')
hold on
plot(t, y_hat-delta, ':b', t, y_hat+delta, ':b')
legend('观测值','预测值','95%置信区间范围')
![![[Pasted image 20240815094438.png]]](https://i-blog.csdnimg.cn/direct/1bc623c7448c41cf8a70e2a1e92eae8f.png)
另解
化为线性回归模型
t = 1/30:1/30:14/30;
s=[11.86 15.67 20.60 26.69 33.71 41.93 51.13 61.49 72.90 85.44 99.08 ... 113.77 129.54 146.48];
T=[ones(14,1) t'(t.^2)'];
[b, bint, r, rint, stats] = regress(s', T);
多元二项式回归
rstool (x, y, 'model', alpha)
x,nxm矩阵
y,n维列向量
alpha显著性水平(缺省时默认为0.05)
model
![![[Pasted image 20240815094919.png]]](https://i-blog.csdnimg.cn/direct/2c8be159fe3144d390925f586e6c406f.png)
示例
![![[Pasted image 20240815095034.png]]](https://i-blog.csdnimg.cn/direct/a63c5c332c7f4fe1a2c319af14e1bff6.png)
x1=[1000 600 1200 500 300 400 1300 1100 1300 300];
x2=[5 7 6 6 8 7 5 4 3 9];
y=[100 75 80 70 50 65 90 100 110 60]';
x=[x1' x2'];
rstool(x, y, 'purequadratic');
![![[Pasted image 20240815102455.png]]](https://i-blog.csdnimg.cn/direct/e7afbece42744218b7a4e31d6bbe09eb.png)
输入1000和6
![![[Pasted image 20240815102532.png]]](https://i-blog.csdnimg.cn/direct/5e3bce2542aa402a9372988ba4ba0e31.png)
点导出可以得到细节
或输入
beta, rmse
结果
beta = 110.5313
0.1464
-26.5709
-0.0001
1.8475
rmse =
4.5362
故,纯二次多项式回归模型为
y=110.5313+0.1464x1−26.5709x2−0.0001x12+1.8495x22
y=110.5313+0.1464x_{1}-26.5709x_{2}-0.0001x_{1}^{2}+1.8495x_{2}^{2}
y=110.5313+0.1464x1−26.5709x2−0.0001x12+1.8495x22
一般非线性回归
基本概念
非线性回归模型的一般形式
y=f(x;θ)+ε
y=f(x;\theta)+\varepsilon
y=f(x;θ)+ε
y是因变量
x=(x1,x2,…,xm)x=(x_{1},x_{2},\dots,x_{m})x=(x1,x2,…,xm)是自变量向量
θ=(θ1,θ2,…,θp\theta=(\theta_{1},\theta_{2},\dots,\theta_{p}θ=(θ1,θ2,…,θp是未知参数向量
ε\varepsilonε是随机误差项
非线性回归的参数估计
使得残差平方和
Q(θ)=∑i=1n(yi−f(xi,θ))2
Q(\theta)=\sum_{i=1}^{n}(y_{i}-f(x_{i},\theta))^{2}
Q(θ)=i=1∑n(yi−f(xi,θ))2
达到最小参数θ\thetaθ,称为θ\thetaθ的非线性最小二乘估计
非线性回归的MATLAB实现
- 回归命令
[beta, r, J]=nlinfit(x, y, 'model', beta0)
x为nxm矩阵
y为n维列向量
model表示用m文件定义的非线性函数
beta0表示回归系数初值
beta表示回归系数的估计值
r表示残差
J表示Jacobian矩阵
2. 点预测和置信区间预测
[Y, DELTA] = nlpredci('model', x, beta, r, J)
- 点预测,nlinfit所得的回归函数在x处的预测值Y
- 区间预测,95%置信水平下的置信区间估计:Y±DELTAY \pm DELTAY±DELTA
示例
![![[Pasted image 20240815064643.png]]](https://i-blog.csdnimg.cn/direct/6859147c3f984699a494d7c49688bbf4.png)
![![[Pasted image 20240815064657.png]]](https://i-blog.csdnimg.cn/direct/ff67596e63164e4ea87414cb0e0d9c89.png)
选配倒指数模型
y=aeb/x
y = ae^{b/x}
y=aeb/x
求解
- 编写m文件,实现非线性回归函数y=aeb/xy = ae^{b/x}y=aeb/x
function yhat = volum(beta, x)
yhat = beta(1) * exp(beta(2) ./ x);
- 输入数据
x = 2:16;
y = [6.42 8.20 9.58 9.5 9.7 10 9.93 9.99 10.49 10.59 10.60 10.80 10.60 10.90 10.76];
beta0 = [8 2]';
- 求回归系数
[beta, r, J] = nlinfit(x', y', 'volum', beta0)
beta
得
beta =
11.6036
-1.0641
- 预测及作图
[yhat, delta] = nlpredci('volum', x', beta, r, J);
plot(x, y, 'k+', x, yhat, 'r')
hold on
plot(x', yhat-delta, ':b', x', yhat+delta, ':b')
![![[Pasted image 20240815114448.png]]](https://i-blog.csdnimg.cn/direct/0aedd30acfeb436abfc33e6fd1434b45.png)
1005



被折叠的 条评论
为什么被折叠?



