Numpy: 重组百分位数方法

创建于 2018-03-12  ·  53评论  ·  资料来源: numpy/numpy

如Wikipedia页面所示: https: //en.wikipedia.org/wiki/Percentile#The_nearest -rank_method

00 - Bug 01 - Enhancement high

所有53条评论

我认为这已经存在? 使用维基百科示例:

>>> np.percentile(15, 20, 35, 40, 50], [5, 30, 40, 50, 100], interpolation='lower')
array([15, 20, 20, 35, 50])

它不是。 查看Wikipedia页面中的示例2:

>>> np.percentile([3, 6, 7, 8, 8, 10, 13, 15, 16, 20], [25,50,75,100], interpolation='lower')
array([ 7,  8, 13, 20])

何时应为[7,8,15,20]

同样在第三个示例中失败

最近的声音听起来像是“最近”? 尽管关于边界如何精确地工作始终存在另一点。
编辑:就是说,在数据点或数据点之前,确切的0和100被认为是哪里? (即IIRC,无论如何,这里有很多烦人的复杂性)

不想阅读它,我认为差异可能是C参数进一步降低,因此,如果知道这一点的某人想要添加此...。

坦率地说,我认为添加C参数可能确实不错。 但是大多数情况下,更好的文档会很不错,并且需要一个真正了解这些知识的人。

我不知道这是否与C参数有关,尽管我同意选择它的选项是可取的。

我发现了另一个偶然引起此问题的线程(2016年12月)。 Hyndman-Fan(H&F)在这份被普遍引用的”) ,它是最古老,研究最多的百分位数定义(这是我从中学到的统计课程)。 这是一个不连续的函数,因此我认为参数C在这里不适用(我可能错了)。

与numpy提供的其他选项相比,这看起来像是直观地似乎计算出类似的东西(即“ lower”,“ nearest”):

percentiles

在我看来,乍一看就像C参数一样,最接近的曲线比H&F曲线更伸展,这是预期的,因为numpy使用1,显然H&F使用0。

如果要证明。 用相同的值重复整个事情1000次,我想它们会收敛。
编辑:也许不是,没有耐心或时间来认真考虑它。 但是我仍然认为这是维基百科提到的C参数,所以请证明我错了:)

像这样的图将是对百分位数文档的极大补充

编辑:最好显示一个不连续的开放/封闭

读者注意:为了使此线程易于管理,我在下面将将图形添加到文档中的所有讨论都标记为“已解决”。 该图现在位于https://numpy.org/devdocs/reference/generated/numpy.percentile.html的底部

@ eric-wieser我不介意制作这张图。 我今天晚些时候会回来,是否应该在这里发布?

@seberg在这里我会老实说,我不知道如何根据C参数计算插值。 我认为这无关紧要的是,仅在线性插值部分(Wikipedia)中讨论了C参数,而Wikipedia和Hyndmand&Fan论文都在与插值部分不同的部分中讨论了我要求的算法。

我不知道是否有任何插值参数总是能提供与我感兴趣的算法相同的结果。

即使有,这应该是到达目的地的方式吗? 更改“奇怪”参数以获得最常见的百分位数定义似乎不是实现它的最佳方法。

也许是@ ricardoV94 ,但是无论它们有多糟糕,您都不能随便更改默认值。 我们可以公开类似method =“ H&K”之类的内容以一次覆盖两个参数。

在C参数中,相对于数据点(是否在数据点等)定义0%和100%。 作为Wikipedia上的参数C ,它很可能仅适用于插值,但是相同的问题会引起差异,我确定。 C当然是可疑的,专有名称可能像range ='min-max'或range ='extrapolated'之类的东西,或者可能完全不同。 如我所说,重做具有许多数据点的图(可能有很小的噪声),由于范围的定义变得不那么明显,您会看到它们收敛。

@seberg我很好用method =“ H&K”或method =“ classic”。 Interpolation =“ none”也可能有意义。

我不确定在文档中包含图片的机制是什么,或者是否有这样做的先例。

我知道您可以在文档中运行matplotlib代码,这是我们在其他地方执行的操作-这也确保了它保持与现实同步。

