получить процентиль для оценки, используя математику apache

Я использую Apache Math DescriptiveStatistics, чтобы выполнить некоторые вычисления для ArrayList<double> с именем scores. Одно из значений в scores находится в отдельном значении double с именем myScore. Как использовать Apache Math, чтобы найти процентиль для myScore?

Вот моя первая попытка, но она настолько громоздка, что должен быть более простой способ:

int percentile = 0;
DescriptiveStatistics stats = new DescriptiveStatistics();
double[] values = getValues(scores, minval, maxval);
// Add the data from the array
for( int i = 0; i < values.length; i++) {
    stats.addValue(values[i]);
}
for(int j=0; j<101; j++){
    if(stats.getPercentile(j)>myScore && stats.getPercentile<myScore){
        percentile = j;
    }
}

person CodeMed    schedule 29.07.2015    source источник


Ответы (1)


Я не вижу специального метода для решения вашей проблемы, но ее можно решить в два этапа с помощью Arrays.binarySearch:

int pos = Arrays.binarySearch(stats.getSortedValues(), myScore);
double percentile = (pos < 0 ? -1 - pos : pos) * 100.0 / stats.getN();

Это должно быть более эффективным, чем ваше текущее решение.

person Tagir Valeev    schedule 30.07.2015
comment
Спасибо и +1 за правильный ответ. Однако мне пришлось добавить округление к вашему коду, чтобы не печатать лишнее количество цифр. - person CodeMed; 30.07.2015