2014-09-05 33 views
2

也許我不明白的.ppf()功能良好,但根據wikipediappf(q)應該在所有實數返回下确界x爲其q <= cdf(x)。由於每xcdf的任何分佈是非負的,我期望ppf(0)返回-inf。但是,因爲它似乎PPF(0)SciPy的的randint的(0,2)爲-1.0

scipy.stats.randint(0, 2).ppf(0) ## returns -1.0 ..? 

有關此行爲的原因的任何想法?

回答

2

你是對的 - randint.ppf以不太認真的方式實現。下面是在SciPy的/統計/ distributions.py CDF和人民警察的代碼(從SciPy的0.9.0):

def _cdf(self, x, min, max): 
    k = floor(x) 
    return (k-min+1)*1.0/(max-min) 
def _ppf(self, q, min, max): 
    vals = ceil(q*(max-min)+min)-1 
    vals1 = (vals-1).clip(min, max) 
    temp = self._cdf(vals1, min, max) 
    return where(temp >= q, vals1, vals) 

正如你所看到的,q = 0時,將返回-1從PPF。還要注意ppf(0.01)= 0(應該是-inf)和ppf(0.51)= 1(應該是0)。

這個ppf真的被打破了 - 或者說它是沒有任何嚴格定義的考慮而寫出來的,可能更爲慈善。可用的文檔說ppf是「cdf的逆」,但當cdf不是1對1時,這當然是沒有意義的。