好的,在这种情况下,我会想到最佳的代码映像。

最具问题的部分是不连续的开放,封闭标记,因为matplotlib没有内置的功能(afaik)。 在这种情况下,对它们进行硬编码几乎没有意义。

也许现在就跳过那些。 如果matplotlib对它们有一些自动支持,那就太好了。

希望有人会有更好的建议,对于不连续性,这仍然很优雅。

import matplotlib.pyplot as plt

a = [0,1,2,3]
p = np.arange(101)

plt.step(p, np.percentile(a, p, interpolation='linear'), label='linear')
plt.step(p, np.percentile(a, p, interpolation='higher'), label='higher', linestyle='--')
plt.step(p, np.percentile(a, p, interpolation='lower'), label='lower', linestyle='--')
plt.step(p, np.percentile(a, p, interpolation='nearest'), label='nearest', linestyle='-.',)
plt.step(p, np.percentile(a, p, interpolation='midpoint'), label='midpoint', linestyle='-.',)

plt.title('Interpolation methods for list: ' + str(a))
plt.xlabel('Percentile')
plt.ylabel('List item returned')
plt.yticks(a)
plt.legend()

Image

我认为interpolation = 'linear'应该是一条常规的而不是阶梯状的线,但是看起来不错。 您可以将PR添加到文档中吗?

实际上, step通常会引起误导的伪影,因此我倾向于避免这种情况。 linspace(0, 100, 60)也会产生更准确的中间坐标

我不知道如何进行公关。

随时使用您的帐户进行操作,添加或讨论建议的更改。

我认为您可以使用以下内容更改C (在某些内容上进行测试)。 在您的百分位数上调用该函数,然后将其插入numpy版本(使用C = 1,这是一个空操作,除了现在纠正超出范围的百分位数):

def scale_percentiles(p, num, C=0):
     """
     p : float
          percentiles to be used (within 0 and 100 inclusive)
     num : int
         number of data points.
     C : float
         parameter C, should be 0, 0.5 or 1. Numpy uses 1, matlab 0.5, H&K is 0.
     """
     p = np.asarray(p)
     fact = (num-1.+2*C)/(num-1)
     p *= fact
     p -= 0.5 * (fact-1) * 100
     p[p < 0] = 0
     p[p > 100] = 100
     return p

瞧,通过“最近”,您将获得“ H&F”,而通过线性,您将从Wikipedia中获得情节。 (在我弄错了之前,但是我很确定自己做对了)。

正如我所说的,区别在于您将数据点相对于最后一个点从0到100(均匀)放置在哪里。 对于C = 1,您将min(data)设置为第0个百分位数,依此类推。我对“更有意义”一无所知,这可能与一般观点有关。 我猜这个名称包括1和排除0有点有意义(当您考虑百分位数的总范围时,因为可能的范围超出了数据范围)。 从这个意义上讲,C = 1/2也是排他的。

我将添加C参数,但如果可能的话,我希望有人提出一个描述性名称。 我也不会介意类似“方法”之类的方法来使最佳默认值显而易见(插值+ C的组合)。 或者,您从根本上决定大多数组合永远都不会使用并且没有用,那就好了...。

