通过tabuSearch设置非线性参数的初始值

时间:2018-03-24 15:33:23

标签: optimization curve-fitting

我正在尝试将lppl模型与KLSE索引相匹配,以预测最可能的崩溃时间。许多论文建议tabuSearch识别非线性参数的初始值,但没有一个发布他们的代码。我试图在NLS And Log-Periodic Power Law (LPPL) in R的帮助下拟合上述索引。但是获得的误差和p值并不重要。我认为初始值不准确。任何人都可以帮我找到合适的初始值吗?

library(tseries)

library(zoo)

ts<-get.hist.quote(instrument="^KLSE",start="2003-04-18",end="2008-01-30",quote="Close",provider="yahoo",origin="1970-01-01",compression="d",retclass="zoo")

df<-data.frame(ts)

df<-data.frame(Date=as.Date(rownames(df)),Y=df$Close)

df<-df[!is.na(df$Y),]

library(minpack.lm)

library(ggplot2)

df$days<-as.numeric(df$Date-df[1,]$Date)

f<-function(pars,xx){pars$a + (pars$tc - xx)^pars$m *(pars$b+ pars$c *     cos(pars$omega*log(pars$tc - xx) + pars$phi))}

resids<-function(p,observed,xx){df$Y-f(p,xx)}

nls.out <- nls.lm(par=list(a=600,b=-266,tc=3000, m=.5,omega=7.8,phi=-4,c=-14),fn = resids, observed = df$Y, xx = df$days, control= nls.lm.control (maxiter =1024, ftol=1e-6, maxfev=1e6))

par<-nls.out$par

nls.final<-nls(Y~(a+(tc-days)^m*(b+c*cos(omega*log(tc-days)+phi))),data=df,start=par,algorithm="plinear",control=nls.control(maxiter=10024,minFactor=1e-8))

summary(nls.final)

1 个答案:

答案 0 :(得分:0)

我将研究有关此主题的一些较新的研究,其中有一个很好的trig修改,实际上可以保证单数优化。此外,您可以使用r的内置线性方程式求解器来查找可线性化的参数,因此只需要在3维上进行优化即可。以下链接应该可以帮助您入门。我会引用最近的文献和个人经验来强烈建议不要使用禁忌搜索。

https://www.ethz.ch/content/dam/ethz/special-interest/mtec/chair-of-entrepreneurial-risks-dam/documents/dissertation/master%20thesis/MAS_final_Tuncay.pdf