Scipy各种概率分布的核心对比图
1.2.1离散型分布
#3人分别负责30台发生故障不能修理的概率
p30=st.binom.sf(k=1,p=0.01,n=30)*3
#3人共同负责90台发生故障不能修理的概率
p90=st.binom.sf(k=3,p=0.01,n=90)
#使用pmf函数计算离散型随机变量的概率质量函数。
###下面两种计算方式的效果相同,pmf函数计算离散型随机变量的概率质量函数。
p30_1=(1-(st.binom.pmf(k=0,p=0.01,n=30)+st.binom.pmf(k=1,p=0.01,n=30)))*3
#cdf计算累积分布函数的值
p30_2=(1-st.binom.cdf(k=1,p=0.01,n=30))*3
p30_1,p30_2
1.2.2连续型分布
import scipy.integrate as integ
#构建服从正态分布的概率密度函数的值,均值mu为1,标准差sigma为0.5
x = np.arange(-2,4,0.01)
#根据x计算正态分布的概率密度函数
n_density = (1/(((2*np.pi)**0.5)*0.5))*np.exp((-(x-1)**2)/(2*(0.5**2)))#第1个公式f(x)
#正态分布的密度函数曲线,后面还有更具体的图形例子
print('正态分布概率密度函数曲线(均值:1,标准差:0.5):')
plt.plot(x,n_density)
plt.show()
#累积分布函数的计算,设x0=1.5,则F(x0)=P(x<1.5)
#即求概率密度函数f(x)在(-Inf,1.5]区间的积分
def nf(x,mu,sigma):
return (1/(((2*np.pi)**(0.5))*sigma))*np.exp((-(x-mu)**2)/(2*(sigma**2)))
#累积分布函数是对概率密度函数求积分(针对连续型随机变量,离散型随机变量是求和)
n_distrib = integ.quad(nf,float('-Inf'),1.5,args=(1,0.5))[0]#第二个公式F(x)的实现
print('\n手工计算分布函数的值:', n_distrib)
#直接调用Scipy的累积分布函数
n_distrib_scipy = st.norm.cdf(1.5,1,0.5)
print('\nScipy函数计算正态分布的累积分布函数的值:', n_distrib_scipy)
#Scipy有关概率分布的其他应用
print('\n服从正态分布的随机数生成:',st.norm.rvs(1,0.5,5))
print('\n概率密度函数(显示前10个):',st.norm.pdf(x,0.5,1)[0:10])
print('\n生存函数:',st.norm.sf(1.5,1,0.5))# sf=1-cdf
print('\n分位数函数:',st.norm.ppf(0.84,1,0.5))#注意:通常都是通过下分位数(下尾)计算分位数。
#该分布下随机变量有95%的可能性位于该区间
print('\n置信度0.95的置信区间:',st.norm.interval(0.95,1,0.5))
#t分布
import scipy.special as ss
#t分布的概率密度函数
def tf(x,d):
return ss.gamma((d+1)/2)*((1+(x**2)/d)**(-(d+1)/2))/((d*np.pi)**0.5*ss.gamma(d/2))
d=2
x = np.arange(-4,4,0.01)
t = ss.gamma((d+1)/2)*((1+(x**2)/d)**(-(d+1)/2))/((d*np.pi)**0.5*ss.gamma(d/2))
plt.figure(figsize=(8,6))
plt.plot(x,t)
plt.show()
#手工计算的概率密度函数和分布函数的值。
print('t分布概率密度函数的值(x0=2,df=2):',tf(2,2))
#求概率密度函数的积分即可求出分布函数的值。
print('\nt分布在x0=1.5处的累积分布函数值:',integ.quad(tf,float('-Inf'),1.5,args=(2))[0])
#通过Scipy函数计算二者的值,其他函数的调用和前面正态分布类似,只不过t多了一个自由度参数。
print('\n使用Scipy计算概率密度函数值:',st.t.pdf(2,2))
print('\n使用Scipy计算累积分布函数值:',st.t.cdf(1.5,2))