最后,我的问题是:我想让统计学家告诉我哪些方法具有共识(R有一些东西,但是上次有人来这里只是R doc或类似文档的副本,而没有将其设置为numpy上下文。所有这些,不用说,对普通观众来说是没有用的,因为引用论文会更有帮助。

我不想读H&F的论文(老实说,它看起来也不太光滑),但是我认为您也可以从支持的角度进行阅读。 numpy的“最近”(或任何其他)版本没有为每个数据点提供相同的支持(以百分位数表示),H&F对“最近的”具有相同的支持,并且不确定中点是否为C = 1/2。
我一直在重复自己,我不知道这样的支持参数(针对numpy这样的C = 1,例如numpy)是否是真正的原因。

编辑:中点在numpy中具有相等的支持(对于数据点之间的区域,而不是点本身),因此使用“ C = 1”

@seberg似乎不适合我。 您可以发布代码以显示其正常工作吗?

好吧,我在上面的代码中弄错了符号,所以它是相反的(C = 0,没有操作,而不是C = 1):

def scale_percentiles(p, num, C=0):
     """
     p : float
          percentiles to be used (within 0 and 100 inclusive)
     num : int
         number of data points.
     C : float
         parameter C, should be 0, 0.5 or 1. Numpy uses 1, matlab 0.5, H&F is 0.
     """
     p = np.asarray(p)
     fact = (num+1.-2*C)/(num-1)
     p *= fact
     p -= 0.5 * (fact-1) * 100
     p[p < 0] = 0
     p[p > 100] = 100
     return p
plt.figure()
plt.plot(np.percentile([0, 1, 2, 3], scale_percentiles(np.linspace(0, 100, 101), 5, C=0), interpolation='nearest'))
plt.plot(np.percentile([0, 1, 2, 3], scale_percentiles(np.linspace(0, 100, 101), 5, C=1), interpolation='nearest'))
plt.figure()
plt.plot(np.percentile([15, 20, 35, 40, 50], scale_percentiles(np.linspace(0, 100, 101), 5, C=1), interpolation='linear'))
plt.plot(np.percentile([15, 20, 35, 40, 50], scale_percentiles(np.linspace(0, 100, 101), 5, C=0.5), interpolation='linear'))
plt.plot(np.percentile([15, 20, 35, 40, 50], scale_percentiles(np.linspace(0, 100, 101), 5, C=0), interpolation='linear'))

@seberg关闭,但尚未结束。 对于a = [0,1,2,3]percentiles = [25, 50, 75, 100]np.percentile (a, scale_percentiles(percentiles, len(a), C=0), interpolation='nearest)返回[0, 2, 3, 3] ,而应返回[0,1,2,3]

我必须使列表的百分位数dtype=np.float否则您的函数将给出错误,但是我认为这不是问题。

经典方法的功能很简单:
百分号/ 100 * N->如果它是一个整数,则为索引;如果不是,则使用上限作为索引。

尽管如此,C参数似乎按预期方式工作,因此如果人们希望将其用于插值,则可以实现该参数。 我仍然希望方法=“经典”或插值=“无”可以用作维基百科。

对于调试,这是我的经典方法的难看的非numpy实现:

def percentile (arr, p):
    arr = sorted(arr)

    index = p /100 * len(arr)

    # If index is a whole number, and larger than zero, subtract one unit (due to 0-based indexing)
    if index%1 < 0.0001 and index//1 > 0:
        index -= 1

    return arr[int(index)]

还有一个更numpythonic的:

def indexes_classic(percentiles, set_size):
    percentiles = np.asarray(percentiles)

    indexes = percentiles / 100* set_size
    indexes[np.isclose(indexes%1, 0)] -= 1
    indexes = np.asarray(indexes, dtype=np.int)
    indexes[indexes < 0] = 0
    indexes[indexes > 100] = 100

    return indexes

这些差异听起来像是浮点/舍入问题(
似乎知道),也许我对C = 0的猜测是错误的,而您想要
C = 0.5。
我的意思是说差异的来源(“ C参数”
IMO,尽管有充分的理由不喜欢许多
组合)。 这不是给您/实施一个解决方法。

至于“古典”方法,坦率地说,我不太在乎什么
应该是。 就我所知,古典只是意味着“很多
人们使用它”。

解决方案方面,我的第一印象是“古典”之类的
名称,只是添加了另一个名称不清楚的选项。 我希望
这样的讨论可以朝着使所有
干净透明地为用户提供的良好(常见)选项
道路。 最好的方式是人们实际上可以理解的方式。

我们可以再添加一种方法,但是坦率地说,我只有一半喜欢它。 什么时候我们
最后添加了更多方法(我不记得发生了什么变化)
已经延迟了,希望有人跳起来找出来
我们应该拥有的。 不用说它从未真正发生过。 现在
我试图指出差异,并尝试看它如何适合
与我们目前拥有的。

因此,我的印象是(可能存在四舍五入和精确的问题
百分位数匹配)(可能有太多)“插值”选项
并且需要“ C参数”或您要调用的任何参数
几乎可以做任何事。
如果有人能告诉我所有
(常见的)“方法”属于这些类别,似乎
甚至存在C = 0,0.5,1,甚至在这些之外
选项...。

也许我走错了路,但是在“ Method1”后面加上了
不清楚的名字并不能真正告诉任何人它与
其他方法似乎对我没有帮助(除了
碰巧已经知道名称“ Method1”并正在寻找它。 和
请不要说“经典”是显而易见的一种,有
在实现方面存在太多差异。

另一种方法可能是弃用“插值”,但要有一个列表
的方法也比暗示“线性插值”好得多
说这不是一步的行为,等等。如果我们走那条路,
我仍然想要一个合理的概述。

您不必这样做,但是如果我们要添加新方法,则需要
添加它的方法,不会使所有人更加困惑,而且很清楚!

然后让我总结一下:

1)现在numpy仅提供一种有用的方法:插值='线性',而其他方法只是围绕它的微小变化,似乎并没有真正被任何人使用。 其他软件包具有更多相关选项。

2)对C = 0或C = 0.5加上其他值对我来说很有意义。 所有插值方法都可以与它们结合使用,尽管它们可能再也不会使用了。

3)如果插值方法和C参数之间的组合之一设法复制经典方法(参考文献和Wikipedia,并且我的个人经验认为这是最常用的方法),那么我对此感到满意。 可以在文档中指出,这种组合产生了经典的非插值方法。 我不确定这是否仅是由于浮点精度问题引起的,但感谢您为以更全面的方式解决它所做的努力!

