其实,Logistic模型是在是个非常老的问题了,第一次参加院赛,给的数据是美国的人口数据,可以非常好的与Logistic模型拟合,于是我用的就是Logistic模型,只不过当时对Matlab还比较生,程序写的是在不再不怎么样,现实建立一个M文件作为函数模型,又调用nlinfit()函数才完成,书中是自己运用Logistic的推导过程,先转成线性模型然后再回归分析,未尝不是个好方法。
M源文件(与书中源码相比,略有改动):
clear
clc
% 读入人口数据(1971-2000)
Y = [33815 33981 34004 34165 34212 34327 34344 34458 34498 34476 34483 34488 34513 34497 34511 34520 34507 34509 34521 34513 34515 34517 34519 34519 34521 34521 34523 34525 34525 34527]
% 读入时间变量数据(t=年份-1970)
T = 1:1:30
% 保存原始数据
Yo = Y;
To = T;
% 线性化处理
for t = 1:30,
x(t) = exp(-t);
y(t) = 1/Y(t);
end
% 计算,并输出回归系数 B
c = zeros(30,1)+1;
X = [c,x'];
B = inv(X'*X)*X'*y'
for i = 1:30,
% 计算回归拟合值
z(i) = B(1,1)+B(2,1)*x(i);
% 计算离差
s(i) = y(i) - sum(y)/30;
% 计算误差
w(i) = z(i) - y(i);
end
% 计算离差平方和S
S = s * s';
% 计算误差平方和Q
Q = w * w';
% 计算回归平方和U
U = S - Q;
% 计算,并输出F检验值
F = 28 * U / Q
% 计算非线性回归模型的拟合值
for j = 1:30,
Y(j) = 1 / (B(1, 1) + B(2, 1) * exp(-j));
end
% 输出非线性回归模型的拟合曲线(Logistic 曲线)
plot(T, Y, To, Yo, 'r*')
grid on;
近期评论