如何解决威尔逊区间的逆 CDF 变换
请问如何在 Python 中获得 Wilson 区间的逆 CDF 变换?
scipy.stats可以做skew正态分布的逆CDF变换:
skewnorm.ppf
而rpy2可以得到威尔逊区间,例如:
import numpy as np
import pandas as pd
import rpy2.robjects as ro
from rpy2.robjects.packages import importr
import matplotlib.pyplot as plt
package_name = "DescTools"
try:
pkg = importr(package_name)
except:
ro.r(f'install.packages("{package_name}")')
pkg = importr(package_name)
pkg
print('vary the CL')
CLs = (0,.6,.7,.8,.9,.95,.96,.97,.98,.99,.995,(1-1e-3),(1-1e-10))
CI = {}
LB00 = []
UB00 = []
for CL in CLs:
r_string = """CI = MultinomCI(c(11,6,11),conf.level=CL,method="wilson")
""".replace('CL',str(CL))
ro.r(r_string)
CI[CL] = np.array(ro.r['CI'])
# Bounds
LB00.append(CI[CL][:,1][3])
UB00.append(CI[CL][:,2][3])
print('Plot')
df_G00 = pd.DataFrame({'CLs' : CLs,'LB00' : LB00,'UB00' : UB00})
fig,ax1 = plt.subplots(1,1)
df_G00.plot(x='LB00',y='CLs',legend=False,ax=ax1,linewidth=5,color='k',linestyle='-')
df_G00.plot(x='UB00',linestyle='-')
for item in ([ax1.title,ax1.xaxis.label,ax1.yaxis.label] +
ax1.get_xticklabels() + ax1.get_yticklabels()):
item.set_fontsize(22)
#legend = ax1.legend(loc=0,ncol=1,bBox_to_anchor=(0.9,-.3,1,1),# fancybox=True,shadow=False,# framealpha=1,fontsize=22) #,title='percentile'
#plt.setp(legend.get_title(),fontsize=22)
plt.xlabel('$x$')
plt.ylabel('$CL$')
plt.grid(b=True,which='major',color='b')
plt.grid(b=True,which='minor',color='b')
plt.xlim([0,1])
plt.ylim([0,1])
fig = plt.gcf()
fig.set_size_inches(4,4)
plt.show()
plt.clf()
对 x 的置信度 (CL)
x 是下一次测试 A 和测试 B 都不起作用的概率:
• 在 11 个案例中,案例 A 和案例 B 都有效。
• 在 6 种情况下,测试 A 无效,但测试 B 有效。
• 在任何情况下,测试 A 都有效但测试 B 无效。
• 在 11 个案例中,测试 A 和测试 B 都不起作用。
逆 CDF 变换,也称为分位数函数或百分比函数,指定随机变量 x 的值,使得变量小于或等于该值的概率等于概率 u。 u=0.5 是中位数,我们可以从图中看出,对于 u=0.5,逆 CDF 变换将返回例如 x=0.4。
我怎样才能在 Python 中获得威尔逊区间的逆 CDF 变换,为 u 的任何值(0 到 1)产生 x?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。