统计回归与Matlab软件实现下(非线性回归,多项式回归)

逐步回归

关于变量选择

在有多个自变量的情况下,基于自变量的不同组合可以得到许多回归方程,这些回归方程的效果有好有坏
要得到最优的回归方程

  • 回归效果最佳
  • 自变量个数尽量少
    变量选择常用方法
  • 所有子集回归
  • 逐步引入
  • 逐步剔除
  • 逐步回归
逐步回归的基本思想

基本原则

  1. 按照自变量对因变量影响的显著程度,从大到小逐个引入回归方程
  2. 每一个变量引入以后,判断先前引入的变量是否由于新变量的引入而变得不显著,若是,则将其剔除
  3. 引入一个自变量或剔除一个自变量,为逐步回归的一步
  4. 每一步都要进行检验,即,要进行引入变量是否显著以及剔除变量是否不显著的检验分析,一般地: 显著性水平 α 进 = 0.05 , α 出 = 0.1 显著性水平\alpha_{进}=0.05,\alpha_{出}=0.1 显著性水平α=0.05α=0.1
  5. 这个过程反复进行,直至既无变量需要引入,也无变量需要剔除,得到一个最佳的变量组合为止
逐步回归的MATLAB实现
stepwise(x, y, inmodel, alpha)

x,自变量数据,nxm阶矩阵
y,因变量数据,nx1阶矩阵
inmodel,初始模型中包含的自变量子集(缺省时默认为空集)
alpha(缺省时默认为0.05)

逐步回归实例

![[Pasted image 20240815060454.png]]

Matlab程序实现
  1. 数据输入
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];
  1. 逐步回归
stepwise(x, y)

![[Pasted image 20240815061418.png]]

第一个窗口,表示自变量 x 1 , x 2 , x 3 , x 4 x_{1},x_{2},x_{3},x_{4} x1,x2,x3,x4的显著性程度的窗口

  • 置信线都是红色的,表示这个变量当前不在模型里面,否则是蓝色,说明当前的模型中没有任何一个自变量,都是常数项

  • p-val表示自变量的显著性,p值越小越显著,即 x 4 x_{4} x4对因变量的影响最显著

  • 看p值是不是小于 α 进 = 0.05 \alpha_{进}=0.05 α=0.05,小于可以引入
    中间的窗口,表示一些模型的参数和统计量的取值

  • 截距,表示常数项
    最后一个窗口,表示逐步回归模型,在历次调试中的RMSE的值,即均方根误差

  • 可以直接点击置信线引入

  • 或者点击下一步引入
    ![[Pasted image 20240815062215.png]]

再次根据p值判断,引入 x 1 x_{1} x1
![[Pasted image 20240815062504.png]]

