首先介绍scipy中的几类函数:
概率密度函数(PDF: Probability Density Function):连续随机变量的概率分布特性用概率密度函数(PDF: Probability Density Function)来刻画。累积分布函数(CDF: Cumulative Distribution Function):百分点函数(PPF: Percent Point Function):百分点函数PPF是CDF的反函数。为了得到一定的累积分布概率,CDF相应的输入值是什么。生存函数(Survial Function):定义式为 𝑆(𝑥)=𝑃𝑟[𝑋>𝑥]=1−𝐹(𝑥)。风险函数:风险函数为概率密度函数与生存函数之比𝐻(𝑥)=𝑓(𝑥)/𝑆(𝑥)=𝑓(𝑥)/(1−𝐹(𝑥))
1 绘制t分布曲线
1.1 理论
t分布形状类似于标准正态分布;t分布是对称分布,较正态分布离散度强,密度曲线较标准正态分布密度曲线更扁平;对于大型样本,t-值与z-值之间的差别很小。
作用:t分布纠正了未知的真实标准差的不确定性;t分布明确解释了估计总体方差时样本容量的影响,是适合任何样本容量都可以使用的合适分布
应用:根据小样本来估计呈正态分布且方差未知的总体的均值;对于任何一种样本容量,真正的平均值抽样分布是t分布,因此,当存在疑问时,应使用t分布。
样本容量对分布的影响:当样本容量在 30-35之间时,t分布与标准正态分布难以区分;当样本容量达到120时,t分布与标准正态分布实际上完全相同了
自由度df对分布的影响:样本方差使用一个估计的参数(平均值),所以计算置信区间时使用的t分布的自由度为 n - 1;由于引入额外的参数(自由度df),t分布比标准正态分布的方差更大(置信区间更宽);与标准正态分布曲线相比,自由度df越小,t分布曲线愈平坦,曲线中间愈低,曲线双侧尾部翘得愈高;自由度df愈大,t分布曲线愈接近正态分布曲线,当自由度df= ∞ 时,t分布曲线为标准正态分布曲线。
这里推荐一个讲解t分布比较好的B站视频:
/video/BV1Qv411W7GQ
1.2 代码及效果
# 不同自由度的学生t分布与标准正态分布import numpy as npfrom scipy.stats import normfrom scipy.stats import timport matplotlib.pyplot as pltprint('比较t-分布与标准正态分布')x = np.linspace( -3, 3, 100)plt.plot(x, t.pdf(x,1), label='df=1')plt.plot(x, t.pdf(x,2), label='df=20')plt.plot(x, t.pdf(x,100), label = 'df=100')plt.plot( x[::5], norm.pdf(x[::5]),'kx', label='normal')plt.legend()plt.show()
1.3 根据正态分布函数表达式绘制正太分布曲线
import numpy as npimport matplotlib.pyplot as pltimport mathmu = 0sigma = math.sqrt(0.2)x = np.linspace(mu-50*sigma,mu+50*sigma,1000)y = np.exp(-(x-mu)**2 / (2*sigma**2)/math.sqrt(2*math.pi)*sigma)plt.plot(x,y,'b-',linewidth=1)plt.show()
绘图效果:
1.4 计算t分布的临界值
由于t分布是对称性分布,所以计算t分布的临界值 (critical value)时,需要区分单尾还是双尾。
也就是说,假设我们令 alpha=0.05,对应的单尾分布参数为0.95,而双尾则应是0.975.
x = np.linspace( -3, 3, 100)print(f'alpha=0.05的单尾检验对应的临界值为{t.ppf(0.95,2)}')print(f'alpha=0.05的双尾检验对应的临界值为{t.ppf(0.975,2)}')
alpha=0.05的单尾检验对应的t值为2.919985580355516
alpha=0.05的双尾检验对应的t值为4.302652729911275
对应查表结果:
1.5 计算t分布的p值
在scipy中,p值的计算与生存函数挂钩;需要指定的参数为 t值 和 自由度
这里我们选择t=6.965自由度为2来演示p值的计算过程:
print(f't=6.965且自由度为2的单尾检验对应的p值为{t.sf(6.965,2)}')print(f't=6.965且自由度为2的双尾检验对应的p值为{2*t.sf(6.965,2)}')
计算得到的p值为:
t=6.965且自由度为2的单尾检验对应的p值为0.009998765127525556
t=6.965且自由度为2的双尾检验对应的p值为0.01999753025505111
2 绘制F分布曲线
2.1 理论
F分布是1924年英国统计学家R.A.Fisher提出,并以其姓氏的第一个字母命名的。它是一种非对称分布,有两个自由度,且位置不可互换。
设X服从自由度为n1的卡方分布, Y服从自由度为n2的卡方分布,且X,Y独立,则称随机变量F=(X⁄n1 )/(Y⁄n2 )服从自由度为(n1,n2)的F分布,记为F~F(n1,n2)。其中n1称为第一自由度,n2称为第二自由度。
F分布及其应用_LittleDorcas的博客-CSDN博客_f分布
2.2 代码及效果
import numpy as npfrom scipy.stats import fimport matplotlib.pyplot as pltx = np.linspace(0,4.5, 10000)plt.plot(x, f.pdf(x,10,10), 'g--',label='y=f(x,10,10)')plt.plot(x, f.pdf(x,80,50), 'k-',label='y=f(x,80,50)')plt.legend()plt.show()
2.3 计算临界值和p值
print(f'alpha=0.1的单尾检验对应的临界值为{f.ppf(0.9,5,5)}')print(f'alpha=0.05的双尾检验对应的临界值为{f.ppf(0.95,5,5)}')print(f't=5.05且自由度为(5,5)的单尾检验对应的p值为{f.sf(5.05,5,5)}')print(f't=5.05且自由度为(5,5)的双尾检验对应的p值为{2*f.sf(5.05,5,5)}')
计算结果为:
alpha=0.1的单尾检验对应的临界值为3.4529822480379053
alpha=0.05的双尾检验对应的临界值为5.050329057632646
t=5.05且自由度为(5,5)的单尾检验对应的p值为0.05000625652489983
t=5.05且自由度为(5,5)的双尾检验对应的p值为0.10001251304979966
3 卡方分布
3.1 理论
若n个相互独立的随机变量ξ₁,ξ₂,...,ξn ,均服从标准正态分布(也称独立同分布于标准正态分布),则这n个服从标准正态分布的随机变量的平方和构成一新的随机变量,其分布规律称为卡方分布(chi-square distribution)
3.2 代码及效果
import numpy as npfrom scipy.stats import chi2import matplotlib.pyplot as pltx = np.linspace(0,50, 100)plt.plot(x, chi2.pdf(x,df=1), 'g--',label='df=1')plt.plot(x, chi2.pdf(x,df=2), 'k-',label='df=2')plt.plot(x, chi2.pdf(x,df=4), 'b-',label='df=4')plt.plot(x, chi2.pdf(x,df=8), 'r-',label='df=8')plt.plot(x, chi2.pdf(x,df=16), 'y-',label='df=16')plt.legend()plt.show()
3.3 计算临界值和p值
print(f'alpha=0.1的单尾检验对应的临界值为{chi2.ppf(0.9,4)}')print(f'alpha=0.05的双尾检验对应的临界值为{chi2.ppf(0.95,4)}')print(f't=9.4877且自由度为 4 的单尾检验对应的p值为{chi2.sf(9.4877,4)}')print(f't=7.7794且自由度为 4 的双尾检验对应的p值为{chi2.sf(7.7794,4)}')
计算结果:
alpha=0.1的单尾检验对应的临界值为7.779440339734858
alpha=0.05的双尾检验对应的临界值为9.487729036781154
t=9.4877且自由度为 4 的单尾检验对应的p值为0.050000599541234675
t=7.7794且自由度为 4 的双尾检验对应的p值为0.10000160450343255
如果觉得《python学习笔记12:t分布 f分布和卡方分布曲线绘制及临界值和p值计算》对你有帮助,请点赞、收藏,并留下你的观点哦!