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

相关推荐
数据猎手小k27 分钟前
AndroidLab:一个系统化的Android代理框架,包含操作环境和可复现的基准测试,支持大型语言模型和多模态模型。
android·人工智能·机器学习·语言模型
你的小101 小时前
JavaWeb项目-----博客系统
android
风和先行2 小时前
adb 命令查看设备存储占用情况
android·adb
AaVictory.2 小时前
Android 开发 Java中 list实现 按照时间格式 yyyy-MM-dd HH:mm 顺序
android·java·list
似霰3 小时前
安卓智能指针sp、wp、RefBase浅析
android·c++·binder
大风起兮云飞扬丶3 小时前
Android——网络请求
android
干一行,爱一行3 小时前
android camera data -> surface 显示
android
断墨先生4 小时前
uniapp—android原生插件开发(3Android真机调试)
android·uni-app
无极程序员5 小时前
PHP常量
android·ide·android studio
几两春秋梦_5 小时前
符号回归概念
人工智能·数据挖掘·回归