概率统计Python计算:单个正态总体均值双侧假设的卡方检验

对正态总体的方差 σ 2 = σ 0 2 \sigma^2=\sigma_0^2 σ2=σ02进行显著水平 α \alpha α下的假设检验,检验统计量 n − 1 σ 0 2 S 2 \frac{n-1}{\sigma_0^2}S^2 σ02n1S2~ χ 2 ( n − 1 ) \chi^2(n-1) χ2(n1)。其中, S 2 S^2 S2为样本方差。用p值法的双侧检验计算函数定义如下。

from scipy.stats import chi2	#导入chi2
def chi2test2(X, df, alpha):	#双侧检验函数
    if X>2*df:					#检验统计量值大于卡方分布均值
        p=2*chi2.sf(X, df)
    else:						#检验统计量值不超过卡方分布均值
        p=2*chi2.cdf(X, df)
    return p>=alpha

双侧检验函数chi2test2的参数X,df和alpha的意义分别为检验统计量值 n − 1 σ 0 2 s 2 \frac{n-1}{\sigma_0^2}s^2 σ02n1s2 χ 2 ( n − 1 ) \chi^2(n-1) χ2(n1)分布自由度 n − 1 n-1 n1和显著水平 α \alpha α。第3~6行的if-else语句根据检验统计量值X位于 χ 2 ( n − 1 ) \chi^2(n-1) χ2(n1)的均值 n − 1 n-1 n1左、右方来计算p值:若X>df(即 n − 1 n-1 n1)p置为2*chi2.sf(X, df)(第4行),否则p置为2*chi2.cdf(X, df)(第6行)。
例1 某产品的强度服从正态分布 N ( 52.8 , 1. 6 2 ) N(52.8, 1.6^2) N(52.8,1.62)。为降低生产成本,决定更换部分原材料。现从新产品中随机抽取容量为9的样本,测得强度(单位: k g f / m m 2 kgf/mm^2 kgf/mm2)分别为
51.9 , 53.0 , 52.7 , 54.1 , 53.2 , 52.3 , 52.5 , 51.1 , 54.7 51.9, 53.0, 52.7, 54.1, 53.2, 52.3, 52.5, 51.1, 54.7 51.9,53.0,52.7,54.1,53.2,52.3,52.5,51.1,54.7
问新产品的强度是否发生了变化?
解: 要回答“新产品的强度是否发生了变化”,需要考察新产品的强度均值 μ \mu μ是否依然为 52.8 52.8 52.8,及强度方差 σ 2 \sigma^2 σ2是依然否为 1. 6 2 1.6^2 1.62。先检验假设
H 0 : σ 2 = 1. 6 2 , H 1 : σ 2 ≠ 1. 6 2 . H_0:\sigma^2=1.6^2, H_1:\sigma^2\not=1.6^2. H0:σ2=1.62,H1:σ2=1.62.
若检验结果接受对 σ 2 = 1. 6 2 \sigma^2=1.6^2 σ2=1.62的假设,则可以用Z检验法检验假设
H 0 : μ = 52.8 , H 1 : μ ≠ 52.8 H_0:\mu=52.8, H_1:\mu\not=52.8 H0:μ=52.8,H1:μ=52.8
否则用T检验法检验上述总体均值的双侧假设 H 0 H_0 H0。下列代码完成本例计算。

import numpy as np                          #导入numpy
x=np.array([51.9, 53.0, 52.7, 54.1, 53.2,   #样本数据
            52.3, 52.5, 51.1, 54.7])
xmean=x.mean()                              #样本均值
n=x.size                                    #样本容量
s2=x.var(ddof=1)                            #样本方差
sigma0=1.6                                  #总体均方差假设值
mu0=52.8                                    #总体均值假设值
alpha=0.1                                   #显著水平
X=(n-1)*s2/sigma0**2                        #总体方差检验统计量值
accepts2=chi2test(X, n-1)                   #总体方差双侧检验
print('sigma^2=%.1f^2 is %s.'%(sigma0, accepts2))
if accepts2:								#总体均值双侧Z检验
	Z=(xmean-mu0)/(np.sqrt(s2/n))
	acceptmu=ztest2(Z, alpha)
else:       								#总体均值双侧T检验
	T=(xmean-mu0)/(sigma0/np.sqrt(n))
	acceptmu=ttest2(T, alpha)
print('mu=%.1f is %s'%(mu0, acceptmu))

程序中第2~9行按题面设置各项数据。第10行计算关于假设 H 0 : σ 2 = 1. 6 2 H_0:\sigma^2=1.6^2 H0:σ2=1.62的检验统计量 n − 1 σ 0 2 s 2 \frac{n-1}{\sigma_0^2}s^2 σ02n1s2为X,第11行调用函数chi2test2检验该假设 H 0 H_0 H0。第13~18行的if-else语句根据对假设 H 0 : σ 2 = 1. 6 2 H_0:\sigma^2=1.6^2 H0:σ2=1.62的检验结果accepts2的值,计算假设 H 0 : μ = 52.8 H_0:\mu=52.8 H0:μ=52.8的双侧检验:若accepts2为True( σ 2 = 1. 6 2 \sigma^2=1.6^2 σ2=1.62),则调用ztest2函数检验假设 H 0 : μ = 52.8 H_0:\mu=52.8 H0:μ=52.8(第14~15行)。否则,调用ttest2函数对 H 0 : μ = 52.8 H_0:\mu=52.8 H0:μ=52.8做检验(第17~18行)。运行程序,输出

sigma^2=1.60^2 is True.
mu=52.8 is True.

表示既接受假设 H 0 : σ 2 = 1. 6 2 H_0:\sigma^2=1.6^2 H0:σ2=1.62,又接受假设 H 0 : μ = 52.8 H_0:\mu=52.8 H0:μ=52.8。即新产品的强度没有发生变化。
写博不易,敬请支持:
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
返回《导引》

你可能感兴趣的:(概率统计,概率论)