参数非线性模型表示形式的连续反应变量和一个或多个连续的预测变量之间的关系
ÿ=F(X,β)+ε,
哪里
ÿ是一个ñ×1响应变量的观测向量。
F是的任何功能X和β计算结果中的每一行X随着矢量β来计算预测的相应的行ÿ。
X是一个ñ-通过-p矩阵预测的,与每一行对应一个观察,并为每个预测器一列。
β是p×1待估计未知参数的向量。
ε是一个ñ×1向量独立的,同分布的随机干扰。
相比之下,非参数模型不试图定性预测和响应与模型参数之间的关系。描述是经常的图形,如在的情况下决策树。
fitnlm
试图找到这些参数的值β可以最大限度地减少观察到的反应之间的平均平方差ÿ和模型的预测F(X,β)。要做到这一点,它需要一个初始值beta0
前迭代地修改所述矢量β以最小均方误差向量。
要开始拟合回归,把你的数据转换成一种形式,拟合函数中的期望。所有回归技术的输入数据开始以阵列X
在单独的载体和响应数据ÿ
在一个表或数据集阵列,或输入数据TBL
和响应数据作为在一列TBL
。输入数据的每行代表一个观察。每一列代表一个预测值(变量)。
对于表或数据集阵列TBL
,指示与响应变量'ResponseVar'
名称 - 值对:
MDL = fitlm(TBL, 'ResponseVar', '血压');
应变量是默认的最后一列。
您不能使用明确的预测的非线性回归。甲分类预测是一种从一组固定的可能性取值。
表示丢失数据为NaN
用于输入数据和响应数据。
例如,为了创建从Excel数据集阵列®电子表格:
DS =数据集('XLSFile','hospital.xls',...'ReadObsNames',真正);
创建工作空间从变量的数据集数组:
加载carsmallDS =数据集(重量,Model_Year,MPG);
要创建一个Excel电子表格的表:
TBL = 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
。
有几种方法来表示一个非线性模型。无论使用哪一个最方便的。
非线性模型是一个所需的输入到fitnlm
, 在里面modelfun
输入。
fitnlm
假定响应函数F(X,β)是平滑的参数β。如果你的功能不顺畅,fitnlm
能不能提供最佳的参数估计。
该功能手柄@modelfun
(B,X)
接受的载体b
和矩阵,表格或数据集阵列X
。功能句柄应该返回一个向量F
具有相同数量的行作为X
。例如,函数文件hougen.m
单位计算
检查通过输入功能类型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)* X(:,2) - X(:,3)/ B(5))。/(1 + B(2)* X(:,1)+ b(3)* X(:,2)+ b(4)* X(:,3));
一种用于在数据矩阵X
和响应在载体中ÿ
:
使用代表该式'X1'
如在第一预测器(列)X
,'X2'
作为第二预测器等。
表示的参数,以优化的矢量作为'B1'
,'B2'
等等。
写公式为'Y〜(数学表达式)'
。
例如,为了表示该反应数据的响应:
modelfun = 'Y〜(B1 * X2 - X3 / B5)/(1个+ B2 * X1 + B3 * X2 + B4 * X3)';
对于在表或数据阵列的数据集,则可以使用表示为从表或数据集数组变量名公式。把响应变量名在公式的左侧,随后是〜
,后面是表示该响应式的字符向量。
此示例示出了如何创建字符向量表示的所述响应反应
数据是在数据集中阵列。
加载反应
数据。
负荷反应
把数据放到数据集数组,其中每个变量具有在给定的名称XN
要么YN
。
DS =数据集({反应物,XN(1,:),XN(2,:),XN(3,:)},... {速率,炔});
检查数据集阵列的第一行。
DS(1,:) ANS =氢n_Pentane异戊烷ReactionRate 470 300 10 8.55
写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 = randn(nVars,1);%或beta0 = 10 *兰特(nVars,1);
用于使用表或数据集阵列拟合非线性回归模型的语法TBL
是
MDL = fitnlm(TBL,modelfun,beta0)
用于使用数字数组拟合非线性回归模型的语法X
和数字响应向量ÿ
是
MDL = fitnlm(X,Y,modelfun,beta0)
用于表示输入参数的信息,请参见准备数据,代表的非线性模型和选择初始向量beta0。
fitnlm
假定在一个表或数据集阵列响应变量TBL
是最后一列。要改变这种情况,使用ResponseVar
名称 - 值对以命名响应柱。
还有,以帮助您检查模型的质量诊断图。plotDiagnostics(MDL)
给出了各种阴谋,包括杠杆率和Cook距离地块。plotResiduals(MDL)
给人的拟合模型和数据之间的差异。
还有的性质MDL
这涉及到模型的质量。mdl.RMSE
给出了数据和拟合模型之间的根均方误差。mdl.Residuals.Raw
给出了原始残差。mdl.Diagnostics
包含多个字段,如杠杆和CooksDistance,可以帮助你找出特别有趣的观察。
这个例子展示了如何使用诊断,残差,和切片重复检查一个装有非线性模型。
加载样本数据。
加载反应
创建率的非线性模型的函数反应物
使用hougen.m
功能。
beta0 =酮(5,1);MDL = fitnlm(反应物,...率,@ hougen,beta0);
使数据和模型的杠杆情节。
plotDiagnostics(MDL)
还有是具有高杠杆的一个点。找到点。
[〜,maxl] = MAX(mdl.Diagnostics.Leverage)
maxl = 6
检查一个残差图。
plotResiduals(MDL,“装”)
没有站出来作为一个局外人。
使用片的情节展现在模型上每个预测变量的作用。
plotSlice(MDL)
您可以拖动垂直蓝色虚线看到对响应一个预测变化的影响。例如,拖动X2线到右侧,并注意的X3线的斜率改变。
这个例子说明了如何使用方法预测
,feval
和随机
预测和模拟到新的数据响应。
随机生成由柯西分布的样品。
RNG('默认')X =兰特(100,1);X = TAN(PI * X - PI / 2);
根据该模型生成响应Y = B1 *(PI / 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]。
beta0 = [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
置信区间反映在片情节。
feval
该feval
方法预测的平均响应。feval
往往是更方便的使用比当你从一个数据集数组结构模型预测。
创建来自数据集阵列非线性模型。
DS =数据集({X,'X'},{Y,'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