logistic模型
- 格式:doc
- 大小:544.00 KB
- 文档页数:5
Logistic 模型自然界中存在着一种事物的发展规律:在其发展初期,数量或规模增加得越来越快,到了一定时期,其增长速度逐步慢下来,最终数量或规模不再增长,从而稳定在数量或规模的极限值处。
如果记t 时刻数量为()t N t N =,则上述发展规律可由微分方程描述:(1)t t t mdN Nr N dt N =- (1) 在初始条件00()N t N =和参数(0)m r N >、已知的条件下,t N 被唯一确定。
易得其解为0()01(/1)k mt r t t m N N N N e --=+- (2)给出由n 对观测数据(,)k k t N ((),1,2,)k k N t N k n ==…,确定参数m N 及r 估计值的算法。
该问题实质是确定估计函数:0()01(/1)k mt r t t m N N N N e--=+-使得函数t N 和t N 的距离最小。
交替迭代算法交替迭代算法的基本思想是:先假设m N 已知,求出r 的最小二乘估计值,再以r 的估计值为已知,求出m N 的最优估计值,这样交替迭代,直至收敛到符合精度要求为止。
m N 已知时r 的估计整理式(2)得00ln(1)()ln(1)0m m k tN Nr t t N N -----= 由于观察过程中,观察数据有偏差,不妨令该偏差为 00ln(1)()ln(1)m m k k t N Nr t t N N η-----= 其中,k N 为k t 时刻的观测值,则令2*2000110()min min [ln(1)()ln(1)]n nm m k k r r k k t N Nf r r t t N N η>>====-----∑∑根据最小二乘准则,得001*0201()()()()nk m k k m k nk k N N N t t ln N N N r t t ==---=-∑∑ (3) 由式(3)可见,由于对数运算的限制,只有/1(0,1,2,)m k N N k n >=…,估计才有意义。
r 已知时m N 的估计由式(2)可得观测值:0()01(/1)k mt r t t m N N N N e --=+-设由m N 的估计值产生的关于t N 的误差为t ε,且t ε为独立、等方差、均值为零的随机变量。
于是在第k 时刻有0()01(/1)k mt k r t t m N N N N e ε--+=+-那么00()()000()()k k r t t r t t k k m m N N e N N N N e ε--++-=。
整理得000()00()()00(1)k k k r t t m k m m k k r t t r t t k kN N e N N N N N e N N e N εε----+-=++-- 当k t 足够大时,00()0k k m r t t kN N N N e N -+--将变得非常小,这是因为 0000000()00()()00()0()000()0001(/1)1(/1)2()(/1)(/1)0k k k k k k k mm r t t k m m r t t r t t m k r t t m r t t m m m r t t m m t N N N N N N N N e N N e N N e N N e N N N N N N e N e N N N N ---------→∞+-+-+-=--+--+--=+--→。
因此,当k t 足够大时,00()0()0(1)k k r t t m m k r t t kN N e N N e N ε---≈+-。
则关于m N 的近似最小二乘估计为00()*0()10(1)1()k k r t t n k mr t t k kN N e N n N e N --=-=-∑。
(4) 由m N 已知时r 的估计和r 已知时m N 的估计的分析可以看到,待估计参数mN 要比每个观测值k N 大,并且观测的数据量要足够远,使得0()0()k r t t k N e N --充分大。
换句话说,在样本观察中应该有阻滞增长的事实。
算法步骤估计**m N r 、的交替迭代算法的具体步骤:1、取初值(0)10m i b N ==、、((0)m N 接近k N )和精度δ,代入式(3)求得r 的估计值(0)r ,即令(1)i m a N -=,得001(1)021()()()()nk k k i k n k k N a N t t lnN a N r t t =-=---=-∑∑2、将b 代入式(4)求得()i m N ,00()()0()10(1)1()k k b t t n i k mb t t k kN N e Nn N e N --=-=-∑。
3、若()(1)i i m a N b r δ--+-≤,则停止,此时有*()i m mN N ≈,*(1)i r r -≈,否则转到步骤四。
4、级()(1)1i i mi i a N b r -=+==、、;再转到步骤二。
算法的收敛性上述参数估计问题可概述为数学问题:由n 对观测数据(,)k k t N ,其中(),1,2,k k N t N k n ==…,,求式(2)的参数m N 和r 估计值问题。
令误差函数为221(,)()nm k k k Q N r ηε==+∑显然Q 为连续可微函数,那么点集0{()()}K x Q x Q x =≤为一有界闭集。
该问题中第1v +步迭代后的误差损失为0()(1)()221()()(1)()220()(1)100(,,)(){[ln(1)()ln(1)][]}1(/1)k nv v v mmk k k v v v n v m m m k t r t t v k t m Q N Nr N N N r t t N N N N N e ηε+=+--+==+=-----+-+-∑∑(5)由叙述可知,在由()v mN求()v r 过程中,使函数Q 的21nk k η=∑部分达到最少,当这样交替复进时,非负函数Q 的值逐步达到最小。
即()(1)()()(1)(1)(1)(2)(1)(,,)(,,)(,,)i i i i i i i i i m m m m m m Q N N r Q N N r Q N N r ++++++≥≥由点集K 的有闭性及序列{()}v Q x 的非负不增性,可知存在点*x K ∈为序列{}v x 的聚点,()(,)v v v m x N r =,即*lim v v x x →∞=注1:由于式(5)的Q 函数是关于自变量的非线性函数,尽管在无扰动的情况下有意义,且最优解存在,但在实际观察中,误差的存在很容易使得()ln(1)v m kN N -在时间k 足够长(即k N 非常接近m N )时失去计算意义,为了在估算参数r 中避免该情况,观察时间k 值不宜太大,这往往是符合实际的。
注2: 从式(4)的推导过程中可得:当k N 越接近m N ,m N 估计值的误差方差越小。
算法示例参数估计算法根据注1、2,在应用交替迭代算法估计Logistic 模型中的参数时,应注意: (1)因观测数据(1,2,)k N k n =…,含有误差,所以要按由小到大重新排序,使得(1)(2)(),,n N N N …,。
(2)观测时间要足够长,从样本上可以看出这是一个阻滞增长过程。
(3)初始值0N 一般取第一个观测值。
(4)参数m N r 、的取值范围为0,(,)m r N s l >∈,这里01[]2max(0,,)n s N N +=,2n L N =。
(5)参数计算过程中,使用的样本要满足0k N N >。
(6)估计r 时应用较靠前的观测数据,而估计m N 时用靠后的数据,靠前的数据观测值多些,但不要靠近极限值,靠后的数据数目可少些,尽量靠近系统的极限。
以下L 替换为m N ,a 替换为0/m N Nx=0:1:12y=[43.65 109.86 187.21 312.67 496.58 707.65 960.25 1238.75 1560.00 1824.29 2199.00 2438.89 2737.71] y=L/(1+a*exp(-k*x))利用线性回归模型所得到的a 和k 的估计值和L=3000作为Logistic 模型的拟合初值,对Logistic 模型做非线性回归。
%第一步,线性回归模型得到a,k%这里假定y=a*exp(k*x),对两边取ln(Matlab 中,ln 用log 函数表示),有 %lny=lna+k*x%即logy 是x 的线性函数,斜率为k,截距为loga x=0:1:12 ;y=[43.65 109.86 187.21 312.67 496.58 707.65 960.25 1238.75 1560.00 1824.29 2199.00 2438.89 2737.71] ; line_A=polyfit(x,log(y),1); poly2str(line_A,x) k=line_A(1);a=exp(line_A(2));plot(x,y,'*',x,a*exp(k*x))title('线性回归的参数曲线与已经点的关系')%第二步,Logistic 模型%在Matlab 下输入:edit ,然后将下面两行百分号之间的内容,复制进去,保存 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function y=zhidao_liziqiangde(A,x) %其中k=A(1),a=A(2) k=A(1); a=A(2); L=3000;y=L./(1+a*exp(-k*x));%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %返回Matlab,输入[ABC,res]=lsqcurvefit('zhidao_liziqiangde',[k,a],x,y);kk=ABC(1)aa=ABC(2)y_logistic=zhidao_liziqiangde(ABC,x);figureplot(x,y,'*',x,y_logistic)legend('实验数据点','Logistic模型')。