我正在尝试进行递归 nls 估计。然而,由于 ?structural 破坏了函数,nls 对于大多数样本都不会收敛。所以比代码中断。我如何使用 R 克服这个问题?即使用不同的起始值,并动态或自动选择?如果有错误,继续下一个样本量。
此外,是否可以查看哪个样本中存在这种不收敛并存储它?下面的代码:
Scaling=0.1175962
start=475
end=774
expandalfa0=matrix(nrow=length(PPPrate)-start+1,ncol=1)
expandalfa1=matrix(nrow=length(PPPrate)-start+1,ncol=1)
expandalfa2=matrix(nrow=length(PPPrate)-start+1,ncol=1)
expandalfa3=matrix(nrow=length(PPPrate)-start+1,ncol=1)
for (i in start:length(PPPrate)){
tempSpread=Spread[1:i-1]
tempPPPrate=PPPrate[1:i-1]
nlsresults=nls(tempPPPrate ~ Scaling*(alfa0+(alfa1/(1+exp(alfa2+alfa3*tempSpread)))),
data=tempdata,
start=list(alfa0=0.003,alfa1=0.014,alfa2=4.1,alfa3=-147),trace=TRUE,weights=weightnotional[1:i-1])
Paraexpand=summary(nlsresults)$parameters
expandalfa0[i-start+1]=Paraexpand[1,1]
expandalfa1[i-start+1]=Paraexpand[2,1]
expandalfa2[i-start+1]=Paraexpand[3,1]
expandalfa3[i-start+1]=Paraexpand[4,1]
alfa0=Paraexpand[1,1]
alfa1=Paraexpand[2,1]
alfa2=Paraexpand[3,1]
alfa3=Paraexpand[4,1]
alfa4=Paraexpand[5,1]
alfa5=Paraexpand[6,1]
}
expandforecast=Scaling*(expandalfa0+(expandalfa1/(1+exp(expandalfa2+expandalfa3*Spread[start:end]))))