【问题标题】:R: looping to search for max of non-monotonic functionR:循环搜索非单调函数的最大值
【发布时间】:2011-12-02 14:51:10
【问题描述】:

请参阅下面的 R 代码。函数 (someRfunction) 对向量进行操作并返回一个标量值。数据是对 (x,y),其中 x 和 y 是长度为 n 的向量,可能很大。

我想知道 x* 的值,使得 someRfunction 在 y 上的结果 {x>x*} 最大化。该函数对 y 值进行操作,并且在 x* 中是非单调的。我需要评估所有 x*(即 x 的每个元素)。如果执行一次,速度不是问题,但代码会在模拟中执行多次。有什么方法可以让这段代码更高效/更快?

### x and y are vectors of length n
### sort x and y such that they are ordered by descending x
xord <- x[order(-x)]
yord <- y[order(-x)]
maxf <- -99999
maxcut <- NA

for (i in 1:n) {
  ### yi is a subvector of y that corresponds to y[x>x{i}]
  ### where x{i} is the (n-i+1)th order statistic of x
  yi <- yord[1:(i-1)]
  fxi <- someRfunction(yi)
  if (fxi>maxf) {
    maxf <- fxi
    maxcut <- xord[i]
  }
}

谢谢。

编辑:让 someRfunction(yi)=t.test(yi)$statistic.

【问题讨论】:

标签: r loops


【解决方案1】:

如果你能多说一下这个函数,特别是它是否平滑,它的梯度是否可以确定,你会得到一个更好的答案。目前,唯一的速度增加将是适度的,因为能够预先指定一个向量来保存结果,省略 if-max 子句,然后在向量上使用 which.max()。您可能想查看“optimx”包中的函数optimx

【讨论】:

  • 函数类似于 t.test(yi)$statistic
  • 你应该能够向量化一个类似t.test$statistic的函数,假设它类似于mean(vec)/sd(vec),也许应用了length(vec)-1因子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-12
  • 1970-01-01
  • 2021-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多