不好意思。在优化功能中,如何在MLE下设置par[1]
,par[2]
,par[3]
的边界?
我尝试了下面的代码,但是它不起作用,我的方法也不是L-BFGS-B。
获取数据集
getSymbols("GOOG",from = "2008-06-30",to = "2018-06-30",src =
"yahoo")
1。获取GOOG每日回报
goog.daily<-abs(df.goog$daily.returns)
2。取绝对值
goog.daily<-abs(df.goog$daily.returns)
3.MOGPD负可能性
neg_lik <- function(par,data,u){
xi <- par[1]
sigma <- par[2]
delta <- par[3]
llog <- rep(0,length(data))
for (i in 1:length(data)){
if (data[i]<=u){llog[i] <- 0}
else {
llog[i] <- -log(delta)+ ((1+xi)/xi)*log(1+xi*(data[i]-
u)/sigma)+log(sigma)+2*log(1-(1-delta)*(1+xi*(data[i]-
u)/sigma)^(-1/xi))
}
}
return(sum(llog))
}
4。估算参数MOGPD
optim<-optim(c(0.5,1,1),neg_lik,lower=c(0,0,0)
,upper=c(100,100,100),data=goog.daily,u=thresh)
答案 0 :(得分:1)
tl; dr 添加method="L-BFGS-B"
,如下所示:
opt_res <- optim(c(0.5,1,1),neg_lik,
lower=c(0,0,0),
upper=c(100,100,100),
method="L-BGFS-B",
data=goog.daily,u=thresh)
(不建议您将结果称为“优化”;通常可以使用,但偶尔会导致很多混乱)
如果要对参数施加约束,则必须使用method="L-BFGS-B"
;
lower
和upper
自变量仅在这种情况下适用。 (有一些R软件包提供了其他受约束的优化选择,例如nloptr
。)来自?optim
:
...包括一个选项 框约束优化...
(在此情况下为“一个”,意为“仅一个”;已强调),并且
下,上:“ L-BFGS-B”方法的变量范围,或 搜索方法““布伦特””的范围。
(Brent方法仅用于单参数优化)。这意味着(尽管没有明确说明)这些参数仅适用于method="L-BFGS-B"
。
此外,当您在设置lower
和/或upper
的情况下运行模型时,还会收到警告:
警告信息: 在乐观中(...): 边界只能与方法L-BFGS-B(或Brent)一起使用