概率统计Python计算:样本数据的经验分布函数
设 ( x 1 , x 2 , ⋯ , x n ) (x_1,x_2,\cdots,x_n) (x1,x2,⋯,xn)是总体 X X X的一个样本观测值。与绘制直方图相仿,记 a = m i n { x 1 , x 2 , ⋯ , x n } a=min\{x_1,x_2,\cdots,x_n\} a=min{x1,x2,⋯,xn}, b = m a x { x 1 , x 2 , ⋯ , x n } b=max\{x_1,x_2,\cdots,x_n\} b=max{x1,x2,⋯,xn}。将区间 [ a , b ] [a, b] [a,b]等分成 m ( ≤ n ) m(\leq n) m(≤n)个小区间,约定除最后一个小区间为闭区间外,其余均为半闭半开区间。统计第 k k k个小区间中所含个体观测值 x i x_i xi的个数,即个体观测值落在该区间内的频数,记为 f k f_k fk, k = 1 , 2 , ⋯ , m k=1,2,\cdots,m k=1,2,⋯,m。函数
F n ( x ) = { 0 x < a f 1 n x ∈ Δ 1 f 1 + f 2 n x ∈ Δ 2 ⋮ f 1 + ⋯ + f m − 1 n x ∈ Δ m 1 x ≥ b F_n(x)=\begin{cases}0&x<a\\\frac{f_1}{n}&x\in\Delta_1\\\frac{f_1+f_2}{n}& x\in\Delta_2\\\vdots\\\frac{f_1+\cdots+f_{m-1}}{n}&x\in\Delta_m\\1&x\geq b\end{cases} Fn(x)=⎩ ⎨ ⎧0nf1nf1+f2⋮nf1+⋯+fm−11x<ax∈Δ1x∈Δ2x∈Δmx≥b
称为 ( x 1 , x 2 , ⋯ , x n ) (x_1,x_2,\cdots,x_n) (x1,x2,⋯,xn)的经验分布函数 F n ( x ) F_n(x) Fn(x)。
除了matplotlib包中的pyplot对象提供的绘制数据数组的直方图的函数hist(详见博文《样本数据直方图绘制》),numpy包也提供了一个histogram的函数,该函数的调用接口为:
histogram(x, bins) \text{histogram(x, bins)} histogram(x, bins)
参数x的意义是接受数据数组,bins也是确定分组个数。假定传递给bins的置为 m m m,该函数返回一个二元组(f, b),其中f为含有 m m m个整数的数组,每个元素表示对应小区间所含个体观测值个数。b也是一个数组其中含有 m + 1 m+1 m+1个元素 { b 0 , b 1 , ⋯ , b m } \{b_0, b_1, \cdots, b_m\} {b0,b1,⋯,bm}, [ b k − 1 , b k ) [b_{k-1},b_{k}) [bk−1,bk)为第 k k k个小区间, k = 1 , 2 , ⋯ , m k=1, 2,\cdots,m k=1,2,⋯,m。下列代码就是利用numpy的这一函数,计算样本观测值的经验分布函数 F n ( x ) F_n(x) Fn(x)。
import numpy as np #导入numpy
def Fn(x, sample, m): #定义函数Fnn=sample.size #样本容量nf, b=np.histogram(sample, bins=m) #计算样本分组及频数f=f/n #计算各组频率for k in range(m-1): #计算累积频率f[k+1]+=f[k]y=np.zeros(x.size) #函数值初始化为0for i in range(1, m): #计算每个分组区间内的函数值d=np.where((x>b[i-1])&(x<=b[i]))y[d]=f[i-1]d=np.where(x>b[m-1]) #计算最后小区间及其以后的函数值y[d]=1return y #返回y
程序中第2~14行定义计算由参数sample传递的样本数据,分成m组的经验分布函数,其中参数x表示自变量,这是一个数组类对象。第3行计算样本容量n。第4行调用numpy的histogram函数,计算样本sanple分成m组的频数数据f和分组数据b。第5行计算各组频率(频数/样本容量)。第6~7行计算各分组的累积频率。第8行将函数值y初始化为0。第9~11行的for循环用存储在f中的累积频率数据计算x中所含前m个小区间的函数值。第12行计算x中包含的最后一个区间及其以右部分设置为d,第13行将d对应的函数值1。
例1 下面列出84个伊特拉斯坎(Etruscan)人男子的头颅的最大宽度(mm)。
141 | 148 | 132 | 138 | 154 | 142 | 150 | 146 | 155 | 158 | 150 | 140 | 147 | 148 |
144 | 150 | 149 | 145 | 149 | 158 | 143 | 141 | 144 | 144 | 126 | 140 | 144 | 142 |
141 | 140 | 145 | 135 | 147 | 146 | 141 | 136 | 140 | 146 | 142 | 137 | 148 | 154 |
137 | 139 | 143 | 140 | 131 | 143 | 141 | 149 | 148 | 135 | 148 | 152 | 143 | 144 |
141 | 143 | 147 | 146 | 150 | 132 | 142 | 142 | 143 | 153 | 149 | 146 | 149 | 138 |
142 | 149 | 142 | 137 | 134 | 144 | 146 | 147 | 140 | 142 | 140 | 137 | 152 | 145 |
计算其经验分布函数,并绘制函数图像。
解: 下列代码利用上列程序定义的函数Fn完成本例的计算。
import numpy as np #导入numpy
from matplotlib import pyplot as plt #导入绘图对象plt
sample=np.array([141,148,132,138,154,142,150,146,155,158, #设置样本数据数组150,140,147,148,144,150,149,145,149,158,143,141,144,144,126,140,144,142,141,140,145,135,147,146,141,136,140,146,142,137,148,154,137,139,143,140,131,143,141,149,148,135,148,152,143,144,141,143,147,146,150,132,142,142,143,153,149,146,149,138,142,149,142,137,134,144,146,147,140,142,140,137,152,145])
x=np.linspace(120, 160, 256) #设置绘图横轴
plt.plot(x,Fn(x, sample, 8)) #绘制Fn(x)图形
plt.show()
程序的第3~11行设置样本观测值数据sample。的第12行设置绘图的横坐标区间 x = ( 120 , 160 ) x=(120,160) x=(120,160),第13行调用pyplot的plot函数,利用上列程序定义的函数Fn,绘制由数据数组sample算得的经验分布函数的图形,运行此程序展示下图中的折线部分。
由上图可见,沿 F n ( x ) F_n(x) Fn(x)的边缘描绘一条光滑曲线可得总体 X X X的分布函数的近似图像。
写博不易,敬请支持:
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
返回《导引》
概率统计Python计算:样本数据的经验分布函数相关推荐
- 概率统计Python计算:随机变量的分布函数
任何随机变量XXX都有其分布函数(或称为累积分布函数) F(x)=P(X≤x),x∈(−∞,+∞).F(x)=P(X\leq x), x\in (-\infty,+\infty).F(x)=P(X≤x ...
- 概率统计Python计算:条件概率和概率乘法公式
1. 古典概型中条件概率的计算 条件概率 P ( B ∣ A ) P(B|A) P(B∣A)是将样本空间限制在 A A A上, A ∩ B A\cap B A∩B的概率.因此,我们可以利用博文< ...
- 概率统计Python计算:离散型随机变量分布(bernoulli geom)
Python的scipy.stats包中提供了各种随机变量的分布.每一种分布,其累积分布函数(分布函数)记为cdf.离散型变量分布的概率质量函数(分布律),记为pmf.除此之外,每个分布都有一个服从该 ...
- 概率统计Python计算:单个正态总体均值双侧假设的Z检验
用p值法计算假设H0H_0H0的双侧检验,设aaa,bbb分别是检验统计量分布对应显著水平α\alphaα的左.右分位点,F(x)F(x)F(x)和S(x)S(x)S(x)分别为检验统计量的分布函数 ...
- 概率统计Python计算:全概率公式
1. numpy数组的按元素计算 设完备事件组A1,A2,⋯,AnA_1,A_2,\cdots,A_nA1,A2,⋯,An作为引发事件BBB的nnn个因素.诸因素的先验概率构成的序列为P(A1) ...
- 概率统计Python计算:贝叶斯公式
根据完备事件组A1,A2,-,AnA_1, A_2,\dots , A_nA1,A2,-,An的先验概率序列P(A1),P(A2),-,P(An)P(A_1), P(A_2), \dots, P ...
- 概率统计Python计算:F分布分位点计算
设XXX,YYY相互独立,且分别服从χ2(m)\chi^2(m)χ2(m)和χ2(n)\chi^2(n)χ2(n),则XY\frac{X}{Y}YX~F(m−1,n−1)F(m-1, n-1)F(m ...
- 概率统计Python计算:标准正态分布分位点计算
标准正态分布对给定显著水平的分位点.设XXX~N(0,1)N(0,1)N(0,1),显著水平为α\alphaα.为计算右侧分位点zαz_{\alpha}zα(见下图),使得 P(X≤zα)=1−αP ...
- 概率统计Python计算:用样本均值和方差计算总体参数的点估计
设来自总体XXX的简单样本为(X1,X2,⋯,Xn)(X_1, X_2,\cdots,X_n)(X1,X2,⋯,Xn).样本均值为X‾=1n∑i=1nXi\overline{X}=\frac{1 ...
最新文章
- 沫沫金:Java快速合并两个数组【绝技】
- C语言 读取字符串数组中的字符串并获取字符串的长度
- Leetcode51 n皇后 DFS+回溯(模板题)
- gorm增删查改json_gorm 关联查询请教
- Android SQLite Database的使用模板
- vhd 镜像 备份Linux,差分VHD 系统秒备份、秒还原教程 完胜GHOST
- centos 6.2 升级后无法启动图形界面
- undefined reference to `clock_gettime'
- bootstrap 2021-04-20
- 我爱Java系列---【EL和JSTL】
- DatabaseDesign数据库设计
- ndows 内存诊断工具,win10内存诊断工具 win10自带内存诊断工具的使用
- spss多元线性回归散点图_如何通过残差散点图检验SPSS线性回归是否存在异方差等问题?...
- php分页设计美化,国产PHP框架之ThinkPHP各模块开发系列十七,美化分页显示
- html div虚线背景,聊聊css绘制虚线
- [小物分享] “Cap-less”——烂笔头3088
- 英雄联盟祖安服务器要维护多久,英雄联盟祖安大区到底有多凶残?手速慢了必然赢不了对面!...
- 在Visual Basic6.0中,如何实现简单加减乘除的程序编写?
- 2019年6月20日工作总结---CSS篇
- C语言——分支语句和循环语句(分支语句)