从 Python scipy.stats ppf 函数获取多个值
Getting multiple values from Python scipy.stats ppf function
对于我的数据集,我可以使用 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
,另外两个用于 a
和 b
).
对于我的数据集,我可以使用 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
,另外两个用于 a
和 b
).