微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

威尔逊区间的逆 CDF 变换

如何解决威尔逊区间的逆 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()

Confidence Level (CL) against x

对 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 举报,一经查实,本站将立刻删除。