主要内容

非线性回归

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

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

y=f(X,β)+ε,

在哪里

  • y是一个n1的观测向量响应变量。

  • f是任何函数Xβ评估每一行X随着向量β计算预测相应的行y

  • X是一个n——- - - - - -p矩阵的预测,为每一个观察,一行和一列每个预测。

  • β是一个p1矢量未知参数的估计。

  • ε是一个n1向量独立同分布随机扰动。

相比之下,非参数模型不要试图描述与模型参数预测和响应之间的关系。通常是图形化描述,的情况决策树

fitnlm试图找到值的参数β最小化均方差异观察到反应y和的预测模型f(X,β)。要做到这一点,它需要一个初始值beta0在迭代修改向量β与最小均方误差向量。

准备数据

开始拟合回归,把你的数据成一种拟合函数。数组中所有回归技术开始输入数据X在一个单独的向量和响应数据y、表中输入数据或数据集的数组资源描述和响应数据列资源描述。输入数据的每一行代表一个观察。每一列代表一个预测指标(变量)。

对于一个表或数据集的数组资源描述,表明响应变量“ResponseVar”名称-值对:

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

默认的响应变量是最后一列。

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

缺失的数据表示为对输入数据和响应数据。

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

例如,要创建一个Excel数据数组®电子表格:

ds =数据集(“XLSFile”,“hospital.xls”,“ReadObsNames”,真正的);

从工作区中创建一个数据数组变量:

负载carsmallds =数据集(重量、Model_Year MPG);

表的输入和响应数据

从一个Excel电子表格创建一个表:

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

从工作区中创建一个表变量:

负载carsmall台=表(重量、Model_Year MPG);

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

例如,从工作空间变量来创建数值数组:

负载carsmallX =[重量马力圆柱体Model_Year];y = MPG;

从Excel电子表格来创建数值数组:

[X, Xnames] = xlsread (“hospital.xls”);y = X (:, 4);%响应y是收缩压X (:, 4) = [];%去除X y矩阵

注意,非数字条目,如,不要出现X

代表了非线性模型

有几种方法可以表示一个非线性模型。使用哪个是最方便的。

非线性模型是一个必需的输入fitnlm,在modelfun输入。

fitnlm假设响应函数f(X,β)是平滑的参数β。如果你的函数并不顺利,fitnlm能不能提供最优参数估计。

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

函数处理@modelfunb (x)接受一个向量b数组和矩阵、表或数据集x。处理的函数应该返回一个向量f具有相同的行数x。例如,函数文件hougen.m计算

hougen ( b , x ) = b ( 1 ) x ( 2 ) x ( 3 ) / b ( 5 ) 1 + b ( 2 ) x ( 1 ) + b ( 3 ) x ( 2 ) + b ( 4 ) x ( 3 )

检查输入的函数类型hougen在MATLAB®命令行。

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

你可以写一个匿名函数来执行相同的计算hougen.m

