非线性回归
非线性回归可用命令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下拉式菜单,可以输出回归系数等。
这里的输入数据:
x、y分别为 m×n 矩阵和n维列向量,对一元非线性回归,x为n维列向量;
model是事先用m-文件定义的非线性函数;
beta0是回归系数的初值。
Beta是估计出的回归系数,
r(残差)、 J(Jacobian矩阵)是估计预测误差需要的数据。
alpha为显著性水平,缺省时为0.05。
预测和预测误差估计:
预测和预测误差估计的命令格式为
betaci=nlparci(beta,r,J)
其用途为记算回归系数的置信区间;
[Y,DELTA]=nlpredci(model,x,beta,r,J)
其用途为求nlinfit或nlintool所得的回归函数在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小时内删除。
发表评论