使用 st.gumbel_r.ppf() 时的不同结果

Different results when using the st.gumbel_r.ppf()

我想使用 st.gumbel_r.ppf() 计算给定概率的值。我正在将它与分析解决方案进行比较,它给了我完全不同的结果,有人知道为什么吗? 我使用方法

的时刻获得了比例和位置的值
P_class = [0.14285714, 0.28571429, 0.42857143, 0.57142857, 0.71428571, 0.85714286, 0.999999]

u = 8.590342451210152
alpha = 0.1841827435642898

h_class1 = st.gumbel_r.ppf(P_class, scale = u, loc = alpha)
h_class = u-np.log(-np.log(P_class))/alpha

Results
h_class1 = [ -5.53466431,  -1.7516637 ,   1.6076281 ,   5.17091797, 9.54112426,  16.24661736, 118.86414528]
h_class = [4.97583548,  7.36682128,  9.49000861, 11.74212971, 14.50424958, 18.74235061, 83.60013865]

我想在使用 scipy 函数时获得相同的 h_class 结果

根据您的比例位置值,您定义的右偏 Gumpel 分布是

dist = sps.gumbel_r(loc=alpha, scale=u)
x = np.linspace(dist.ppf(.0001), dist.ppf(.99999), 1000)
pdf = dist.pdf(x)
cdf = dist.cdf(x)
fig, ax = plt.subplots(1, 2, figsize=(12, 4))
ax[0].plot(x, pdf)
ax[0].set_title('PDF')
ax[1].plot(x, cdf)
ax[1].set_title('CDF')
for p in P_class:
    ax[1].axhline(p, color='r', ls='--', lw=1)
    ax[1].axvline(dist.ppf(p), color='k', ls=':', lw=1)
    print('CDF:', p, 'X:', dist.ppf(p))
plt.show()

使用 ppf(百分比函数),您在累积密度函数 (CDF)

的值 p 处评估 x 的值

CDF: 0.14285714 X: -5.534664397573627
CDF: 0.28571429 X: -1.7516635973033354
CDF: 0.42857143 X: 1.6076281292815586
CDF: 0.57142857 X: 5.170917935306729
CDF: 0.71428571 X: 9.541124106213145
CDF: 0.85714286 X: 16.246617550548397
CDF: 0.999999 X: 118.86414527936681

所以,也许是您获取的比例位置有误,或者您搜索的内容不同。

您混淆了比例和位置参数,h_class 的正确表达式如下。

import scipy.stats as st
P_class = [0.14285714, 0.28571429, 0.42857143, 0.57142857, 0.71428571, 0.85714286, 0.999999]

u = 8.590342451210152
alpha = 0.1841827435642898

h_class1 = st.gumbel_r.ppf(P_class, scale = u, loc = alpha)
h_class = alpha-np.log(-np.log(P_class))*u
print(h_class1)
print(h_class)

你得到了完美的匹配

[ -5.5346644   -1.7516636    1.60762813   5.17091794   9.54112411
  16.24661755 118.86414528]
[ -5.5346644   -1.7516636    1.60762813   5.17091794   9.54112411
  16.24661755 118.86414528]