主要内容

非线性回归

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

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

y=FXβ)+ε

在哪里

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

  • F是任意函数Xβ计算每一行的值X和向量一起β的对应行计算预测y

  • X是一个N——- - - - - -P.矩阵预测的,与每一行对应一个观察,并为每个预测器一列。

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

  • ε是一个N×1向量独立的,同分布的随机干扰。

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

fitnlm试图找到参数的值β可以最大限度地减少观察到的反应之间的平均平方差y以及模型的预测FXβ)。要做到这一点,它需要一个初始值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假设响应函数FXβ)的参数是平滑的β.如果你的功能不顺利,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沃森模型的反应动力学。%YHAT = HOUGEN(BETA,X)给出%反应速率,YHAT的预测值,作为参数%,BETA的载体的功能,和数据的矩阵,X.%BETA必须有5种元素和X必须有三个%列。%%该模型的形式是:%Y =(B1 * X2  -  X3 / B5)./(1个+ B2 * X1 + B3 * X2 + B4 * X3)%%参考:%[1]贝茨,道格拉斯,和Watts唐纳德,“非线性%回归分析及其应用”,威利%1988年页。271-272。%版权所有1993-2004 MathWorks公司的学士%琼斯95年1月6日。B1 =β(1);B2 =β(2);B3 =β(3); b4 = beta(4); b5 = beta(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 *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)”;

对于表或数据集数组中的数据,可以使用表示为表或数据集数组变量名的公式。将响应变量名放在公式的左边,后面跟着a,后面是表示响应公式的字符向量。

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

  1. 加载反应数据。

    负载反应
  2. 将数据放入数据集数组中,其中每个变量都有一个名称xnyn

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

    ds(1,:) ans = n_戊烷异戊烷反应速率470 300 10 8.55
  4. hougen式数据集阵列中使用的名称。

    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(据nvar, 1);% or beta0 = 10*rand(nVars,1);

将非线性模型与数据拟合

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

MDL = fitnlm(TBL,modelfun,beta0)

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

mdl = fitnlm (X, y, modelfun beta0)

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

fitnlm假设响应变量在表或数据集数组中资源描述是最后一列。要改变这种情况,使用ResponseVar命名响应列的名称-值对。

拟合非线性模型的质量检验与调整

有一些诊断图可以帮助您检查模型的质量。plotDiagnostics (mdl)给出了各种各样的图,包括杠杆和库克的距离图。plotResiduals (mdl)给出了拟合模型和数据之间的差异。

还有一些性质mdl这与模型质量有关。mdl。RMSE给出了数据与拟合模型之间的均方根误差。mdl.Residuals.Raw给出原始残差。mdl。诊断包含几个字段,如Leverage和CooksDistance,它们可以帮助您识别特别有趣的观察结果。

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

加载示例数据。

加载反应

建立一个非线性模型的速率作为函数反应物使用hougen.m功能。

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

使数据和模型的杠杆情节。

plotDiagnostics (mdl)

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

[〜,maxl] = MAX(mdl.Diagnostics.Leverage)
maxl = 6

检查一个残差图。

plotResiduals (mdl“安装”

没有什么是出类拔萃的。

使用切片图来显示每个预测因子对模型的影响。

plotSlice (mdl)

您可以拖动垂直的蓝色虚线,以查看一个预测器的更改对响应的影响。例如,将X2线向右拖动,注意到X3线的斜率发生了变化。

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

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

随机生成由柯西分布的样品。

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([12 5 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))估计系数:估计SE TSTAT p值________ _______ ______ __________ B1 12.082 0.80028 15.097 3.3151e-27 B2 5.0603 1.0825 4.6747 9.5063E-06 B3 9.64 0.46499 20.732 2.0382e-37编号的观察:100,错误自由度:97均方根误差:1.02 R平方:0.92,调整R平方0.918 F统计与零模式:6.45e03,p值= 1.72e-111

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

检查适合。

plotSlice (mdl)

预测

预测方法预测平均响应,如果需要,给出置信范围。找到关于点的预测响应值和预测响应置信区间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,'是'});mdl2 = fitnlm (ds, modelfun beta0);

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

Xnew =(-15; 5。12);ynew = feval(MDL2,Xnew)
ynew =3×15.4122 18.9022 26.5161

随机的

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

Xnew =(-15; 5。12);ysim =随机(MDL,Xnew)
ysim =3×16.0505 19.0893 25.4647

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

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