Применить вектор к функции оптимизации в R
Как я могу применить вектор наблюдений, чтобы найти локальный максимум между каждым наблюдением в R. Я делаю следующий код, но согласно графику результат должен быть только два локальных максимума. Как я могу сделать это в R?
x = c(0.0000005, 0.1578947, 0.3157895, 0.4736842, 0.6315789, 0.7894737,
0.9473684, 1.1052632,1.2631579, 1.4210526, 1.5789474, 1.7368421,
1.8947368, 2.0526316, 2.2105263, 2.3684211, 2.5263158 ,
2.6842105, 2.8421053, 3.000000)
f = function(x) (x+1)*(x-2)*(x-1)*(x)*(x+1)*(x-2)*(x-3)
plot(x, f(x), type="l")
maximums = sapply(x, function(x)optimize(f, c(0, x), maximum = TRUE)$maximum)
1 ответ
Я не уверен, как подать заявку optimize
для этой последовательности для этой цели, но она, конечно, не будет применяться точечно. Вы могли бы предположительно сделать полиномиальный сплайн, а затем дифференцировать его. Числовой аналог дифференцирования diff
и условия для локального максимума состоят в том, чтобы первая производная была маленькой, а вторая производная была отрицательной. Вот график условий, которые удовлетворяют этим условиям (смещение раскраски на единицу, чтобы учесть сокращение вектора, когда вы diff
Это:
plot(x,f(x),
col=c("red","blue")[1+seq_along(x) %in% # adding one to the logical values 0,1
c(0, which( diff(diff(f(x)))<0 & diff(f(x)) < 0.1))])