对来自总体的样本,及给定的显著水平检验假设其中,是已知分布类型的分布函数(或分布律),含有个未知参数。为此,需要将划分成个区间,统计样本中落入每个区间中的频数并按假设中的分布函数(用未知参数的最大似然统计量值替代对应参数)计算概率。利用这些数据,调用scipy.stats包中的函数
即可算得检验假设的p值。该函数的参数f_obs表示上述样本频数序列,f_exp表示假设总体概率序列,ddof表示假设总体所含的未知参数个数,缺省值为0。该函数的返回值包括两个数据:表示检验统计量值的chisq,和表示检验p值的p,其中和分别为分布的分布函数和残存函数。
例1在一实验中,每隔一定时间观察一次由某种铀所放射的到达计数器上的粒子数,共观察了100次,得结果如下表:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | ||
1 | 5 | 16 | 17 | 26 | 11 | 9 | 9 | 2 | 1 | 2 | 1 | 0 | |
其中,是观察到有个粒子的次数,从理论上考虑知应服从泊松分布,问此判断是否符合实际(取)?
解: 下列代码完成本例中假设~的检验。
from scipy.stats import poisson, chisquare #导入poisson, chisquare
import numpy as np #导入numpy
n=100 #样本容量
alpha=0.05 #显著水平
f=np.array([1,5,16,17,26,11,9,9,2,1,2,1,0]) #样本数据频数
k=f.size #区间个数
r=1 #总体未知参数个数
x_bar=(np.arange(k)*f).sum()/n #总体均值的最大似然估计值
p=[poisson.pmf(i,x_bar) for i in range(k-1)]#各区间内概率
p.append(1-sum(p))
p=np.array(p)
_, pv=chisquare(f, p*n, r) #检验p值
print('H0 is %s'%(pv>=alpha))
程序的第3~5行按题面设置各项数据。第6行计算区间个数k,第7行设置未知参数个数r,第8行计算假设中总体所含未知参数的最大似然估计值x_bar。第9行计算概率,第10行计算,第11行将算得的构造成数组p。第12行调用函数chisquare,传递参数f(各区间内样本数据频数),n*p(序列)和r(未知参数个数),计算假设~的检验p值(由于此处我们并不需要检验统计量值,故用下划线将chisq屏蔽)。运行程序,输出
H0 is True.
表示接受假设~。
写博不易,敬请支持:
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
返回《导引》