Я пытаюсь найти локальные максимумы для функции плотности вероятности (найдены с использованием 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.