2014-09-05 2 views
2

은 아마도 내가 잘 .ppf()의 기능을 이해하지 못하는,하지만 wikipedia에 따르면, ppf(q) 모든 실수를 통해 상하 한을 반환해야 x하는 q <= cdf(x)합니다. x의 경우 배포판의 cdf은 음수가 아니기 때문에 ppf(0)-inf을 반환 할 것으로 예상됩니다. 그러나 그것은 보이는대로PPF (0) (0, 2) -1.0

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

이 동작에 대한 어떤 생각입니까?

답변

2

정확합니다 - randint.ppf는주의하지 않는 방식으로 구현됩니다. 여기에 (scipy 0.9.0에서) scipy/통계/distributions.py에서 CDF 및 PPF에 대한 코드입니다 :

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) 

당신이 볼 수 있듯이이 경우 -1을 돌려줍니다 PPF에서 Q = 0. 또한 ppf (0.01) = 0 (-inf 여야 함) 및 ppf (0.51) = 1 (0이어야 함)에 유의하십시오.

이 ppf는 실제로 손상되었거나 엄격한 정의에 대한 고려없이 작성되었다고 말하는 것이 더 자선입니다. 사용 가능한 문서에 따르면 ppf는 "cdf의 역"이지만 cdf가 1 대 1이 아닌 경우에는 의미가 없습니다.

관련 문제