使用 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]
我想使用 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]