4)如果没有一个连击取得相同的结果,那么我认为采用另一种方法是有意义的。 可能称为内插=“无”的混乱程度较小。

总而言之:numpy.percentile的当前选项似乎既令人困惑又受限制。 上面提到的论文很好地概述了其他有用的方法。 与Wikipedia页面一起,它们可以作为设计numpy.percentile的更详尽,更有用的选项集的起点。 希望有人愿意从事这项工作。

在某些情况下,当前的“最近”是否有意义? 如果间距方法(“ C”)或任何对线性插值/分数形式的东西产生如此大差异的方法,我可能只是感到惊讶,没有人曾经为非分数近似法这么做吗? 常量支持是否是如此重要,并且有理由为插值方法转储CDF逆参数?

组合是没有用的,除非它们是可以理解的并且通常很容易找到,所以我对此表示怀疑。 对于插值,似乎存在许多选项(例如,http://mathworld.wolfram.com/Quantile.html Q4至Q9,我认为R文档实际上是相同的,但我认为它可能不完整,例如matlab ...)我不知道它们是否真的有意义;)。

问题是“插值”点指向精确定义的点之间的操作,但是至少有许多(奇多)的方法可以将这些点放置在使用“线性插值”时,因此添加它似乎是一种不好的方法。 您想要一个听起来很(实际上是)内插=“ nearest”的“ nearest-rank”,但是确切的“绘图位置”选择似乎是“非标准”,因此将无法猜测,因此一个糟糕的选择。

然后,我什至宁愿积极地弃用所有东西(除了可能是线性的)。

但是,如果我们不赞成使用,我想100%正确,那可能需要对存在的东西,应该存在的东西和应该存在的东西有更多的了解。

我完全同意你的看法

@ ricardoV94 :对于在#9211提出的加权分位数情况下的linear的定义,您有任何意见吗? 那里有一些样式相同的图。

也许@ ricardoV94可以对此发表评论(这很酷),但是我认为这个问题很正交。 权重可能只是频率类型的权重,假设没有其他合理定义的百分比权重(我不知道如何),则在实现它们时不应有任何歧义,但我不确定。

您也可以尝试在该PR上ping josef-pkt,并希望他能快速发表评论,认为他认为这是个好主意/对。

如果有人想从这里拿走它,我写了一个非优化函数来计算
Hyndman和Fan(1996)描述并在R中使用的9个百分位数/分位数估计方法。

方法1对应于Wikipedia中讨论的“经典最近秩方法”。 方法7等效于当前的Numpy实现(插值='线性')。 不包括其余的Numpy插值方法(无论如何它们似乎都没有用)。

def percentile(x, p, method=7):
    '''
    Compute the qth percentile of the data.

    Returns the qth percentile(s) of the array elements.

    Parameters
    ----------
    x : array_like
        Input array or object that can be converted to an array.
    p : float in range of [0,100] (or sequence of floats)
        Percentile to compute, which must be between 0 and 100 inclusive.
    method : integer in range of [1,9]
        This optional parameter specifies one of the nine sampling methods 
        discussed in Hyndman and Fan (1996). 

        Methods 1 to 3 are discontinuous:
        * Method 1: Inverse of empirical distribution function (oldest
        and most studied method).
        * Method 2: Similar to type 1 but with averaging at discontinuities.
        * Method 3: SAS definition: nearest even order statistic.

        Methods 4 to 9 are continuous and equivalent to a linear interpolation 
        between the points (pk,xk) where xk is the kth order statistic. 
        Specific expressions for pk are given below:
        * Method 4: pk=kn. Linear interpolation of the empirical cdf.
        * Method 5: pk=(k−0.5)/n. Piecewise linear function where the knots 
        are the values midway through the steps of the empirical cdf 
        (Popular amongst hydrologists, used by Mathematica?).
        * Method 6: pk=k/(n+1), thus pk=E[F(xk)]. The sample space is divided
        in n+1 regions, each with probability of 1/(n+1) on average
        (Used by Minitab and SPSS).
        * Method 7: pk=(k−1)/(n−1), thus pk=mode[F(xk)]. The sample space
        is divided into n-1 regions (This is the default method of 
        Numpy, R, S, and MS Excell).
        * Method 8: pk=(k−1/3)/(n+1/3), thus pk≈median[F(xk)]. The resulting
        estimates are approximately median-unbiased regardless of the
        distribution of x (Recommended by Hyndman and Fan (1996)).
        * Method 9: k=(k−3/8)/(n+1/4), thus pk≈F[E(xk)]if x is normal (?).
        The resulting estimates are approximately unbiased for the expected 
        order statistics if x is normally distributed (Used for normal QQ plots).

        References:
        Hyndman, R. J. and Fan, Y. (1996) Sample quantiles in statistical packages, 
        American Statistician 50, 361--365.
        Schoonjans, F., De Bacquer, D., & Schmid, P. (2011). Estimation of population
        percentiles. Epidemiology (Cambridge, Mass.), 22(5), 750.

        '''

    method = method-1    
    x = np.asarray(x)
    x.sort()
    p = np.array(p)/100

    n = x.size  
    m = [0, 0, -0.5, 0, 0.5, p, 1-p, (p+1)/3, p/4+3/8][method]

    npm = n*p+m
    j = np.floor(npm).astype(np.int)
    g = npm-j

    # Discontinuous functions
    if method < 3:
        yg0 = [0, 0.5, 0][method]
        y = np.ones(p.size)
        if method < 2:
            y[g==0] = yg0
        else:
            y[(g==0) & (j%2 == 0)] = yg0      
    # Continuous functions
    else:
        y = g

    # Adjust indexes to work with Python
    j_ = j.copy()
    j[j<=0] = 1
    j[j > n] = n
    j_[j_ < 0] = 0
    j_[j_ >= n] = n-1 

    return (1-y)* x[j-1] + y*x[j_]

这样,连续方法也可以更有效地实现。

def percentile_continuous(x, p, method=7):
    '''
    Compute the qth percentile of the data.

    Returns the qth percentile(s) of the array elements.

    Parameters
    ----------
    x : array_like
        Input array or object that can be converted to an array.
    p : float in range of [0,100] (or sequence of floats)
        Percentile to compute, which must be between 0 and 100 inclusive.
    method : integer in range of [4,9]
        This optional parameter specifies one of the 5 continuous sampling
        methods discussed in Hyndman and Fan (1996). 
        '''

    x = np.asarray(x)
    x.sort()
    p = np.asarray(p)/100
    n = x.size

    if method == 4:
        r = p * n
    elif method == 5:
        r = p * n + .5
    elif method == 6:
        r = p * (n+1)
    elif method == 7:
        r = p * (n-1) + 1
    elif method == 8:
        r = p * (n+1/3) + 1/3
    elif method == 9:
        r = p * (n+1/4) + 3/8

    index = np.floor(r).astype(np.int)

    # Adjust indexes to work with Python
    index_ = index.copy()
    index[index_ <= 0] = 1
    index[index_  > n] = n
    index_[index_ < 0] = 0
    index_[index_ >= n] = n-1

    i = x[index - 1]
    j = x[index_]

    return i + r%1* (j-i)

有人要从这里拿走吗? 我没有资格这样做。

如前一篇文章所述,似乎numpy当前的分位数默认实现与R实现相匹配。

R

> quantile(c(15, 20, 35, 40, 50), probs=c(0.05, 0.3, 0.4, 0.5, 1))
  5%  30%  40%  50% 100% 
  16   23   29   35   50 
> quantile(c(3, 6, 7, 8, 8, 10, 13, 15, 16, 20), probs=c(0.25, 0.5, 0.75, 1))
  25%   50%   75%  100% 
 7.25  9.00 14.50 20.00
> quantile(c(3, 6, 7, 8, 8, 9, 10, 13, 15, 16, 20), probs=c(0.25, 0.5, 0.75, 1))
 25%  50%  75% 100% 
 7.5  9.0 14.0 20.0 

np.quantile

>>> np.quantile([15, 20, 35, 40, 50], q=[0.05, 0.3, 0.4, 0.5, 1])
array([16., 23., 29., 35., 50.])
>>> np.quantile([3, 6, 7, 8, 8, 10, 13, 15, 16, 20], q=[0.25, 0.5, 0.75, 1])
array([ 7.25,  9.  , 14.5 , 20.  ])
>>> np.quantile([3, 6, 7, 8, 8, 9, 10, 13, 15, 16, 20], q=[0.25, 0.5, 0.75, 1])
array([ 7.5,  9. , 14. , 20. ])

哪些当然不能重现Wikipedia中给出的示例:
https://zh.wikipedia.org/wiki/百分位数

实际上,如果您转到R帮助页面以获取分位数https://www.rdocumentation.org/packages/stats/versions/3.5.0/topics/quantile
您会看到R默认方法(类型7)设置的边界条件与np.quantile设置相同: p_k = (k-1) / (n-1) ,其中n是样本大小,k = 1表示最小值,而k = n最大。 这意味着排序数组中的最小值固定在分位数= 0,最大值固定在分位数= 1。

同样如前一篇文章中所述,您可以在Wikipedia中使用类型1复制3个示例:

> quantile(c(15, 20, 35, 40, 50), probs=c(0.05, 0.3, 0.4, 0.5, 1), type=1)
  5%  30%  40%  50% 100% 
  15   20   20   35   50 
> quantile(c(3, 6, 7, 8, 8, 10, 13, 15, 16, 20), probs=c(0.25, 0.5, 0.75, 1), type=1)
 25%  50%  75% 100% 
   7    8   15   20 
> quantile(c(3, 6, 7, 8, 8, 9, 10, 13, 15, 16, 20), probs=c(0.25, 0.5, 0.75, 1), type=1)
 25%  50%  75% 100% 
   7    9   15   20 

这就提出了一些有趣的问题:

1.)np.quantile的默认值是否应该跟踪R.quantile的默认值?
2.)np.quantile是否应该切换到Type 1算法?

