如何识别constrOptim()的起始值?

如何识别constrOptim()的起始值?,r,optimization,constraints,R,Optimization,Constraints,我在R中使用constrOptim()来估计模型的参数。我得到的错误是目标函数的结果长度为0,而不是1。问题可能是我选择的起始值。我第一次使用R,我不熟悉constrOptim算法本身。有人能帮我优化一下吗 我的意见: library(quantmod) getSymbols('^GDAXI', src='yahoo', return.class='ts',from="2005-01-01", to="2015-01-31") GDAXI.DE=GDAXI[ , "GDAXI.Close"] l

我在R中使用constrOptim()来估计模型的参数。我得到的错误是目标函数的结果长度为0,而不是1。问题可能是我选择的起始值。我第一次使用R,我不熟悉constrOptim算法本身。有人能帮我优化一下吗

我的意见:

library(quantmod)
getSymbols('^GDAXI', src='yahoo', return.class='ts',from="2005-01-01", to="2015-01-31")
GDAXI.DE=GDAXI[ , "GDAXI.Close"]
log_r1=diff(log(GDAXI.DE[39:2575]))

sigma=matrix(nrow=length(log_r1)-1, ncol=1)
for(i in 2:length(log_r1))
{
sigma[i-1]=var(log_r1[1:i])
}

error=matrix(nrow=length(log_r1), ncol=1)
mu=mean(log_r1)
for(i in 1:length(log_r1))
{
error[i]=log_r1[i]-mu
}
我要最小化的函数:

LogLik=function(th)
{
input=garch(th)
sig=input
for(i in 1:length(sigma))
{
LL=(-1/2)*log(2*pi)-(1/2)*log(sig[i])-(1/2)*er[i]/sig[i]
}
}
计算上述输入的函数:

sig=var(log_r1)
er=error
Sigma_garch=matrix(nrow=length(sigma), ncol=1)
garch=function(th)
{
omega.0=th[1]
alpha.0=th[2]
beta.0=th[3]
for(i in 1:length(sigma))
{
if(i==1)
{
  Sigma_ga=sig
}else
{
  Sigma_ga=Sigma_garch[i-1]
}
Sigma_garch[i]=omega.0+alpha.0*er[i]^2+beta.0*Sigma_ga 
}
return(Sigma_garch)
}
我的约束和优化过程:

ui=matrix(c(diag(1,3),c(0,(-1),(-1))),4,3, byrow = T)
ci=c(0.01,0,0,(-0.99))
theta=c(0.02,0.01,0.95)
est=constrOptim(c(0.02,0.01,0.95),LogLik, grad=NULL, ui,ci,hessian=FALSE)
我得到的错误:
optim中的错误(theta.old,fun,gradient,control=control,method=method,:Zielfunktion gibt Ergebnis der Länge 0 zurück,nicht Länge 1


有人能告诉我这里有什么问题吗?

您的目标函数,
LogLik
,不返回导致
目标函数的结果长度为0而不是1的值。

LogLik=function(th)
{
input=garch(th)
sig=input
for(i in 1:length(sigma))
{
LL=(-1/2)*log(2*pi)-(1/2)*log(sig[i])-(1/2)*er[i]/sig[i]
}
return(LL)
}