Python SciPy Stats - PullRequest
       13

Python SciPy Stats

3 голосов
/ 15 ноября 2011

Рассмотрим следующий код Python:

In [1]: import numpy as np
In [2]: import scipy.stats as stats
In [3]: ar = np.array([0.8389, 0.5176, 0.1867, 0.1953, 0.4153, 0.6036, 0.2497, 0.5188, 0.4723, 0.3963])
In [4]: x = ar[-1]
In [5]: stats.percentileofscore(ar, x, kind='strict')
Out[5]: 30.0
In [6]: stats.percentileofscore(ar, x, kind='rank')
Out[6]: 40.0
In [7]: stats.percentileofscore(ar, x, kind='weak')
Out[7]: 40.0
In [8]: stats.percentileofscore(ar, x, kind='mean')
Out[8]: 35.0

Аргумент kind представляет интерпретацию полученного результата.

Теперь, когда я использую функцию PERCENTRANK в Excel с теми же данными, я получаю 0.3333. Это кажется правильным, поскольку есть 3 значения меньше, чем х = 0,3963.

Может кто-нибудь объяснить, почему я получаю противоречивые результаты?

Ответы [ 2 ]

1 голос
/ 16 ноября 2011

Когда я переписал эту функцию в scipy.stats, я нашел много разных определений, некоторые из них включены.

Основной пример - когда я хочу оценивать студентов по баллам. В этом случае оценка включает в себя всех студентов, а процентиль баллов дает ранг среди всех студентов. Главное отличие в том, как обращаться со связями.

Excel, похоже, использует то, как вы оценили бы ученика относительно существующей шкалы, например, каков балл по исторической шкале GRE. Я понятия не имею, отбрасывает ли Excel одну запись, если оценка отсутствует в существующем списке.

Аналогичная проблема в статистике - это «построение позиций» для квантилей. Я не нахожу хорошую ссылку в Интернете. Вот одна общая формула http://amsglossary.allenpress.com/glossary/search?id=plotting-position1 В Википедии только короткий абзац: http://en.wikipedia.org/wiki/Q-Q_plot#Plotting_positions

В литературе имеется большое количество случаев различного выбора b (или даже выбора второго параметра a), которые соответствуют различным приближениям для разных распределений. Некоторые из них реализованы в scipy.stats.mstats.

Я не думаю, что это вопрос, который является правильным. Это то, что вы хотите использовать для этого? И каково общее определение вашей проблемы или вашей области?

1 голос
/ 15 ноября 2011

Это странно, поскольку, насколько я могу судить, они делают разные вычисления, Сципи будет воспроизводить результат Excel, если его так назвать.

In [1]: import numpy as np
In [2]: In [2]: import scipy.stats as stats
In [3]: In [3]: ar = np.array([0.8389, 0.5176, 0.1867, 0.1953, 0.4153, 0.6036, 0.2497, 0.5188, 0.4723, 0.3963])
In [4]: In [4]: x = ar[-1]
In [5]: stats.percentileofscore(ar[:-1], x, kind='mean')
Out[5]: 33.333333333333336

, используя любое из ключевых слов, которые я получаю одинаковоответ.Это исключает значение в данных, которое точно равно запросу.Взгляните на этот алгоритм PercentRank в VBA , так как он может иметь немного понимания.

Так что же правильно?Excel или Scipy?

...