由于甚至Wikipedia本身也没有百分位的标准定义,因此我认为,只要算法合理且用户知道其工作原理,(1)或(2)都不会那么重要。 我更赞成(1),因为Python和R是目前最流行的两个数据分析平台,如果他们可以互相审查,那将是很好的。 鉴于此,我认为(2)是不必要的。

是的,R和Numpy都默认使用方法7,因此应保持这种状态。 问题是关于是否添加其他方法。

如果有人感兴趣,我提出了一个独立的模块与9点百分点的方法,在这里。 如果您知道怎么做,请随时使用它或适应Numpy。

谢谢@ ricardoV94

因此,我只是为了踢球而对R用户进行了一项民意调查。 在回应的20个人中,有20个人仅使用quantile的默认方法。 从公共卫生的硕士生到统计学的博士学位研究人员不等。

就个人而言,我不确定numpy支持9种不同的分位数计算方法是否值得。 我认为大多数用户只会使用默认值。

值得一试的是scipy.stats.mstats.mquantiles函数,该函数支持9种方法中的6种(连续方法),并且doc非常明确地声明了与R实现的链接。

@albertcthomas啊,很高兴知道。 虽然,我认为理想情况下我们会将这种复杂性隐藏在numpy中。 而且,我们最需要修复非连续版本的IIRC。 因为那些基本上不提供最常见的方法。

