来自scipy.stats.probplot的怪异行为

时间:2019-10-14 02:54:58

标签: python numpy scipy statistics data-science

在scipy的文档中,他们说:

用于理论分位数(概率图的水平轴)的公式为Filliben的估计值:

  

分位数= dist.ppf(val),对于0.5 **(1 / n),对于i = n

     

val =(i-0.3175)/(n + 0.365),对于i = 2,...,n-1

     

1-0.5 **(1 / n),对于i = 1

我在哪里 表示第i个有序值,n 是值的总数。

但是当我实际插入一些数字时,它给出的值与probplot函数计算出的值不同。例如:

np.random.seed(12)
n = np.random.randn(10) * 10
x, _ = stat.probplot(n, plot = plt)

-15.3472134是第二个值,所以我插入

(2-0.3175)/(10 + 0.365)并返回分位数0.162325(0到1之间的数字),而函数将其绘制为-0.98494667并标记x轴理论分位数。如何从实际分位数0.162325计算出-0.98494667“理论分位数”?

1 个答案:

答案 0 :(得分:0)

您为“ val”获得的值被视为概率。使用该概率,您将使用所需分布(在您的情况下为标准正态分布)的百分点函数(PPF)获得分位数。也可以从均匀分布中随机获得“ n”个概率,但是通过上述方法计算概率是一种方法。因此scipy.stats.norm.ppf(0.162325)=-0.98494667。

为简单起见,您可以将ppf视为cdf的倒数。

'cdf'-对于给定的x值,它返回该值以下的点数/质量的百分比。

'ppf'-对于给定的概率,它返回x值。类似于计算z得分。