方法——由研究目标和对象决定
1)基于线性化处理的最小二乘法计算
直线拟合;估计模型参数全局效果更好
2)基于非线性方程运用的迭代算法
曲线拟合;模型标准误差更低
注:对于那些无法线性化的模型,基于某种迭代运算的曲线拟合是无可替代的选择
3.1 常见数学模型表达式
3.2 常见实例——一变量的情形
3.2.1 指数模型(I)
3.2.1.2指数模型I的线性回归
第一步 做散点图
第二步,回归建模
判断方法:
1)根据散点图进行估计
2)逐个模型进行尝试
x=[0.5 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5 10.5 11.5 12.5 13.5 14.5 15.5]
y=[26300 25100 19900 15500 11500 9800 5200 4600 3200 2300 1700 1200 900 700 600 500]
plot(x,y,'r.');
xlabel('Distance');
ylabel('average density');
hold on
X=[ones(length(y),1),x'];
Y=log(y');
[B,Bint,E,Eint,Stats]=regress(Y,X);
R2=Stats(1);
a=exp(B(1));
b=-B(2);
f=aexp(-bx);
plot(x,f,'b-');
hold off
s=sqrt(sumsqr(y-f)/(length(f)-2));
a,b,R2,s
第三步,在散点图中添加趋势线
第四步 模型效果分析
对于图像的R2进行比较,R2越大表明拟合的越好。
3.2.1.3指数模型I的非线性拟合
第一步 构造指数函数
function yhat=myfun(beta,x)
b1=beta(1);
b2=beta(2);
yhat=b1exp(b2x);
第二步 非线性拟合
借助nlinfit函数调用非线性拟合子程序
[Beta,R,J]=nlinfit(X,Y,Modelfun,Beta0)
与nilinfit配套,可以借助统计选项构造函数statset定义最大迭代次数
option=statset('MaxIter‘,200)
[Beta,R,J]=nlinfit(X,Y,Modelfun,Beta0,option)
x=[0.5 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5 10.5 11.5 12.5 13.5 14.5 15.5]
y=[26300 25100 19900 15500 11500 9800 5200 4600 3200 2300 1700 1200 900 700 600 500]
plot(x,y,'r.');
xlabel('Distance');
ylabel('average density');
hold on
beta0=[0 0]; %设定迭代初始值
0=statset('MaxIter',200); %设定最大迭代次数
[B,E,J]=nlinfit(x,y,'myfun',beta0,0); %非线性拟合
a=B(1); %模型常数
b=-B(2); %回归系数
f=aexp(-bx); %模型表达
plot(x,f,'b-'); %添加趋势线
hold off
s=sqrt(sumsqr(y-f)/(length(f)-2)); %计算标准误差
a,b,s
第三步,拟合结果简评