Как получить процентиль для эмпирического распределения данных и получить его X-координату?
У меня есть некоторые дискретные значения данных, которые вместе взятые образуют своего рода распределение. Это один из них, но они отличаются от пика во всех возможных местах, от 0 до конца.
Итак, я хочу использовать его квантили (процентили) в Python. Я думаю, что мог бы написать какую-то функцию, которая бы поднимала все значения, начиная с нуля, до тех пор, пока не достигнет желаемого процента. Но, возможно, есть лучшее решение? Например, чтобы создать эмпирическое распределение в SciPy, а затем использовать методы расчета процентилей в SciPy?
В самом конце мне нужны x-координаты левого процентиля и правого процентиля. Можно использовать 20% и 80% процентили в качестве примера, мне нужно будет найти лучшие числа для моего случая позже.
Заранее спасибо!
РЕДАКТИРОВАТЬ: пример кода почти для того, что я хочу.
import numpy as np
np.random.seed(0)
distribution = np.random.normal(0, 1, 1000)
left, right = np.percentile(distribution, [20, 80])
print left, right
Это возвращает сами процентили, мне нужно как-то получить их x-координаты. Очевидно, что для нормального распределения это возможно, но у меня есть распределение неизвестной формы, поэтому, если процентиль не равен одному из значений (что является наиболее распространенной вещью, очевидно), это становится намного сложнее.
2 ответа
Если вы ищете эмпирический CDF, то вы можете использовать statsmodels ECDF. Для процентилей / квантилей вы можете использовать процентиль
Хорошо, сейчас я написал следующую функцию и теперь использую ее:
def percentile(distribution, percent):
percent = 1.0*percent/100
cum_percent = 0
i=0
while cum_percent <= percent:
cum_percent = cum_percent + distribution[i]
i = i+1
return i
Это немного грубо, потому что возвращает индекс наиболее близкого значения слева от требуемого значения. Для моих целей это временное решение, но я бы хотел увидеть рабочее решение для точного определения процентили по оси X.