主要内容

非线性回归

参数非线性回归模型是什么?

参数非线性模型表示一个连续响应变量和一个或多个连续预测变量之间的关系

Y=F(X,β) +ε.,

在哪里

  • Y是一个N-乘1向量的观察响应变量。

  • F是任意函数Xβ这会评估每行X和向量一起β计算相应行的预测Y

  • X是一个N-经过-P预测值矩阵,每个观察值一行,每个预测值一列。

  • β是A.P-乘1向量的未知参数被估计。

  • ε.是一个N-独立同分布随机干扰的by-1矢量。

相比之下,非参数模型并不试图用模型参数来描述预测值和响应之间的关系。描述通常是图形化的,例如决策树

菲特尔姆尝试找到参数的值β使观察到的响应之间的均方差最小化Y以及模型的预测F(X,β).为此,它需要一个初始值beta0在迭代修改向量之前β到一个具有最小均方误差的向量。

准备数据

要开始拟合回归,请将数据放入拟合函数期望的形式。所有回归技术都从数组中的输入数据开始X响应数据在一个单独的向量中Y或表或数据集数组中的输入数据TBL.和响应数据作为列TBL..输入数据的每一行代表一个观察。每一列代表一个预测器(变量)。

对于表或数据集数组TBL.,表示响应变量“ResponseVar”名称值对:

mdl = fitlm(资源描述,“ResponseVar”,“血压”);

默认情况下,响应变量是最后一列。

你不能使用分类非线性回归的预测器。绝对预测器是从一组固定的可能性中取值。

表示缺失数据为用于输入数据和响应数据。

输入和响应数据的数据集数组

例如,从Excel创建数据集数组®电子表格:

ds =数据集('xlsfile',“hospital.xls”,...'readobsnames',真正的);

从工作区变量创建数据集数组:

负载carsmallDS = DataSet(重量,Model_year,MPG);

输入和响应数据表

要从Excel电子表格创建表格,请执行以下操作:

台= readtable (“hospital.xls”,...'readrownames',真正的);

要从工作区变量创建表,请执行以下操作:

负载carsmalltbl =表(重量,model_year,mpg);

输入数据的数字矩阵和响应的数字向量

例如,要从工作区变量创建数字数组:

负载carsmallX =[重量马力汽缸Model_Year];y = MPG;

要从Excel电子表格创建数字数组,请执行以下操作:

[x,xnames] = xlsread(“hospital.xls”);y = X (:, 4);反应y为收缩压X(:,4)=[];%从x矩阵中删除y

请注意,非数字条目,如性别,不出现在X

表示非线性模型

有几种表示非线性模型的方法。用最方便的方式。

非线性模型是必需的输入菲特尔姆,在Modelfun.输入

菲特尔姆假设响应函数F(X,β)的参数是平滑的β.如果您的功能不顺畅,菲特尔姆无法提供最优参数估计。

匿名函数或函数文件的函数句柄

函数句柄@Modelfun.b (x)接受向量B和矩阵,表格或数据集数组x.函数句柄应该返回一个向量F行数和x. 例如,函数文件豪根计算

侯根 ( B , x ) = B ( 1. ) x ( 2. ) x ( 3. ) / B ( 5. ) 1. + B ( 2. ) x ( 1. ) + B ( 3. ) x ( 2. ) + B ( 4. ) x ( 3. )

通过输入来检查函数h在MATLAB®命令行。

函数yhat=hougen(β,x)%hougen-hougen-Watson反应动力学模型。%yhat=hougen(β,x)给出了%反应速率yhat的预测值,作为%参数β向量和数据矩阵的函数,x.%beta必须有5个元素,x必须有3个%列。%%模型形式为:%y=(b1*x2-x3/b5)/(1+b2*x1+b3*x2+b4*x3)%%参考文献:%[1]贝茨、道格拉斯和瓦茨、唐纳德,“非线性%回归分析及其应用”,威利%1988年第271-272页。.%版权所有1993-2004 MathWorks,Inc.%B.A.琼斯1-06-95.b1=beta(1);b2=beta(2);b3=beta(3);b4=beta(4);b5;x1=x(:,1);x2=x(:,2);x3=x(:,3);yhat=(b1*x2-x3/b5)。/(1+b2*x1+b3*x2+b4*x3);

