добавить кривую, которая соответствует пикам на графике в R? - PullRequest
0 голосов
/ 13 июня 2011

Есть ли функция, которая добавляет кривую, которая соответствует пикам, если даны два вектора и их график?Например, у меня есть:

x = c (0:20)

x [1] 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1617 18 19 20

y [1] 19,4 17,9 8,1 11,3 7,8 8,0 5,0 1,7 3,9 5,4 7,5 4,4 5,0 4,9 3,5 2,9 2,4 1,4 1,7

график (x, y, xlim = диапазонх), ylim = диапазон (у))

лучше всего, нанами

1 Ответ

5 голосов
/ 13 июня 2011

Математически говоря, ваша проблема очень плохо определена.Вы предоставляете диапазон дискретных значений, а не функцию для ваших значений y.Это означает, что его нельзя дифференцировать, чтобы найти локальные максимумы.

Тем не менее, здесь приведен фрагмент кода, который может помочь вам начать работу.Он использует функцию с именем peaks, ( приписывается Брайану Рипли ):

peaks<-function(series,span=3){
  z <- embed(series, span)
  s <- span%/%2
  v<- max.col(z) == 1 + s
  result <- c(rep(FALSE,s),v)
  result <- result[1:(length(result)-s)]
  result
} 

x <- c(1:20)
y <- c(19.4, 17.9, 8.1, 11.3, 7.8, 8.0, 5.0, 1.7, 3.9, 
       5.4, 7.5, 5.4, 4.7, 5.0, 4.9, 3.5, 2.9, 2.4, 1.4, 1.7)

plot(x,y, type="l")
p <- which(peaks(y, span=3))

lines(x[p], y[p], col="red", type="b)

enter image description here

Проблема в том, что концепция локальногопики плохо определены.Насколько локальный ты имеешь в виду?Алгоритм пиков в том виде, в котором он поставляется, позволяет изменять span.Поиграйте и посмотрите, поможет ли это вообще.

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