3

考虑以下 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参数表示对结果分数的解释。

现在,当我对相同数据使用 Excel 的 PERCENTRANK 函数时,我得到 0.3333。这似乎是正确的,因为有 3 个值小于 x=0.3963。

有人可以解释为什么我得到不一致的结果吗?

4

2 回答 2

1

这是一个奇怪的问题,据我所知,他们正在做不同的计算,如果以这种方式调用,Scipy 将重现 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

使用任何一种关键字我都会得到相同的答案。这忽略了数据中与查询完全相等的值。看看VBA 中的这个 PercentRank 算法,因为它可能有一些洞察力。

那么哪个是对的?Excel 还是 Scipy?

于 2011-11-15T18:47:21.520 回答
1

当我在 scipy.stats 中重写这个函数时,我发现了许多不同的定义,其中一些包含在内。

基本示例是当我想按分数对学生进行排名时。在这种情况下,分数包括所有学生,而 percentileofscore 给出了所有学生的排名。主要区别在于如何处理关系。

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 中实现。

我不认为这是一个正确的问题。就是,你想用它做什么?您的问题或领域的通用定义是什么?

于 2011-11-16T00:31:06.673 回答