您可以编写一个匿名函数,执行相同的计算豪根

modelfun = @ (b, x) (b) (1) * (:, 2) - x (:, 3) / b(5)) /…(1 + b *x(:,1) + b(3)*x(:,2) + b(4)*x(:,3))

公式的文本表示

用于矩阵中的数据X向量中的响应Y:

  • 用下列公式表示'x1'作为第一个预测器(列)X,'x2'作为第二预测因子,等等。

  • 表示需优化的参数向量为“b1”,“b2”等。

  • 写下公式‘y~(数学表达式)’

例如,表示对反应数据的响应:

modelfun ='y〜(b1 * x2  -  x3 / b5)/(1 + b2 * x1 + b3 * x2 + b4 * x3)';

对于表或数据集数组中的数据,您可以使用表示为表或数据集数组中的变量名称的公式。将响应变量名放在公式左侧,然后放置一个~,后面是表示响应公式的字符向量。

这个例子展示了如何创建一个字符向量来表示对反应数据集数组中的数据。

  1. 加载反应数据

    负载反应
  2. 将数据放入DataSet数组中,其中每个变量具有给出的名称XN.yn.

    ds=数据集({反应物,xn(1,:),xn(2,:),xn(3,:)},{速率,yn});
  3. 检查数据集数组的第一行。

    DS(1,:) ans =氢N_Pentane等戊烷反式470 300 10 8.55
  4. 写道侯根使用数据集数组中的名称的公式。

    modelfun =['反应速率~ (b1*n_Pentane - Isopentane/b5) /'…' (1 + h2 *b2 + n_戊烷*b3 +异戊烷*b4)'] modelfun = ReactionRate ~ (b1* n_戊烷-异戊烷/b5) /…(1 +氢*b2 + n_戊烷*b3 +异戊烷*b4)

选择初始向量beta0

拟合迭代的初始向量,beta0,可以极大地影响得到的拟合模型的质量。beta0给出了问题的维度,这意味着它需要正确的长度beta0导致快速,可靠的型号,而选择差的选择可能导致较长的计算,或模型不足。

选择商品是很难给出建议的beta0.如果您认为,载体的某些组成部分应该是积极的或负面的,请设置您的beta0有这些特征。如果您知道其他组件的近似值,请包括它们beta0.但是,如果您不知道合适的值,可以尝试使用随机向量,例如

beta0 = randn(nvars,1);%或beta0 = 10 * rand(nvars,1);

将非线性模型与数据拟合

使用表或数据集数组拟合非线性回归模型的语法TBL.

mdl=fitnlm(tbl、modelfun、beta0)

使用数字数组拟合非线性回归模型的语法X和数字响应矢量Y

mdl = fitnlm(x,y,modelfun,beta0)

有关表示输入参数的信息,请参见准备数据,表示非线性模型,选择初始向量beta0

菲特尔姆假设响应变量在表或数据集数组中TBL.是最后一列。若要更改此值,请使用响应遗传名称值对以命名响应列。

检查质量并调整拟合的非线性模型

有诊断图可以帮助您检查模型的质量。PlotDiagnostics(MDL)给出各种情节,包括杠杆和厨师的距离图。plotResiduals (mdl)提供拟合模型和数据之间的差异。

也有属性mdl这与模型质量有关。mdl。RMSE给出了数据与拟合模型之间的均方根误差。mdl.Residuals.Raw给出了原始残留物。mdl.diagnostics.包含几个字段,例如利用库克距离,它可以帮助你识别特别有趣的观察结果。

