Оптимальная ширина полосы для оценки производной будет отличаться от ширины полосы для оценки плотности. В общем, каждая функция плотности имеет свой собственный оптимальный выбор полосы пропускания.
Если ваша цель - минимизировать среднеквадратичную ошибку (которая является обычным критерием), в этом нет ничего субъективного. Это вопрос получения значения, которое минимизирует критерий. Уравнения приведены в разделе 2.10 Хансена (2009) .
Сложность в том, что оптимальная полоса пропускания является функцией самой плотности, поэтому это решение напрямую не используется. Существует множество способов решить эту проблему. Они обычно аппроксимируют некоторые функционалы плотности, используя нормальные приближения. (Обратите внимание, что нет предположения, что сама плотность нормальна. Предполагается, что некоторые функционалы плотности могут быть получены в предположении нормальности.)
От того, где введены приближения, зависит, насколько хорош селектор полосы пропускания. Самый грубый подход называется «нормальным эталонным правилом», которое налагает приближение на высоком уровне. В конце раздела 2.10 в Hansen (2009) приведена формула с использованием этого подхода. Этот подход реализован в hns()
функции из ks
пакета на CRAN. Это, вероятно, лучшее, что вы получите, если не хотите писать свой собственный код. Таким образом, вы можете оценить производную плотности следующим образом (используя ks
):
library(ks)
h <- hns(x,deriv.order=1)
den <- kdde(x, h=h, deriv.order=1)
Лучший подход, обычно называемый селектором с «прямым подключением», предполагает приближение на более низком уровне. Для прямой оценки плотности это метод Шизера-Джонса, реализованный в R с использованием density(x,bw="SJ")
. Тем не менее, я не думаю, что подобная возможность доступна в любом R-пакете для оценки производных.
Вместо того, чтобы использовать прямую оценку ядра, вам лучше использовать локальную оценку полинома. Это можно сделать с помощью locpoly()
функции из ks
пакета в R. Опять же, выбор оптимальной полосы пропускания не реализован, но смещение будет меньше, чем для оценок ядра. например,
den2 <- locpoly(x, bandwidth=?, drv=1) # Need to guess a sensible bandwidth