非线性回归
非线性回归可用命令nlinfit,nlintool,nlparci,nlpredci来实现。
进行非线性回归时可使用nlinfit指令,其语法如下:
beta = nlinfit(X,y,fun,beta0)
[beta,r,J] = nlinfit(X,y,fun,beta0)
[...] = nlinfit(X, y, fun, beta0, options)
回归:
回归可用命令
[beta,r,J]=nlinfit(x,y,model,beta0) 或者
nlintool(x,y,model,beta0,alpha)
来实现。
其中:
命令 [beta,r,J]=nlinfit(x,y,model,beta0)的作用为确定回归系数;
而命令 nlintool(x,y,model,beta0,alpha)
产生一个交互式的画面,画面中有拟合曲线和y的置信区间。
matlab拟合数据
通过左下方的Export下拉式菜单,可以输出回归系数等。
这里的输入数据:
xy分别为 m×n 矩阵和n维列向量,对一元非线性回归,xn维列向量;
model是事先用m-文件定义的非线性函数;
beta0是回归系数的初值。
Beta是估计出的回归系数,
r(残差)、 JJacobian矩阵)是估计预测误差需要的数据。
alpha为显著性水平,缺省时为0.05
预测和预测误差估计:
预测和预测误差估计的命令格式为
betaci=nlparci(beta,r,J) 
其用途为记算回归系数的置信区间;
[Y,DELTA]=nlpredci(model,x,beta,r,J) 
其用途为求nlinfitnlintool所得的回归函数在x处的预测值Y及预测值的显著性为1-alpha的置信区间Y± DELTA
alpha缺省时为0.05
某些非线性回归也可化为多元线性回归来解。
.................
例:
在工具箱中,有reaction.mat之资料,这是有关化学反应所到之观察值,其中牵涉到三种化学反应:氢、n-戊烷、同位戊烷等。
其中之函数hougen已经存在,是使用Hougen-Watson模式建立之反应动能量,其回应值为预设之反应速率。
load reaction
betafit = nlinfit(reactants,rate,@hougen,beta)
betafit =
  1.2526
  0.062776
  0.040048
  0.11242
 1.1914
其中之hougen.m可以type hougen,得其內容如下:
function yhat = hougen(beta,x)
%HOUGEN Hougen-Watson model for reaction kinetics.
%  YHAT = HOUGEN(BETA,X) gives the predicted values of the
%  reaction rate, YHAT, as a function of the vector of
%  parameters, BETA, and the matrix of data, X.
%  BETA must have 5 elements and X must have three
%  columns.
%
%  The model form is:
%  y = (b1*x2 - x3/b5)./(1+b2*x1+b3*x2+b4*x3)
%
%  Reference:
%      [1]  Bates, Douglas, and Watts, Donald, "Nonlinear
%      Regression Analysis and Its Applications", Wiley
%      1988 p. 271-272.
%  Copyright 1993-2004 The MathWorks, Inc.
%  $Revision: 2.7.2.1 $  $Date: 2004/01/24 09:34:06 $
%  B.A. Jones 1-06-95.
b1 = beta(1);
b2 = beta(2);
b3 = beta(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);
....
另有一个nlintool指令函数则可利用图形介面执行,可在指令窗下打入执行之。
....
...
close all
clear,clc
yhat  = @(beta,x) (beta(4)*x(:,2) - x(:,3)/beta(5))./(1+beta(1)*x(:,1)+beta(2)*x(:,2) + beta(3)*x(:,3));
x0=[1        8.55        470      300        10
    2        3.79        285      80        10
    3        4.82        470      300        120
    4        0.02        470      80        120
    5        2.75        470      80        10
    6        14.39      100      190        10
    7        2.54        100      80        65
    8        4.35        470      190        65
    9        13.00      100      300        54
    10        8.50        100      300        120
    11        0.05        100      80        120
    12        11.32      285      300        10
    13        3.12        285      190        120];
x=x0(:,3:5);
y=x0(:,2);
beta=[0.1,0.05,0.02,1,2]; %回归系数的初值  beta =  [0.1000 2.0000 1.0000 0.0500 0.0200];
[betahat,f,J]=nlinfit(x,y,yhat,beta);  % f,j是下面命令用的信息
betaci=nlparci(betahat,f,J);     
betaa=[betahat',betaci]        %回归系数及其置信区间  betaa=[betahat',betaci] betaa=[betahat,betaci]
[yhat1,delta]=nlpredci(yhat,x,betahat,f,J);      %  y的预测值及其置信区间半径,置信区间为yhat1 ±delta
yy=[y,yhat1,delta]
用命令nlintool可看到画面。    [beta,r,J,COVB,mse] = nlinfit(X,y,fun,beta0)
nlintool(x,y,yhat1,beta)
[betahat,f,J,COVB,mse] = nlinfit(x,y,yhat,beta)
................

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。