Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
pythonscipystats percentilofscore_Python_Numpy_Scipy_Percentile - Fatal编程技术网

pythonscipystats percentilofscore

pythonscipystats percentilofscore,python,numpy,scipy,percentile,Python,Numpy,Scipy,Percentile,考虑以下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='stric

考虑以下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


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

这是一个奇怪的结果,我几乎可以看出他们在做不同的计算,如果这样调用,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
使用任何一种关键字,我都能得到相同的答案。这将忽略数据中与查询完全相等的值。看看这个,因为它可能有一点洞察力


那么哪一个是正确的呢?Excel或Scipy?

当我在Scipy.stats中重写此函数时,我发现了许多不同的定义,其中一些包括在内

最基本的例子是当我想给学生打分时。在这种情况下,分数包括所有学生,百分位数给出所有学生的排名。那么主要的区别就是如何处理关系

Excel似乎使用了相对于现有量表对学生进行排名的方式,例如,历史GRE量表上的分数排名是多少。如果分数不在现有列表中,我不知道excel是否会删除一个条目

统计学中的一个类似问题是分位数的“标绘位置”。我在网上找不到好的参考资料。这里有一个通用公式 维基百科只有一小段:

文献中有大量不同选择b(甚至选择第二个参数a)的情况,对应于不同分布的不同近似。其中几个在scipy.stats.mstats中实现


我认为这不是一个哪个是对的问题。你想用它做什么?您的问题或字段的常见定义是什么?

对于长度为10的输入数组,我认为1/3不是一个合理的结果。(请注意,[6]中的
可能使用了
kind='rank'
。我不认为您使用相同的参数得到了两个不同的结果。)您是对的,我在[6]
中的
中使用了
kind='rank'
。复制/粘贴错误。我编辑了这篇文章。正如我之前所说的:我认为你显示的所有结果都和预期的一样,但是Excel的结果很奇怪。因为我不知道您在Excel中做了什么,所以我无法对奇怪的结果发表评论。我在A列中输入了
0.8389、0.5176、0.1867、0.1953、0.4153、0.6036、0.2497、0.5188、0.4723、0.3963
,因此0.8389位于A1到A10中的0.3963之间。然后我做了=PERCENTRANK(A1:A10,A10),返回0.3333。Scipy似乎有
(X以上值的数量)/(总值)
,在这种情况下是
3/10=0.3
,而Excel有
(X以上值的数量)/(总值-1)
,在这种情况下是
3/9=0.3333
。是我,还是第一个示例不正确?如果不计算值,则应为2/3,如果计算值,则应为1/2。如果我误解了我在金融应用程序中使用的代码,请纠正我。基本上,我是在构建指标,并采用用户定义窗口的百分位数。然后,指示器显示买入或卖出。有趣的是,我试图在VBA中复制代码,所以不幸的是,由于scipy和Excel之间的差异,单元测试失败了。当进行回溯测试时,随着时间的推移,这些差异会在损益表中产生巨大的差异。这是一个很好的观点,这不是一个正确的问题,但scipy中提供了四种方法。他们都没有复制Excel的算法?我一直在寻找Excel的行为(我没有),但看起来他们也改变了他们的行为。可以从头开始编写兼容函数,但除了针对VBA进行基准测试外,我不确定这是否有意义。同意。我认为这只是与客户合作的问题,以便他们了解差异。