R: цикл для поиска максимума немонотонной функции - PullRequest
0 голосов
/ 02 декабря 2011

См. Код R ниже.Функция (someRfunction) работает с вектором и возвращает скалярное значение.Данные представляют собой пары (x, y), где x и y - векторы длины n, которые могут быть большими.

Я хочу знать значение x *, чтобы результат функции someRfunction для y, где {x> x *}, был максимальным.Функция работает со значениями y и немонотонна по 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]
  }
}

Спасибо.

Изменить: let someRfunction (yi) = t.test (yi) $ статистика.

1 Ответ

0 голосов
/ 02 декабря 2011

Если вы скажете что-нибудь еще о функции, особенно о том, является ли она гладкой и можно ли определить ее градиент, вы получите лучший ответ. На данный момент единственное увеличение скорости будет скромным из-за возможности предварительно указать вектор для хранения результатов, пропустите условие if-max и затем используйте which.max () для вектора. Возможно, вы захотите взглянуть на функцию optimx в пакете «optimx».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...