Кажется, существуют разногласия по поводу того, что такое правило Сильвермана.
scipy docs говорят, что правило Сильвермана реализовано как :
def silverman_factor(self):
return power(self.neff*(self.d+2.0)/4.0, -1./(self.d+4))
Где d
- количество измерений (1, в вашем случае), а neff
- эффективный размер выборки (количество точек, при условии отсутствия весов).Таким образом, пропускная способность scipy составляет (n * 3 / 4) ^ (-1 / 5)
(умноженное на стандартное отклонение, рассчитанное другим методом).
В отличие от этого, R's stats
документы пакета описывают метод Сильвермана как "0,9 разминимальное значение стандартного отклонения и межквартильный интервал, деленные в 1,34 раза на размер выборки на отрицательную одну пятую степени », что также можно проверить в коде R, набрав bw.nrd0
в консоли:
function (x)
{
if (length(x) < 2L)
stop("need at least 2 data points")
hi <- sd(x)
if (!(lo <- min(hi, IQR(x)/1.34)))
(lo <- hi) || (lo <- abs(x[1L])) || (lo <- 1)
0.9 * lo * length(x)^(-0.2)
}
Википедия , с другой стороны, дает «Правило большого пальца Сильвермана» в качестве одного из многих возможных имен для оценки:
1.06 * sigma * n ^ (-1 / 5)
Версия википедии эквивалентна версии scipy.
Все три источника цитируют одну и ту же ссылку: Silverman, BW (1986). Оценка плотности для статистики и анализа данных .Лондон: Чепмен и Холл / CRC.п.48. ISBN 978-0-412-24620-3.Википедия и R конкретно ссылаются на страницу 48, тогда как в документах Сципи не упоминается номер страницы.(Я отправил правку в Википедию, чтобы обновить ссылку на ее страницу до стр.45, см. Ниже.)
Приложение
Я нашел PDF изСсылка Сильвермана.
На странице 45 уравнение 3.28 - это то, что используется в статье Википедии: (4 / 3) ^ (1 / 5) * sigma * n ^ (-1 / 5) ~= 1.06 * sigma * n ^ (-1 / 5)
.Сципи использует тот же метод, переписывая (3 / 4) ^ (-1 / 5)
как эквивалент (4 / 3) ^ (1 / 5)
.Сильверман описывает этот метод следующим образом:
Хотя (3.28) будет хорошо работать, если популяция действительно нормально распределена, она может несколько смягчиться, если популяция является мультимодальной ... поскольку смесь становится более бимодальной,формула (3.28) будет все больше и больше сглаживаться относительно оптимального выбора параметра сглаживания.
Документы scipy ссылаются на эту слабость , заявляя:
Включает автоматическое определение полосы пропускания.Оценка работает лучше всего для унимодального распределения;бимодальные или мультимодальные распределения имеют тенденцию быть чрезмерно сглаженными.
Статья Сильвермана продолжает мотивировать метод, используемый R и Stata.На странице 48 мы получаем уравнение 3.31:
h = 0.9 * A * n ^ (-1 / 5)
# A defined on previous page, eqn 3.30
A = min(standard deviation, interquartile range / 1.34)
Сильверман описывает этот метод следующим образом:
Лучшее из обоих возможных миров ... В итоге, выбор ([eqn] 3.31) для параметра сглаживания очень хорошо подходит для широкого диапазона плотностей и его тривиально оценить.Для многих целей это, безусловно, будет адекватный выбор ширины окна, а для других это будет хорошей отправной точкой для последующей тонкой настройки.
Так что, похоже, Википедия и Сципи используют простую оценкупредложенный Silverman.R и Stata используют более изысканную версию.