没有需要剔除的变量
没有需要引入的变量
3. 对变量y与 x 1 , x 4 x_{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.4400 x 1 − 0.614 x 4 y=103.0974+1.4400x_{1}-0.614x_{4} y=103.0974+1.4400x10.614x4

可线性化的非线性回归

示例
1.
y = β 0 + β 1 e b z + ε y=\beta_{0}+\beta_{1}e^{bz}+\varepsilon y=β0+β1ebz+ε
x ′ = e b x x'=e^{bx} x=ebx
y = β 0 + β 1 x ′ + ε y=\beta_{0}+\beta_{1}x'+\varepsilon y=β0+β1x+ε
2.
y = β 0 + β 1 x + β 2 x 2 + ⋯ + β m x m + ε y=\beta_{0}+\beta_{1}x+\beta_{2}x^{2}+\dots+\beta_{m}x^{m}+\varepsilon y=β0+β1x+β2x2++βmxm+ε
x 1 = x , x 2 = x 2 , … , x m = x m x_{1}=x,x_{2}=x^{2},\dots,x_{m}=x^{m} x1=x,x2=x2,,xm=xm
y = β 0 + β 1 x 1 + β 2 x 2 + ⋯ + β m x m + ε y=\beta_{0}+\beta_{1}x_{1}+\beta_{2}x_{2}+\dots+\beta_{m}x^{m}+\varepsilon y=β0+β1x1+β2x2++βmxm+ε
3.
y = a e b x e ε y=ae^{bx}e^{\varepsilon} y=aebxeε
等式两边取对数
ln ⁡ y = ln ⁡ a + b x + ε \ln y=\ln a+bx+\varepsilon lny=lna+bx+ε
能够线性化的非线性回归模型,称为本质线性回归模型

可线性化的非线性回归模型
![[Pasted image 20240815064505.png]]

钢包问题

![[Pasted image 20240815064643.png]]

![[Pasted image 20240815064657.png]]

制作散点图
![[Pasted image 20240815065047.png]]

可以看出是非线性回归或曲线回归问题
可以基于配曲线的思想进行求解

  1. 根据散点图确定须配曲线的类型
  2. 估计其中的未知参数
常用备选曲线
  1. 双曲线 1 y = a + b x \frac{1}{y}=a+ \frac{b}{x} y1=a+xb
    ![[Pasted image 20240815065300.png]]

  2. 幂函数曲线 y = a x b y=ax^{b} y=axb其中 x > 0 , a > 0 x>0,a>0 x>0,a>0
    ![[Pasted image 20240815065446.png]]

  3. 指数曲线 y = a e b x y=ae^{bx} y=aebx,其中 a > 0 a>0 a>0
    ![[Pasted image 20240815065500.png]]

  4. 倒指数曲线 y = a e b / x y=ae^{b/x} y=aeb/x其中 a > 0 a>0 a>0
    ![[Pasted image 20240815065542.png]]

  5. 对数曲线 y = a + b ln ⁡ x , x > 0 y=a+b\ln x,x>0 y=a+blnx,x>0
    ![[Pasted image 20240815065633.png]]

  6. S型曲线 y = 1 a + b e − x y=\frac{1}{a+be^{-x}} y=a+bex1
    ![[Pasted image 20240815065649.png]]

求解

结合散点图变化趋势,选配倒指数曲线
y = a e b / x y=ae^{b/x} y=aeb/x
![[Pasted image 20240815065816.png]]

同时取对数,线性化
ln ⁡ y = ln ⁡ a + b 1 x \ln y=\ln a+b \frac{1}{x} lny=lna+bx1
y ′ = A + b x ′ 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 ^ = e A ^ = 11.6789 \hat{a}=e^{\hat{A}}=11.6789 a^=eA^=11.6789
最终非线性回归结果为
y = 11.6789 e − 1.1107 / x y=11.6789e^{-1.1107/x} y=11.6789e1.1107/x

当常用的备选曲线都配不上对,如何解决

  • 多项式回归
  • 神经网络
  • 支持向量机

多项式回归

一元多项式回归

基本概念
变量y关于x的m阶多项式回归模型为
y = a 1 x m + a 2 x m − 1 + ⋯ + a m x 1 + a m + 1 + ε y=a_{1}x^{m}+a_{2}x^{m-1}+\dots+a_{m}x^{1}+a_{m+1}+\varepsilon y=a1xm+a2xm1++amx1+am+1+ε
其中,m是已知的阶数, a i ( 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实现
  1. 参数估计
[p, S]=polyfit(x, y, m)

x = ( x 1 , x 2 , … , x n ) x=(x_{1},x_{2},\dots,x_{n}) x=(x1,x2,,xn)为自变量取值向量
y = ( y 1 , y 2 , … , y n ) y=(y_{1},y_{2},\dots,y_{n}) y=(y1,y2,,yn)为因变量取值向量
m m m表示多项式回归模型的阶数
p = ( a 1 , a 2 , … , a m + 1 ) p=(a_{1},a_{2},\dots,a_{m+1}) p=(a1,a2,,am+1)为多项式系数向量
S S S为一个结构数据,用来估计预测误差
2. 点预测和区间预测

y = polyval (p, x)

求回归多项式在x处的预测值y

[y, delta] = polyconf(p, x, S, alpha)

求回归多项式在x处的预测值y及预测值的显著性为 1 − a l p h a 1-alpha 1alpha的置信区间: y ± d e l t a y \pm delta y±delta,alpha缺省时为0.05

示例

![[Pasted image 20240815090641.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.2946 t 2 + 64.8896 t + 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]]

另解

化为线性回归模型

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]]

示例

![[Pasted image 20240815095034.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]]

输入1000和6
![[Pasted image 20240815102532.png]]

点导出可以得到细节
或输入

beta, rmse

结果

beta = 110.5313
		0.1464
		-26.5709
		-0.0001
		1.8475
rmse = 
		4.5362

故,纯二次多项式回归模型为
y = 110.5313 + 0.1464 x 1 − 26.5709 x 2 − 0.0001 x 1 2 + 1.8495 x 2 2 y=110.5313+0.1464x_{1}-26.5709x_{2}-0.0001x_{1}^{2}+1.8495x_{2}^{2} y=110.5313+0.1464x126.5709x20.0001x12+1.8495x22

一般非线性回归

基本概念

非线性回归模型的一般形式
y = f ( x ; θ ) + ε y=f(x;\theta)+\varepsilon y=f(x;θ)+ε
y是因变量
x = ( x 1 , x 2 , … , x m ) 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 = 1 n ( y i − f ( x i , θ ) ) 2 Q(\theta)=\sum_{i=1}^{n}(y_{i}-f(x_{i},\theta))^{2} Q(θ)=i=1n(yif(xi,θ))2
达到最小参数 θ \theta θ,称为 θ \theta θ的非线性最小二乘估计

非线性回归的MATLAB实现
  1. 回归命令
[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 ± D E L T A Y \pm DELTA Y±DELTA
示例

![[Pasted image 20240815064643.png]]

![[Pasted image 20240815064657.png]]

选配倒指数模型
y = a e b / x y = ae^{b/x} y=aeb/x
求解

  1. 编写m文件,实现非线性回归函数 y = a e b / x y = ae^{b/x} y=aeb/x
function yhat = volum(beta, x)
yhat = beta(1) * exp(beta(2) ./ x);
  1. 输入数据
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]';
  1. 求回归系数
[beta, r, J] = nlinfit(x', y', 'volum', beta0)
beta

beta = 
		11.6036
		-1.0641
  1. 预测及作图
[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]]

  • 16
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值