是的,的确,如果在scipy stats模块中实现了这些方法,numpy不一定必须支持这些方法。

就个人而言,我将支持采用一种根据累积分布函数的广义逆来计算分位数的方法。 这种方法不可用的事实导致我遇到了这个问题:)。

@albertcthomas如果您

最重要的是,我们需要一些良好的默认设置。 这可能意味着要实现2-3种方法(彻底修改不连续的方法)。 我可以支持更多或更多复杂的东西,但是如果我们能决定一些“典型/好”的东西,我会很乐意。

我会说线性方法(当前默认设置)和累积分布函数的反函数(当我创建此Issue时,我一直在寻找它,如果我理解正确的话,它也是@albertcthomas )就足够了。 基本上,它允许人们选择是否要插值。

而且,当前实施的其他替代方案一定要删除。

绝对应添加累积分布函数的反函数。 它是从统计中给定的观察样本中对分位数进行最受欢迎的估计之一。

而且,当前实施的其他替代方案一定要删除。

@ ricardoV94的意思是说这是因为Wikipedia或Hyndman和Fan的论文都未提及任何替代方案?

是的,afaik它们没有在任何其他软件包中实现。

我不明白为什么有人会想使用这些方法,他们的名字是
也可能引起误解。

阿尔伯特·托马斯[email protected] escreveu no dia quarta,2/01/2019
à(s)14:18:

