假设检验 正态总体方差的假设检验

前言:

      目前 假设检验 主要 讨论的服从正态分布的对象

     均值 和方差的情况。

     分为 单个总体 和 两个总体的情况

   例子 来自 《概率论与数理统计》第八章

 目录:

     一  单个总体方差的情况

    二   两个总体的情况

   三   代码 以及 例子


一  单个总体方差的情况

      单个总体 均值 未知

  1.1  原假设假设:

         \sigma^2\leq \sigma_0^2  右边检验

         \sigma^2\geq \sigma_0^2  左边检验

          \sigma^2=\sigma_0^2 双边检验

   1.2 统计量

             Z = \frac{(n-1)S^2}{\sigma_0^2} \sim \chi (n-1)

   应用见例8

二  两个总体的情况

        X_1,X_2,....X_n 来自总体的样本N(u_1,\sigma_1^2)

        Y_1,Y_2,....,Y_n 来自总体的样本N(u_2,\sigma_2^2)

        样本方差S_1^2,S_2^2,且总体均值,方差未知

    则统计量为

   Z= \frac{s_1^2}{s_2^2} \geq F(n_1-1,n_2-1)

   见例9 

三  例子

​​​​​​

# -*- coding: utf-8 -*-
"""
Created on Fri Aug  6 17:37:24 2021

@author: chengxf2
假设检验

"""
import numpy as np
from scipy.stats import chi2  # 卡方分布
from scipy.stats import norm
from scipy.stats import t
from scipy.stats import f
import matplotlib.pyplot as plt
class hypothesis :
    
    
    def Draw(self):
        
        fig, ax = plt.subplots(1, 1)
        x = np.linspace(norm.ppf(0.01), norm.ppf(0.99), 100)
        ax.plot(x, norm.pdf(x), 'r-', lw=5, alpha=0.6, label='norm pdf')
        
    '''
    随机变量服从正太分布,方差均值已知情况
    Args
       H0 假设样本均值和总体无偏差
       已知参数:
          总体均值,总体方差,
          样本均值,样本个数
     return 
         样本均值和总体均值的拟合情况
    '''
    def example_1(self):
        u = 0.5
        sigma = 0.015
        alpha = 0.05
        
        x = [0.497, 0.506, 0.518, 0.524, 0.498, 0.511, 0.520, 0.515, 0.512]
        x_bar = np.mean(x)
        n = len(x)

        
        print("\n step1 H0 假设样本均值和总体无偏差")
        z = (x_bar-u)/(sigma/np.sqrt(n))
        
        print("\n step2 统计量 %5.2f"%z,"\t 样本个数 ",n)
        w =  norm.ppf(alpha/2)  #
        w1 = norm.ppf(1-alpha/2)
        
        print("\n step3 : 拒绝区域  [-, %5.2f] [ %5.2f ,+]"%(w,w1))
        
        if z> w and z<w1:
            print("\n step4: 结论: 假设H0 成立")
        else:
            print("\n step4: 结论 假设H1 成立")
    
    '''
    右边检验:
    Args
       牛奶的例子
    return
       
    '''
    def example_2(self):
        
        #已知条件
        u = -0.545 #总体均值
        sigma = 0.008     #总体方差
        n = 5 #样本个数
        x_bar = -0.535 #样本均值
        alpha = 0.05 #置信度
        
        print("\n step1 H0 牛奶无掺水 u<u0 ")
        z = (x_bar-u)/(sigma/np.sqrt(n))
        print("\n step2 统计量 %5.2f"%z,"\t 样本个数 ",n)
        
        w = norm.ppf(1-alpha)
        print("\n step3 : 拒绝区域  [ %5.2f ,+]"%w)
        
        if z>w:
           print("\n step1 4 拒绝H0 牛奶掺水  ")
        else:
           print("\n step1 4 接受H0 牛奶无掺水  ")
           
           
    '''
    总体服从正态分布,均值方差未知,样本均值,方差已知
    Args
       样本的均值
    return
       
    '''
    def example_3(self):
        
        #已知条件
        u = -0.545 #总体均值
        sigma = 0.008     #总体方差
        n = 5 #样本个数
        x_bar = -0.535 #样本均值
        alpha = 0.05 #置信度
        
        print("\n step1 H0 牛奶无掺水 u<u0 ")
        z = (x_bar-u)/(sigma/np.sqrt(n))
        print("\n step2 统计量 %5.2f"%z,"\t 样本个数 ",n)
        
        w = norm.ppf(1-alpha)
        print("\n step3 : 拒绝区域  [ %5.2f ,+]"%w)
        
        if z>w:
           print("\n step1 4 拒绝H0 牛奶掺水  ")
        else:
           print("\n step1 4 接受H0 牛奶无掺水  ")
           
    '''
    原件寿命的例子,右边检验
    单个总体服从标准正态分布,方差,均值未知
    样本均值,方差已知,统计量服从t分布
    '''
    def example_4(self):
        X = np.array([159, 280, 101, 212, 224, 379, 179 ,264,
                      222, 362, 168, 250, 149, 260, 485, 170 ])
    
        alpha = 0.05
    
        x_bar = np.mean(X)
        s = np.std(X,ddof=1)#样本差,必须使ddof=1:
        n = len(X)
        
        z =(x_bar-225)/(s/np.sqrt(n))
        
        print("\n step2: 统计量 %5.2f  样本方差 %5.2f"%(z,s))
        
        w = t.ppf(1-alpha,df=n-1)
        print("\n step3 : 拒绝区域  [ %5.2f ,+]"%w)
        
        
        if z>w:
           print("\n step1 4 拒绝H0 寿命大于225h  ")
        else:
           print("\n step1 4 接受H0 寿命小于等于225h  ")
           
    '''
    两个正态分布差值的检验,方差相等符合t分布。如果方差不等,但是已知,符合正太分布
    测定冰的例子,右边检验
    Args
      方差相等
      样本方差,均值已知
      跟例题结果有点偏差是因为 小数点精度不一致导致的。
      
    '''
    def example_5(self):
        
        x_A = np.array([79.98, 80.04, 80.02, 80.04, 80.03, 80.03, 80.04,
                        79.97, 80.05, 80.03, 80.02, 80.00, 80.02])
        x_B = np.array([80.02, 79.94, 79.98, 79.97, 79.97, 80.03, 79.95, 79.97])
        
        x_barA = np.mean(x_A)
        x_barB = np.mean(x_B)
        
        print("\n xa %5.2f  xb %5.2f"%(x_barA,x_barB))
        
        x_bar = x_barA-x_barB
        n1 = len(x_A)
        n2 = len(x_B)
        sa = np.std(x_A,ddof=1)
        sb = np.std(x_B,ddof=1)
        
        saa = np.power(sa,2)
        sbb = np.power(sb,2)

        s = (n1-1)*saa+(n2-1)*sbb
        
        print("\n sa  %8.7f  sb:  %8.7f"%(sa,sb))
        print("\n n1 %d n2 %d"%(n1,n2))
        sww= s/(n1+n2-2)
        #sww = 0.0007178
        print("\n sww %8.7f  "%sww)
        
        z = (x_bar)/(np.sqrt(sww)*np.sqrt(1/n1+1/n2))
        print("\n step2: 统计量:  %5.3f  "%z)
        
        df = n1+n2-2
        alpha = 0.05 #置信度
        w = t.ppf(1-alpha,df)
     
        print("\n step3 : 拒绝区域  [ %5.3f ,+]"%w)
        
        
        if z>w:
           print("\n step1 4 拒绝H0  方法A 比方法B测得的融化热要大  ")
        else:
           print("\n step1 4 接受H0   方法A 测得的温度小于等于方法B   ")
           
    '''
    成对数据的检验,逐对比较法, t 分布,双边检验
    Args
       在同样的方法下得到成对数的观测值
       其差值假设服从正太分布
       样本的均值,方差已知
       
    '''
    def example_6(self):
        x = np.array([0.20, 0.30, 0.40, 0.50, 0.60, 0.70, 0.80, 0.90, 1.00])
        y = np.array([0.10, 0.21, 0.52, 0.32, 0.78, 0.59, 0.68, 0.77, 0.89])
        
        d = x-y
        n = len(d)
        x_bar = np.mean(d)
        sd = np.std(d, ddof=1)
        
        z = x_bar/(sd/np.sqrt(n))
        
        print("\n 统计量 %5.3f"%z)
        
        
        alpha = 0.01
        df = n-1
        w = t.ppf(alpha/2, df)
        
        print("\n step3 : 拒绝区域  [ %5.3f ,+]"%w)
        
        
        if np.abs(z)>np.abs(w):
           print("\n step1 4 拒绝H0  两台仪器测量有差异  ")
        else:
           print("\n step1 4 接受H0   两台仪器测量无差异   ")
           
    
    '''
    成对数据的检验,逐对比较法, t 分布,左边检验
    Args
       在同样的方法下得到成对数的观测值
       其差值假设服从正太分布
       样本的均值,方差已知
       
    '''
    def example_7(self):
        x = np.array([0.30, 0.23, 0.41, 0.53, 0.24, 0.36, 0.38, 0.51])
        y = np.array([0.43, 0.32, 0.58, 0.46, 0.27, 0.41, 0.38, 0.61])
        
        d = x-y
        n = len(d)
        x_bar = np.mean(d)
        sd = np.std(d, ddof=1)
        
        z = x_bar/(sd/np.sqrt(n))
        
        print("\n 统计量 %5.3f"%z)
        
        
        alpha = 0.05
        df = n-1
        w = t.ppf(alpha, df)
        
        print("\n step3 : 拒绝区域  [-, %5.3f]"%w)
        
        
        if z<w:
           print("\n step1 4 拒绝H0  红光反应时间小于绿光  ")
        else:
           print("\n step1 4 接受H0   红绿光反应的时间相等   ")
           
        
        
    '''
    单个总体情况
    样本服从标准正太分布,均值未知
    Args
       统计量服从卡方分布
    
    '''    
    def  example_8(self):
        sigma = 5000
        n = 26
        alpha = 0.02
        s= 9200
        
        z = (n-1)*s/sigma
        print("\n 统计量 %5.3f"%z)
        
        df = n-1
        wLeft = chi2.ppf(alpha/2,df)
        wRight = chi2.ppf(1-alpha/2,df)
        
        print("\n step3 : 拒绝区域  [-, %5.3f] [%5.3f +]"%(wLeft,wRight))
        
        
        if z<wLeft or z>wRight:
            print("\n 拒绝H0 有显著的波动")
        else:
            print("\n 接受H0 无显著差异")

    '''
    单个总体情况
    样本服从标准正太分布,均值未知
    Args
       统计量服从卡方分布
    
    '''    
    def  example_9(self):
        
        n1 = 13
        n2 = 8
        alpha = 0.01
        s1 = 0.024**2
        s2 = 0.031**2
        
        
        z= s1/s2
        print("\n 统计量 %5.3f"%z)
        
        df1 = n1-1
        df2 = n2-1
        wLeft = f.ppf(alpha/2,df1,df2)
        wRight = f.ppf(1-alpha/2,df1,df2)
        
        print("\n step3 : 拒绝区域  [-, %5.3f] [%5.3f +]"%(wLeft,wRight))
        
        
        if z<wLeft or z>wRight:
            print("\n 拒绝H0 有显著的波动")
        else:
            print("\n 接受H0 无显著差异")
        
        
        


        
        
        
            
            
        
    def __init__(self):
        pass 
    
if __name__ =="__main__":
    
    hy =hypothesis()
    
    hy.example_9()
    

     

     

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值