Формула линейной интерполяции для процентилей:
линейный: i + (j - i) * фракция, где фракция — это дробная часть индекса, окруженная i и j.
Предположим, у меня есть этот список с 16 наблюдениями:
test = [0, 1, 5, 5, 5, 6, 6, 7, 7, 8, 11, 12, 21, 23, 23, 24]
Я передаю его как массив numpy и вычисляю 85-й процентиль, используя линейную интерполяцию.
np_test = np.asarray(test)
np.percentile(np_test, 85, interpolation = 'linear')
В результате я получаю 22,5. Однако я не думаю, что это правильно. Индекс 85-го процентиля равен 0,85 * 16 = 13,6. Таким образом, дробная часть равна 0,6. 13-е значение равно 21, поэтому i = 21. 14-е значение равно 23, поэтому j = 23. Тогда линейная формула должна дать:
21 + (23 - 21) * .6 = 21 + 2 * .6 = 21 + 1.2 = 22.2
Правильный ответ: 22,2. Почему вместо этого я получаю 22,5?