9

是 optimx() 提供了不正确的解决方案还是我错过了一个简单的点?谢谢!

我试图最大化一个非常简单的可能性。这是一个非参数似然,因为 F 的分布不是参数化的。相反,对于每个观察到xi的 ,f(xi)=pi因此log(Likelihood)=Sum(log(f(xi)))=Sum(log(pi))

我试图最大化的函数是:sum(log(pi))+lamda(sum(pi-1)) 哪里sum(pi)=1(即这是一个可以使用拉格朗日乘数解决的约束最大化问题)。

这个问题的答案是数据点的数量pi=1/n在哪里。n但是,optimx 似乎没有给出这个解决方案。有没有人有任何想法。如果n=2,我最大化的功能是log(p1)+log(p2)+lamda(p1+p2-1)

这是我的代码和 R 的输出:

n=2
log.like=function(p)
{
  lamda=p[n+1]
  ll=0
  for(i in 1:n){
    temp = log(p[i])+lamda*p[i]-lamda/(n)
    ll=ll+temp
  }
  return(-ll)
}


mle = optimx(c(0.48,.52,-1.5),
             log.like,
             lower=c(rep(0.1,2),-3),
             upper=c(rep(.9,2),-1),
             method = "L-BFGS-B")

> mle
             par  fvalues   method fns grs itns conv  KKT1 KKT2 xtimes
1 0.9, 0.9, -1.0 1.010721 L-BFGS-B   8   8 NULL    0 FALSE   NA      0

方程的解n=2p1=p2=1/2lamda=-2。但是,我在使用 optimx 时没有得到这个。任何想法?

4

1 回答 1

23

没有错optimx。退后一步,看看你想要最大化的函数:log(p1) + log(p2) + lamda*(p1+p2-1). 很直观,最佳解决方案是使所有变量尽可能大,不是吗?看到optimx正确地返回了您指定的上限。

那么你的方法有什么问题呢?使用拉格朗日乘数时,临界点是上述函数的鞍点,而不是像optimx可以帮助您找到的局部最小值。所以你需要修改你的问题,使这些鞍点成为局部最小值。这可以通过优化梯度范数来完成,这很容易针对您的问题进行分析计算。这里有一个很好的例子(带图片):

http://en.wikipedia.org/wiki/Lagrange_multiplier#Example:_numerical_optimization

对于您的问题:

grad.norm <- function(x) {
  lambda <- tail(x, 1)
  p <- head(x, -1)
  h2 <- sum((1/p + lambda)^2) + (sum(p) - 1)^2
}

optimx(c(.48, .52, -1.5),
       grad.norm,
       lower = c(rep(.1, 2), -3),
       upper = c(rep(.9, 2), -1),
       method = "L-BFGS-B")

#                               par      fvalues   method  fns grs [...]
# 1 0.5000161, 0.5000161, -1.9999356 1.038786e-09 L-BFGS-B  13  13 [...]

跟进:如果您不想或不能自己计算梯度,可以让 R 计算一个数值近似值,例如:

log.like <- function(x) {
  lambda <- tail(x, 1)
  p <- head(x, -1)
  return(sum(log(p)) + lambda*(sum(p) - 1))
}

grad.norm <- function(x) {
  require(numDeriv)
  return(sum(grad(log.like, x)^2))
}

optimx(c(.48, .52, -1.5),
       grad.norm,
       lower = c(rep(.1, 2), -3),
       upper = c(rep(.9, 2), -1),
       method = "L-BFGS-B")

#                                par      fvalues   method fns grs [...]
# 1 0.5000161, 0.5000161, -1.9999356 1.038784e-09 L-BFGS-B  13  13 [...]
于 2012-08-09T05:12:25.767 回答