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