Я пытаюсь найти локальные максимумы для функции плотности вероятности (найдены с использованием density
метода R ). Я не могу сделать простой метод «осмотреть соседей» (когда нужно осмотреть точку, чтобы увидеть, является ли это локальным максимумом по отношению к ее соседям), поскольку существует большой объем данных. Кроме того, кажется более эффективным и универсальным использовать что-то вроде сплайн-интерполяции, а затем найти корни 1-й производной, в отличие от построения «осмотра соседей» с отказоустойчивостью и другими параметрами.
Итак, мои вопросы:
- При заданной функции от
splinefun
каких методов будут найдены локальные максимумы? - Есть ли простой / стандартный способ найти производные функции, возвращаемой с помощью
splinefun
? - Есть ли лучший / стандартный способ найти локальные максимумы функции плотности вероятности?
Для справки ниже приведен график моей функции плотности. Другие функции плотности, с которыми я работаю, похожи по форме. Я должен сказать, что я новичок в R, но не новичок в программировании, поэтому может быть стандартная библиотека или пакет для достижения того, что мне нужно.
Спасибо за вашу помощь!!
msExtrema {msProcess}
), и смог определить только некоторые из максимумов, но не все, играя с настройками допуска.
msExtrema
, это просто оболочка для peaks
из splus2R
пакета, который вы бы лучше использовать непосредственно , если вы хотите только локальные максимумы , а не локальные минимумы. Я не могу понять, почему использование по умолчанию span=3
не может найти все локальные максимумы. И 2 ^ 15 = 32768 не должно быть достаточно большим, чтобы эффективность была серьезной проблемой.
peaks
похоже, глючит: он вызывает max.col
с настройкой по умолчанию ties.method = "random"
, которая не только случайным образом разрывает связи, но и устанавливает относительный допуск 1e-5 для объявления связи. Первое сбивает с толку, последнее определенно не то, что вы хотите здесь. peaks()
также принимает strict
параметр, который плохо документирован и, глядя на код функции, ничего не делает. Ах, радости пользовательских программных библиотек! Вы, возможно, вполне сможете это исправить, так как говорите, что не новичок в программировании,
density()
не оценивает плотность для каждого элемента данных, он оценивает плотность по n значениям, где n - это заданный пользователем параметр со значением по умолчанию n = 512.