zoukankan      html  css  js  c++  java
  • 统计学中的各种检验scipy.stats和statsmodels.stats的使用

    https://www.jianshu.com/p/ec35a505ba90

    这里会罗列一些统计学中的检验方法,当然顺序以笔者遇到的为准。

    1.方差分析

    1.1 概述

    对于均值的检验,一般分为以下几种情况:

    • 某样本均值与常数的比较
    • 两个样本均值的比较
    • 两个以上样本均值的比较
      对于前两种检验,用t检验和z检验完全可以handle,第三种也可以用t/z检验两两进行,但是毕竟耗时,用方差分析就可以解决这个问题了。
      这个问题面试滴滴的时候有被问到,立志做数据科学家的朋友们,还是学习一下。
      比较常用的方差分析方法包括:单因素方差分析、多因素方差分析、协方差分析、多元方差分析、重复测量方差分析、方差成分分析等。

    1.2 常用术语

    • 因素
      因素是方差分析的研究对象,是一个独立的变量,比如饮料的不用颜色就是因素。
    • 水平
      因素的取值就是水平,比如饮料颜色的红、黄、蓝、绿就是水平。
    • 控制变量
      方差分析中可以人为控制的变量,比如饮料的颜色。
    • 随机变量
      与控制变量相对应就是不可以人为控制的变量。
    • 观察变量与观察值
      方差分析中受控制变量和随机变量影响下观察的目标成为观察变量,观测得到的数值就是观察值。饮料再不同颜色的销售额就是观测变量,具体的取值就是观察值。

    1.3 单因素方差分析原理

    进行方差分析的要满足两个前提:

    • 总体服从正态分布
    • 样本满足方差齐性
      方差分析的目的是检验各个样本的均值是否相等,原假设是样本均值相等,备择假设是样本均值不相等。一般来说造成均值差异的原因有两个:
    • 因素水平不同造成的差异,成为系统性误差。
      承接饮料这个案例,饮料颜色就是系统性误差。系统性误差用组间方差来衡量,当然组间方差有可以衡量随机性误差,但主要是为了衡量系统性误差。
    • 样本抽样随机性造成的误差,成为随机性误差。
      同样,饮料在不同商场的销售额也不同,这是随机性误差。随机性误差用组内方差来衡量。
      如果因素水平对观察变量影响不大,那么组间方差只有随机性误差的影响,组间方差和组内方差的比接近于1,相反则大于1,当这个比值大于某个值的时候我们就可以得到显著性差异的结论。方差分析就是通过比较方差做出接受或拒绝原假设的结论。

    1.4 单因素方差分析案例

    饮料案例,我们要观察饮料的不同颜色对销售额是不是有显著的影响,基础数据如下:


     
    基础数据
    • 建立假设
      原假设:饮料颜色对销售额没有显著影响。
      备择假设:饮料颜色对销售额有显著影响。
    • 计算样本均值和总体均值
    • 计算组间方差和和组内方差和
    • 构造F检验统计量
      这里注意自由度的问题:


       
      F检验统计量计算过程
    • 确定检验规则,做出决策
      1)P值检验
      根据F检验统计量计算P值,此处计算的P值为0.000466,小于显著性水平0.05,拒绝原假设,接受备择假设,即饮料颜色对销售额有显著影响。
      P值是根据概率密度函数求的。
      2)临界值
      临界值是根据假设检验类型查表得到的,比如显著性水平α=0.05,是双侧检验,F检验的临界值是3.24,那么计算值F=10.486>3.24,是拒绝原假设,所以认为不同颜色是有显著差异的。

    1.5 python实现方差检验

    很遗憾,python里没有包直接做方差分析,但是自己实现一个类应该是很简单的。
    python里有方差齐性检验的包叫levene,在scipy里,直接调用scipy.stats.levene(rvs1, rvs2)
    -- 2020.4.13更新
    笔者原来说python里没有方差检验的包,笔者说错了,今天无意中发现
    statsmodels.stats.power.FTestAnovaPower是可以进行方差检验的。

    2.t检验

    t检验的概念是通过比较不同数据之间的差值,以观察数据之间有没有显著差异。适用于小样本(30个以下),总体方差未知的情况。
    t检验有几个假设条件:

    • 总体分布服从正态或近似服从正态分布。
    • 检验定量数据,即数据大小是有意义的,对于分类数据的检验请移步卡方检验。
      t检验有以下三种:
    • 单样本t检验,检验单个样本数据与某一个数据是否有显著差异。比如检验灯泡平均寿命是不是等于3000小时。来看一下公式:


       
      标准误差计算方法

       
      单样本t检验计算公式

      这个很简单了,使用python的包就可以求解:
      scipy.stats.ttest_1samp(data,pop_mean)其中,data是样本数据,pop_mean是总体均值。一个小demo如下:

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    from scipy import stats
    data = pd.Series([15.6,16.2 ,22.5 ,20.5 ,16.4 ,19.4 ,16.6, 17.9 ,12.7, 13.9])
    data_mean = data.mean()
    data_std = data.std()
    pop_mean=20
    t,p_towTail = stats.ttest_1samp(data,pop_mean)
    
    • 独立样本t检验
      用于分析定类数据与定量数据之间的关系,如男女生的身高是否有显著差异。独立样本t检验假设样本来自于两个不同的独立总体,但方差相同,除了要求单样本t检验的那些条件,还要求两个样本之间具有方差,需要进行方差齐性检验,参考方差分析。
      计算方法我在网上找了一个ppt讲解的很好:


       
      image.png

      python实现用的是scipy.stats.ttest_ind,来看一个小demo:

    from  scipy.stats import ttest_ind, levene
    import pandas as pd
    x = [20.5, 19.8, 19.7, 20.4, 20.1, 20.0, 19.0, 19.9]
    y = [20.7, 19.8, 19.5, 20.8, 20.4, 19.6, 20.2]
    print(levene(x,y))
    print(ttest_ind(x, y))
    #levene检验p值大于0.05认为是满足方差齐性的,如果不满足则加一个参数equal_var=False
    print(ttest_ind(x,y,equal_var=False))
    
    • 配对样本t检验
      配对样本T检验用于分析配对定量数据之间的差异对比关系,这个就和独立样本t检验区分开了,要求样本量相同且前后顺序要一一对应。比如通过两组数据的对比分析,判断背景音乐是否会影响消费行为。配对样本t检验可以通过差值转化为单样本t检验:


       
      配对样本t检验原理

      python实现用的是scipy.stats.ttest_rel(data1,data2),来看一个小demo:

    from  scipy.stats import ttest_rel
    import pandas as pd
    x = [20.5, 18.8, 19.8, 20.9, 21.5, 19.5, 21.0, 21.2]
    y = [17.7, 20.3, 20.0, 18.8, 19.0, 20.1, 20.0, 19.1]
    # 配对样本t检验
    print(ttest_rel(x, y))
    

    3.Z检验

    Z检验和t检验其实一样,都是对均值进行检验,但是不一样的地方在于Z检验要求样本量比较大,并且总体方差已知。由于t检验不要求总体方差已知,所以t检验的应用范围比较广。Z检验其实和t检验有相同的计算形式:


     
    Z检验的计算公式

    python实现用的是scipy.stats.weightstats.ztest(data1,data2),来看一个小demo:

    import statsmodels.stats.weightstats as sw
    arr=[23,36,42,34,39,34,35,42,53,28,49,39,\
    46,45,39,38,45,27,43,54,36,34,48,36,\
    47,44,48,45,44,33,24,40,50,32,39,31]
    sw.ztest(arr, value=39)
    

    当然了单样本和双样本都可以做。Z检验就不过多介绍了。

    4.F检验

    如果大家还有印象,我们之前用F检验做过方差齐性分析。F检验还有一个广为人知的名字叫联合假设检验,主要用在方差分析中。


     
    计算公式如下

    怎么实现我们之前已经讲过了,用scipy.stats.levene这个准没错。

    5.卡方检验

    卡方检验是用于检验样本实际值与理论值之间是否存在显著差异,原假设是没有显著差异的。举两个好理解的例子:卡方检验可以检验男性或者女性对线上买生鲜食品有没有区别;也可以检验不同城市级别的消费者对买SUV车有没有什么区别。
    具体计算过程可以看这篇文章,讲的很好:卡方检验的实际应用
    python实现用的是scipy.stats.chisquare,来看一个小demo:

    import scipy.stats as ss
    obs=[107,198,192,125,132,248]
    exp=[167]*6
    #拒绝域 1%的显著水平,自由度5
    #jjy=ss.chi2.isf(0.01,5)
    #卡方
    kf=ss.chisquare(obs,f_exp=exp).statistic
    

    6.比率检验

    这个真的是太神奇了,通常用在互联网中,用来比较两个比率有没有显著差异。
    使用A方案的付费转化率为30%,使用B方案的付费转化率为34%,可以检验这两个转化率之间是否有显著不同。本质和z检验一样,把标准差换成了比例而已,可以用单样本也可以用双样本。

     
    比率检验统计量计算公式

    其中π0是总体比率,p是样本比率。
    比率检验的演化
    用python的话调用statsmodels.stats里的相关函数,来看个小demo:
    from statsmodels.stats.proportion import proportion_effectsize
    from statsmodels.stats.power import zt_ind_solve_power
    effect_size=proportion_effectsize(prop1=0.3, prop2=0.4, method=‘normal‘)
    sample_size=zt_ind_solve_power(effect_size=effect_size, nobs1=None, alpha=0.05, power=0.8, ratio=1.0, alternative=‘two-sided‘)
    这个包可以推广到以上的F检验,t检验和Z检验。
    基本上检验的方法和用途都说完了,希望起到启发的作用,大家如有需要可以探索更多假设检验的方法。


    作者:不分享的知识毫无意义
    链接:https://www.jianshu.com/p/ec35a505ba90
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    Expert C programming书摘
    修改文件时间属性的方法
    算法学习, 开始计划
    小游戏学习搜集
    C++ 练习记录2---Effective STL中的vector<bool>
    C++ 练习记录1--vector<T> 中T的初始化
    oracle的wm_concat函数实现行转列
    Oracle批量插入有日期类型数据
    如何将zTree选中节点传递给后台
    第五章:1.数组和广义表 -- 数组
  • 原文地址:https://www.cnblogs.com/dhcn/p/15570986.html
Copyright © 2011-2022 走看看