如何设置优化功能中的参数限制?

时间:2018-08-19 11:48:05

标签: r

不好意思。在优化功能中,如何在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) 

1 个答案:

答案 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"; lowerupper自变量在这种情况下适用。 (有一些R软件包提供了其他受约束的优化选择,例如nloptr。)来自?optim

  

...包括一个选项        框约束优化...

(在此情况下为“一个”,意为“仅一个”;已强调),并且

  

下,上:“ L-BFGS-B”方法的变量范围,或             搜索方法““布伦特””的范围。

(Brent方法仅用于单参数优化)。这意味着(尽管没有明确说明)这些参数仅适用于method="L-BFGS-B"

此外,当您在设置lower和/或upper的情况下运行模型时,还会收到警告:

  

警告信息:   在乐观中(...):     边界只能与方法L-BFGS-B(或Brent)一起使用