统计回归与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)

逐步回归实例
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];

  2. 逐步回归

    stepwise(x, y)

第一个窗口,表示自变量 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的值,即均方根误差

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

  • 或者点击下一步引入

再次根据p值判断,引入 x 1 x_{1} x1

没有需要剔除的变量

没有需要引入的变量

  1. 对变量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.4400x1−0.614x4

可线性化的非线性回归

示例

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′+ε

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+ε

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+ε

能够线性化的非线性回归模型,称为本质线性回归模型

可线性化的非线性回归模型

钢包问题

制作散点图

可以看出是非线性回归或曲线回归问题

可以基于配曲线的思想进行求解

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

  2. 幂函数曲线 y = a x b y=ax^{b} y=axb其中 x > 0 , a > 0 x>0,a>0 x>0,a>0

  3. 指数曲线 y = a e b x y=ae^{bx} y=aebx,其中 a > 0 a>0 a>0

  4. 倒指数曲线 y = a e b / x y=ae^{b/x} y=aeb/x其中 a > 0 a>0 a>0

  5. 对数曲线 y = a + b ln ⁡ x , x > 0 y=a+b\ln x,x>0 y=a+blnx,x>0

  6. S型曲线 y = 1 a + b e − x y=\frac{1}{a+be^{-x}} y=a+be−x1

求解

结合散点图变化趋势,选配倒指数曲线
y = a e b / x y=ae^{b/x} y=aeb/x

同时取对数,线性化
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.6789e−1.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+a2xm−1+⋯+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为一个结构数据,用来估计预测误差

  1. 点预测和区间预测

    y = polyval (p, x)

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

复制代码
[y, delta] = polyconf(p, x, S, alpha)

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

示例
求解
复制代码
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%置信区间范围')
另解

化为线性回归模型

复制代码
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

示例
复制代码
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');

输入1000和6

点导出可以得到细节

或输入

复制代码
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.1464x1−26.5709x2−0.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=1∑n(yi−f(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矩阵

  1. 点预测和置信区间预测

    [Y, DELTA] = nlpredci('model', x, beta, r, J)

  • 点预测,nlinfit所得的回归函数在x处的预测值Y
  • 区间预测,95%置信水平下的置信区间估计: Y ± D E L T A Y \pm DELTA Y±DELTA
示例

选配倒指数模型
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);

  2. 输入数据

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

  3. 求回归系数

    [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')

相关推荐
sweetying1 小时前
30了,人生按部就班
android·程序员
用户2018792831672 小时前
Binder驱动缓冲区的工作机制答疑
android
真夜2 小时前
关于rngh手势与Slider组件手势与事件冲突解决问题记录
android·javascript·app
用户2018792831672 小时前
浅析Binder通信的三种调用方式
android
用户092 小时前
深入了解 Android 16KB内存页面
android·kotlin
火车叼位3 小时前
Android Studio与命令行Gradle表现不一致问题分析
android
前行的小黑炭5 小时前
【Android】 Context使用不当,存在内存泄漏,语言不生效等等
android·kotlin·app
前行的小黑炭6 小时前
【Android】CoordinatorLayout详解;实现一个交互动画的效果(上滑隐藏,下滑出现);附例子
android·kotlin·app
用户20187928316718 小时前
Android黑夜白天模式切换原理分析
android
芦半山18 小时前
「幽灵调用」背后的真相:一个隐藏多年的Android原生Bug
android