modelfun = @ (b, x) (b) (1) * (:, 2) - x (:, 3) / b (5)) /…(1 + b (2) * 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. 把数据转换成一个数据数组,每个变量都有一个名字xnyn

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

    ds (1:) ans =氢n_Pentane异戊烷ReactionRate 10 470 300 8.55
  4. hougen使用数据集的名称数组公式。

    modelfun = [' ReactionRate ~ (b1 * n_Pentane -异戊烷/ b5) / '……”(1 +氢* b2 + n_Pentane * b3 +异戊烷* b4)”] modelfun = ReactionRate ~ (b1 * n_Pentane -异戊烷/ b5) /……(1 +氢* b2 + n_Pentane * b3 +异戊烷* b4)

选择初始矢量beta0

的初始矢量拟合迭代,beta0,可以极大地影响生成的拟合模型的质量。beta0给出了问题的维数,这意味着它需要正确的长度。一个不错的选择的beta0导致一个快速,可靠的模型,而糟糕的选择可能会导致很长的计算,或不适当的模型。

很难给建议选择好beta0。如果你相信向量的某些组件应该是积极的还是消极的,设置beta0这些特征。如果你知道其他组件的近似值,包括他们beta0。然而,如果你不知道良好的价值观,尝试一个随机向量,如

beta0 = randn(据nvar, 1);%或beta0 = 10 *兰德(据nvar, 1);

适合非线性模型数据

拟合非线性回归模型的语法使用一个表或数据集的数组资源描述

mdl = fitnlm(资源描述、modelfun beta0)

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

mdl = fitnlm (X, y, modelfun beta0)

代表输入参数的信息,请参阅准备数据,代表了非线性模型,选择初始矢量beta0

fitnlm假设响应变量在一个表格或数组的数据集资源描述是最后一列。为了改变这一状况,使用ResponseVar名称-值对的名字列的响应。

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

有诊断情节来帮助你检查质量的一个模型。plotDiagnostics (mdl)给出了各种各样的阴谋,包括土地杠杆和库克的距离。plotResiduals (mdl)使拟合模型和数据之间的差异。

还有的属性mdl与模型相关的质量。mdl.RMSE给出了数据之间的均方根误差和装配模型。mdl.Residuals.Raw给出了原始残差。mdl.Diagnostics包含几个字段,如利用CooksDistance,可以帮助你识别特别有趣的观察。

这个例子展示了如何使用诊断检查拟合非线性模型,残余,片的情节。

加载示例数据。

负载反应

创建一个非线性模型的率的函数反应物使用hougen.m函数。

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

利用数据和模型的阴谋。

plotDiagnostics (mdl)

图包含一个坐标轴对象。标题顺序图的坐标轴对象利用包含2线类型的对象。这些对象代表杠杆,参考线。

有一个高杠杆点。确定点的位置。

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

检验残差图。

plotResiduals (mdl“安装”)

图包含一个坐标轴对象。坐标轴对象标题块残差与拟合值包含2线类型的对象。

什么是局外人。

使用一片的情节来展示每个预测模型的影响。

plotSlice (mdl)

图预测片情节包含3轴uimenu类型的对象和其他对象,uicontrol。坐标轴对象1包含5线类型的对象。坐标轴对象2包含5线类型的对象。坐标轴对象3包含5线类型的对象。

你可以拖动垂直冲蓝线变化的影响在一个预测的反应。例如,向右拖动X2行,注意X3线的斜率变化。

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

这个例子展示了如何使用这些方法预测,函数宏指令,随机预测和模拟响应新数据。

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

rng (“默认”)X =兰德(100 1);X = tan(π* X -π/ 2);

根据该模型生成的响应y = b1 *(π/ 2 + ((x - b2) / b3)每股)和添加噪声响应。

modelfun = @ (b, x) b (1) *(π/ 2 +:((x - b (2)) / b (3)));y = modelfun ([12 5 10], X) + randn (100 1);

适合一个模型从任意参数b= (1 1 1)。

beta0 = (1 1 1);%任意猜mdl = fitnlm (X, y, modelfun beta0)
mdl =非线性回归模型:y ~ b1 *(π/ 2 + ((x - b2) / b3)每股)估计系数:估计SE tStat pValue ________ ________ _____ b1 12.082 0.80028 15.097 3.3151 e-27 b2 e-06 b3 9.64 0.46499 20.732 9.5063 5.0603 1.0825 4.6747 2.0382 e-37观测数量:100年,错误自由度:97根均方误差:1.02平方:0.92,调整平方0.918 f统计量与零模型:6.45 e + 03,假定值= 1.72 e - 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

置信区间是反映在片情节。

函数宏指令

函数宏指令方法预测平均响应。函数宏指令往往比预测更方便使用,当你构建一个模型从一个数据集的数组。

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

ds =数据集({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);Xnew ysim =随机(mdl)
ysim =3×16.0505 19.0893 25.4647

重新运行随机方法。改变的结果。

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