目前实施的其他替代方案肯定是
删除。

@ ricardoV94 https://github.com/ricardoV94之所以这么说是因为
维基百科,Hyndman和
范文?

-
您收到此邮件是因为有人提到您。
直接回复此电子邮件,在GitHub上查看
https://github.com/numpy/numpy/issues/10736#issuecomment-450861068或静音
线程
https://github.com/notifications/unsubscribe-auth/AbpAmfUoJNk3YHOSHNeVN03Va5wtvkHQks5u_LGugaJpZM4SnVpE

谢谢! 为什么不打开PR来添加累积分布的倒数作为np.percentile中可用的方法? 如果我们要继续讨论替代方案(当前的默认值应保留默认值),则同时保持此问题为开。 numpy中如何处理弃用?

此处提供了更多信息-Python 3.8添加了statistics.quantiles -我们应该考虑在np.quantile添加等效模式

前进的方法可能是添加一个method kwarg镜像statistics一个,并可能再增加0-2个(在这种情况下,最好在python上ping原始作者) 。

我不确定默认值是否与我们之间的默认值相匹配,如果默认值不匹配,这将是一个耻辱,但这似乎仍然是最好的主意(无论如何我们几乎都想到了)。 也可以添加0-2个新的“方法”。 在这种情况下,最好对python统计人员的实际名称执行ping操作。

公关非常欢迎,我希望这能向前发展,但在不久的将来我不会这样做。

@ eric-wieser我注意到您有几个相关的PR,它们中的任何一个都可以处理吗?

我将其推至1.19,所以它不是一个障碍。 但这并不意味着它无法针对1.18进行固定:)

@charris :您要考虑哪些PR?

不幸的是,我认为这个方向还没有。

此页面是否有帮助?
0 / 5 - 0 等级