2017-01-18 19 views
0

Прежде всего позвольте мне сказать, что я новичок в мире python, который я отношусь к статистике. Поэтому я заранее извиняюсь, если мой вопрос кажется тривиальным или даже неточным. Я сделаю все возможное, чтобы выразить себя правильно.Фильтрация данных в Python затем вычисляет значение, которое меньше заданной доли элементов.

У меня есть эмпирический набор данных для непрерывной переменной. Я нашел удобный фрагмент кода (Data Fitting - El Nino example by @tmthydvnprt), который подходит для моего набора данных с различными типами распределения и возвращает лучший (наименьшая сумма квадратной ошибки между гистограммой распределения и гистограммой данных).

Теперь мне нужно вычислить значение, которое меньше 60% элементов данных. Другими словами, если у меня есть вектор набора данных:

DataSet = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

Я хочу, чтобы ответить на вопрос: что такое value, для которых 60% элементов равны или больше?

value = 5 as there are 6/10 values that are equal or greater than 5. 

В качестве функции распределения, которая возвращает код может быть не нормально, я думаю, что определение стандартного отклонения и среднего реально не применяется здесь. Итак, как мне обрабатывать «случайную» функцию распределения вероятности, чтобы найти значение, которое я ищу? Должен ли я его нормализовать или использовать медианные и квартили? Или...?

ответ

2

Похоже, вы просто вычисляете процентили, но с твист. Percentiles обеспечивают отсечение значения, при котором X% населения падает ниже этого значения. Поэтому, если вы хотите узнать значение, меньшее, чем X% населения, вы просто найдете процентиль (100% - X%). В вашем случае вы находите 40% процентиля, с интерполяцией, установленной на «выше», чтобы вы не получали значение между двумя точками данных. Однако, если вы хотите точное обрезание, вы можете игнорировать этот аргумент.

Я хотел бы использовать numpy.percentile для расчета:

import numpy as np 
a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) 
p = np.percentile(a, 40, interpolation="higher") 
p_exact = np.percentile(a, 40) 
print p # prints out 5 
print p_exact # prints out 4.6