这个例子展示了如何使用诊断、残差和切片图来检验一个拟合的非线性模型。

加载示例数据。

负载反应

建立一个非线性模型的速率作为函数反应物使用豪根作用

beta0 =α(5,1);mdl = fitnlm(反应物,...速率,@hougen,beta0);

绘制数据和模型的杠杆图。

PlotDiagnostics(MDL)

图中包含一个轴对象。标题为leverage的Axis对象的大小写顺序图包含两个line类型的对象。这些对象表示杠杆、参考线。

有一点杠杆率。找到点。

[~,maxl]=max(mdl.Diagnostics.Leverage)
最大值=6

检查残差图。

plotResiduals (mdl'适合')

图中包含一个轴对象。标题为残差与拟合值的Plot的轴对象包含两个类型为line的对象。

没有什么能脱颖而出。

使用切片绘图显示每个预测器对模型的影响。

plotslice(mdl)

图预测切片图包含3轴对象和uimenu、uicontrol类型的其他对象。轴对象1包含5个line类型的对象。轴对象2包含5个line类型的对象。轴对象3包含5个line类型的对象。

您可以拖动垂直虚线的蓝线,以便在响应上查看一个预测器中的更改的效果。例如,将X2行拖到右侧,并注意X3线的斜率更改。

使用非线性模型预测或模拟响应

这个例子展示了如何使用这些方法预测,Feval.,随机的预测和模拟对新数据的响应。

从柯西分布随机生成一个样本。

RNG('默认') X = rand(100,1);X = tan(X - /2);

根据模型生成响应Y = b1*(/2 + atan(x - b2) / b3)并为响应添加噪音。

Modelfun = @(b,x) b(1) *...(pi/2+atan((x-b(2))/b(3));y=modelfun([125 10],x)+randn(100,1);

从任意参数开始拟合模型B= [1,1,1].

β = [1 1 1];%武断的猜测mdl = fitnlm(x,y,modelfun,beta0)
mdl=非线性回归模型:y~b1*(pi/2+atan((x-b2)/b3))估计系数:估计值为pValueUuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuub112.082 0.8002815.097 3.3151e-27 b25.0603 1.0825 4.6747 9.5063e-06 b3 9.64 0.64 0.464920.732.732.0382e.03e-37观测次数:100,误差平方根,均方模型:.45e+03,p值=1.72e-111

拟合值在参数的几个百分比内[12,5,10]。

检查是否合适。

plotslice(mdl)

图预测切片图包含轴对象和UIMEnu,UIControl类型的其他对象。轴对象包含6个类型线的对象。

预测

这个预测方法预测平均响应,如果需要,给出置信范围。找到关于点的预测响应值和预测响应置信区间X值[-15;5;12]。

Xnew =(-15; 5。12);[ynew, ynewci] =预测(mdl Xnew)
ynew=3×15.4122 18.9022 26.5161
ynewci =3×24.8233 6.0010 18.4555 19.3490 25.0170 28.0151

置信区间反映在切片图中。

Feval.

这个Feval.方法预测平均响应。Feval.在从数据集数组构造模型时,使用通常比预测更方便。

从数据集数组创建非线性模型。

ds = dataset({x,“X”},{y,“y”});mdl2 = fitnlm(ds,modelfun,beta0);

找到预测的模型响应(CDF)在X值[-15;5;12]。

Xnew =(-15; 5。12);ynew =函数宏指令(mdl2 Xnew)
ynew=3×15.4122 18.9022 26.5161

随机的

这个随机的方法模拟新的随机响应值,等于平均预测加上一个与训练数据具有相同方差的随机扰动。

Xnew=[-15;5;12];ysim=random(mdl,Xnew)
ysim =3×16.0505 19.0893 25.4647

重新运行随机方法。结果发生了变化。

Xnew ysim =随机(mdl)
ysim =3×16.3813 19.2157 26.6541