为什么 R 中的 optimx 没有给出这个简单的非参数似然最大化的正确解决方案?

2024-02-01

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

我正在尝试最大化一个非常简单的可能性。这是非参数似然 从某种意义上说,F 的分布不是以参数方式指定的。相当, 对于每个观察到的xi, f(xi)=pi因此log(Likelihood)=Sum(log(f(xi)))=Sum(log(pi)).

我试图最大化的功能是:sum(log(pi))+lamda(sum(pi-1)) where sum(pi)=1(即这是一个约束最大化问题,可以使用拉格朗日乘子来解决)。

这个问题的答案是pi=1/n where 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=2 is p1=p2=1/2 and lamda=-2。然而,我在使用 optimx 时没有得到这个。任何想法?


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

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

http://en.wikipedia.org/wiki/Lagrange_multiplier#Example:_numerical_optimization 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 [...]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 R 中的 optimx 没有给出这个简单的非参数似然最大化的正确解决方案? 的相关文章

随机推荐

  • 扩展界面生成器中的属性检查器

    是否可以使用继承自 UIView 的自定义类的附加属性来扩展界面构建器的属性检查器 现在不行 Interface Builder 允许您通过 Interface Builder 插件为您的对象实现自定义检查器 不过 IB Kit 目前不支持
  • 如何从 ipython 启动twisted的reactor

    我需要从 ipython 中启动一个twisted reactor 以允许继续交互 Ipython 的手册页引用了twisted 但我无法理解应该如何继续 文档引用了 IPython kernel twistedutil 所以我的印象是它应
  • 在 ASP.NET core 中添加迁移时不考虑新的更改

    我和一个朋友正在作为队友参与 ASP NET Core 项目并使用以下工具共享数据github 每次从 who 中提取更改时github 应该删除Migration folder为了添加迁移而不会出现任何错误 否则 我们会收到以下错误 数据
  • 寻找第 N 个孪生素数

    我试图解决 SPOJ 上的问题 我们需要计算第 n 个孪生素数对 相差 2 的素数 n 可以大到 10 5 我尝试使用筛子进行预先计算 我必须筛选最多 10 8 才能获得最大的 n 个孪生素数 但时间限制很严格 2s 并且超时 我注意到人们
  • Visual Studio 2012 中数据库优先实体框架模型的 MVC4 支架

    我在使用 Visual Studio 2012 时遇到问题 尝试添加带有脚手架的 MVC4 控制器 理想情况下 我希望在与我的 Web 应用程序分开的程序集中使用添加新项 ADO NET 实体数据模型 即不是代码优先 从数据库生成实体框架模
  • 如何提示 Google Smart Lock 使用特定输入字段作为网站中的用户名

    我一直在尝试搜索一些有关如何提示 Chrome 的 Google Smart Lock 使用特定输入字段作为与用户名关联的输入字段的文档 但没有任何运气 对于密码 它与使用的一样完美type password 但是 当涉及多字段表单中的用户
  • 相对于 PHP 4“opendir/readdir/closedir”,使用 PHP 5 DirectoryIterator 到底有什么好处?

    使用 PHP 5 DirectoryIterator 到底有什么好处 dir new DirectoryIterator dirname FILE foreach dir as fileinfo handle what has been f
  • 单元格格式四舍五入并显示 2 位小数

    我有一个单元格格式为数字并保留 2 位小数 实际数字是 69 30217 所以在我的单元格中 想象一下单元格 A1 它看起来像 69 30 还行吧 对于该单元格 我正在进行一些串联 因此如果我执行以下操作 E5 该数字显示为 69 3021
  • 如何让 tkinter 消息框出现在顶层前面

    我正在使用 Python 3 和 tkinter 编写一个程序 其中顶层最 初出现在根窗口的中心 如果顶层没有移开 它会覆盖任何可能出现的显示错误消息的消息框 消息框出现在根窗口前面 但在顶层后面 命令行中的简单示例显示会发生什么 gt g
  • 为什么枚举上的开关需要默认值?

    通常 switch 语句中不需要 default 但是 在以下情况下 只有当我取消注释默认语句时 代码才能成功编译 有人能解释一下为什么吗 public enum XYZ A B public static String testSwitc
  • 如何更改列表视图中复选框的文本?

    我知道这是一个愚蠢的问题 但我无法完成它 我想在单击时更改 ChekcBox 的文本 它会根据需要进行更改 但奇怪的是当我滚动列表视图时 该文本被分配给列表视图中存在的其他复选框 似乎每次滚动时列表视图都会重新加载 以下是我到目前为止所尝试
  • Android:了解可绘制文件夹

    我有一张尺寸为 250 70 像素的图像drawable文件夹 我刚刚开始 Android 开发 所以我创建了drawable文件夹中res 并且我有相同的图像 但尺寸更高drawable large文件夹 但图像看起来并不像我预期的那样
  • 在 Visual Studio 2005 中使用 nFringe 调试 UDK

    这是一个非常小众的问题 所以我不期望得到很大的回应 基本上 我正在通过一些教程来学习如何使用 UDK 即这个 http forums epicgames com showthread php p 27043379 post27043379
  • Android SearchView 列表视图过滤器

    我有一个活动 顶部有一个操作栏和一个搜索视图 另外 我正在使用自定义列表视图 并且希望从搜索视图中输入的关键字中进行过滤 这些关键字应与列表视图项中的特定文本视图相关联 在监听器的 onQueryTextChange String Text
  • 使用 xmlstarlet 进行 XPath 查询

    我有与此类似的 XML
  • C++ 向量的向量

    我有一个名为 Grid h 的类头文件 其中包含以下 2 个私有数据对象 vector
  • 随机 cs 文件无法在 Visual Studio 2012 中打开

    这是我的泡菜 我正在使用 Visual Studion 2012 并顺利开发我的应用程序 我今天打开VS 可以像平常一样打开所有文件 cs文件 按 开始 按钮开始调试后 我收到 xxx cs 未找到错误 未找到来源 未找到 xxx cs 您
  • 确定结构成员大小的常见 C/C++ 宏是什么?

    在 C C 中 如何确定结构体成员变量的大小而不需要定义该结构体类型的虚拟变量 这是一个如何做错的例子 但显示了意图 typedef struct myStruct int x 10 int y myStruct t const size
  • 如何根据MySQL中的多个字段查找重复行? [复制]

    这个问题在这里已经有答案了 可能的重复 Mysql 重复行 使用 2 列检测到重复 https stackoverflow com questions 1799518 mysql duplicate rows duplicate detec
  • 为什么 R 中的 optimx 没有给出这个简单的非参数似然最大化的正确解决方案?

    optimx 提供了错误的解决方案还是我错过了一个简单的点 谢谢你 我正在尝试最大化一个非常简单的可能性 这是非参数似然 从某种意义上说 F 的分布不是以参数方式指定的 相当 对于每个观察到的xi f xi pi因此log Likeliho