R
ppoints 功能描述为:
Ordinates for Probability Plotting
Description:
Generates the sequence of probability points ‘(1:m - a)/(m +
(1-a)-a)’ where ‘m’ is either ‘n’, if ‘length(n)==1’, or
‘length(n)’.
Usage:
ppoints(n, a = ifelse(n <= 10, 3/8, 1/2))
...
我一直试图在python
中复制这个功能,我有几个疑问。
1- m
中的第一个(1:m - a)/(m + (1-a)-a)
始终为整数:int(n)
(即:n
的整数)if {{ 1}}和length(n)==1
否则。
2-如果length(n)
(它假定m
的实际值)并且 IS 一个整数(length(n)==1
)否则。
3-如果n
和整数 {length(n)
,n
中的a = ifelse(n <= 10, 3/8, 1/2)
是真实数字n
{1}}否则。
这些要点在说明中根本没有说清楚,如果有人能确认是这种情况我会非常感激。
这最初发布在https://stats.stackexchange.com/,因为我希望得到使用length(n)==1
函数的静态输入。由于它已在此处迁移,因此我将在我写入的函数下方粘贴以复制length(n)
中的ppoints
。我已经对它进行了测试,两者似乎都给出了相同的结果,但如果有人能够澄清上面提到的观点,我会很高兴,因为它们的功能描述并没有明确说明。
ppoints
答案 0 :(得分:4)
我会用numpy实现这个:
import numpy as np
def ppoints(n, a):
""" numpy analogue or `R`'s `ppoints` function
see details at http://stat.ethz.ch/R-manual/R-patched/library/stats/html/ppoints.html
:param n: array type or number"""
try:
n = np.float(len(n))
except TypeError:
n = np.float(n)
return (np.arange(n) + 1 - a)/(n + 1 - 2*a)
示例输出:
>>> ppoints(5, 1./2)
array([ 0.1, 0.3, 0.5, 0.7, 0.9])
>>> ppoints(5, 1./4)
array([ 0.13636364, 0.31818182, 0.5 , 0.68181818, 0.86363636])
>>> n = 10
>>> a = 3./8. if n <= 10 else 1./2
>>> ppoints(n, a)
array([ 0.06097561, 0.15853659, 0.25609756, 0.35365854, 0.45121951,
0.54878049, 0.64634146, 0.74390244, 0.84146341, 0.93902439])
可以使用R fiddle来测试实现。