对于我的数据集,我可以使用scipy.stats函数拟合最佳分布。例如,最佳分布是:

In[94]: best_dist
Out[94]: <scipy.stats._continuous_distns.chi_gen at 0x119649cd0>

In[95]: best_fit_params
Out[95]:
(0.40982879700171049,
 0.10387428783818109,
 -4.5566762564110859e-19,
 0.89837054605455657)


现在,我尝试使用ppf函数获取与CDF曲线的95%面积相对应的值。这使:

In[96]: best_dist.ppf(0.95,best_fit_params)
Out[96]: array([ 1.44854045,  0.74815691, nan,  1.89330302])


我无法理解为什么仅期望一个值时会返回长度为4的数组?如果我的答案是其中之一,那是那个?

最佳答案

正确的用法是打开best_fit_param的包装:

In [1]: param = (0.40982879700171049,
   ...:  0.10387428783818109,
   ...:  -4.5566762564110859e-19,
   ...:  0.89837054605455657)

In [2]: from scipy.stats import beta

In [3]: beta.ppf(0.95, *param)     # notice the asterisk
Out[3]: 0.89837054605311872


说明:beta.shapes"a, b",因此beta.ppf的签名实际上是ppf(self, q, a, b, loc=0, scale=1)。您的best_fit_param是四个值的元组,分别代表a,b,loc和scale。

但是,我不确定您的In[96]。我认为,在任何最近使用scipy的合理安装中,调用带有两个参数的ppf应该都会出错(因为它至少需要三个:一个用于q,另外两个用于ab)。

关于python - 从Python scipy.stats ppf函数获取多个值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43148697/

10-16 17:57