前言:

目录

一 卡方分布

二  双边假设检验

三  单边假设检验

四  例子

一 卡方分布

     

     n 个随机变量均符合标准正态分布,则其平方和符合自由度为n的卡方分布

     

    重要性质

     

二  双边检验

     2.1   假设

         

    2.2   统计量

            

    2.3    拒绝域

             k1 =chi2.ppf(alpha/2)   k2=chi2.ppf(1-alpha/2)

              

               其中: k1 可以通过

             

    P值法

     

      

      由于是双边检验

      P_= 2*min(p,1-p)

三  单边检验

      小写的s是样本方差

      1: 左边检验

              1.1  假设  

               1.2 统计量  

               

              1.3 拒绝域

                    

                    

                     这里分位数代表下分位数,如果是上分位数写法为

              1.4 P值法

                      

      2: 右边检验

            

 

              2.1  假设

                      

                     

              2.2 统计量  

                      

              2.3 拒绝域

                          

                

                            这里分位数代表下分位数,如果是上分位数写法为

              2.4 P值法

                       

                      

 

四  例子:

    4.1  

 解:

      这是左边检验

     step1   

       step2 :统计量

        

       统计量 14.57  

   step3:  在置信度为0.05,自由度为 24 情况下

        分位数 13.848 

    step4

            原假设成立 

      
# -*- coding: utf-8 -*- """ Created on Sat Jul 31 10:26:06 2021 @author:
chengxf2 """ import numpy as np from scipy.stats import chi2 import
matplotlib.pyplot as plt from sklearn.datasets import load_iris from
sklearn.preprocessing import StandardScaler ''' 统计量 args df: 自由度 s: 样本方差 sigma:
方差 ''' def GetZ(df,s,sigma): z = df*s/sigma return z def GetQ(alpha, df): q =
chi2.ppf(alpha,df)# -*- coding: utf-8 -*- """ Created on Sat Jul 31 10:26:06
2021 @author: chengxf2 """ import numpy as np from scipy.stats import chi2
import matplotlib.pyplot as plt from sklearn.datasets import load_iris from
sklearn.preprocessing import StandardScaler ''' 统计量 args df: 自由度 s: 样本方差 sigma:
方差 ''' def GetZ(df,s,sigma): z = df*s/sigma return z def GetQ(alpha, df): q =
chi2.ppf(alpha,df) return q if __name__=="__main__": n= 25 s= 4.25 df = n-1
sigma = 7 alpha = 0.05 z = GetZ(df,s,sigma) q =GetQ(alpha, df) print("\n 统计量
%5.2f"%z,"\t 分位数 %5.3f "%q) if z>q: print("\n 原假设成立 ") else: print("\n 拒绝原假设")
return q if __name__=="__main__": n= 25 s= 4.25 df = n-1 sigma = 7 alpha = 0.05
z = GetZ(df,s,sigma) q =GetQ(alpha, df) print("\n 统计量 %5.2f"%z,"\t 分位数 %5.3f
"%q) if z>q: print("\n 原假设成立 ") else: print("\n 拒绝原假设")
 

 4.2 鸢尾花 数据集种,每个维度归一化后,其平方和可以假设符合卡方分布

检验临界值法和P值法效果是否一样,找出分布异常的点。

解:

 

 

    通过代码 ,其效果完全一致。
# -*- coding: utf-8 -*- """ Created on Fri Jul 30 16:39:08 2021 @author:
chengxf2 """ import numpy as np from scipy.stats import chi2 from
sklearn.datasets import load_iris from sklearn.preprocessing import
StandardScaler ''' 检验: args x_std: 每一列的数据都是标准的正太分布 ''' def check(x_std,
alpha=0.01): if alpha > 0.5: print("\n ========error=========") return m, n =
np.shape(x_std) df = n # 自由度 low = chi2.ppf(alpha/2, df) # 左边拒绝域 up =
chi2.ppf(1-alpha/2, df) # 右边拒绝域 for i in range(m): x = x_std[i] # 样本 a =
np.power(x, 2) # 样本平方 b = np.sum(a) # 随机变量的平方和符合卡方分布 # p = 2*chi2.sf(b,df)
#1-CDF 累计积分 ,双边分布的p值法 p = chi2.cdf(b, df) p_ = 2 * min(p, 1.0-p) bReject_p =
False bReject_N = False if p_ < alpha: bReject_p = True if b < low or b > up:
bReject_N = True if bReject_p != bReject_N: print("\n P值法 %4.3f i: %d " % (p,
i)) ''' 标准化 Args data: 数据集 return x_std: 样本标准化后的情况 u: 每个维度的均值 std:
每个维度的无偏标准差ddof = 0(n无偏);1(n-1) ''' def standardization(data): #x_std =
StandardScaler().fit_transform(data) scaler = StandardScaler().fit(data) x_std
= scaler.transform(data) print("\n data ", np.shape(x_std)) u = scaler.mean_
sig = scaler.scale_ #print("\n 维度均值: ", u, "\t 维度方差 ", sig) ''' m, n =
np.shape(data) for i in range(n): x = data[:, i] u = np.mean(x) sigma =
np.std(x,ddof=0) print("\n i %d u: %5.2f sigma %5.3f" % (i, u, sigma)) '''
return x_std, u, sig ''' 均值方差归一化 Standardization 加载数据集 Args None iris:
['target_names', 'data', 'target', 'DESCR', 'feature_names'] return ''' def
LoadData(): data = load_iris() feature = data['data'] m, n = np.shape(feature)
return feature if __name__ == "__main__": data = LoadData() x_std =
standardization(data) check(x_std[0], 0.01)

  

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信