zoukankan      html  css  js  c++  java
  • 第四节 有序分类变量的比--非参数方法

    参数统计方法的局限

      需要事先明确假定的总体分布:t检验,方差分析

      总体分布未知,或分布不符合要求时无法使用,比如时间明显是偏态分布的

      结果为有序分类变量时无法使用

      样本数据两端有不确定值,比如实验测含量,含量很低时无法用精确数值表示,只能说小于某个数值

    非参数分析方法的特点

      不依赖总体分布的具体形式

      不是对分布参数进行估计或者假设检验,而是对总体的分布位置/形状进行估计或者假设检验

      适用范围广,几乎用于任何情况

      当资料符合参数检验方法的适用条件时,使用非参数方法的检验效能较低,效能最高的秩和检验效能可达到参数方法的90%~95%

    非参方法的两种分类

      分布类型/形状的检验方法,亦称为拟合优度检验方法,检验样本所在总体是否服从已知的理论分布

        多项分类变量分布的卡方检验

        二项分类变量分布的二项分布检验

        考察连续变量是否服从各种常用分布的单样本K-S检验

        检验样本序列随机性的Runs(游程)过程

      分布的中心位置的检验方法,检验样本所在的总体的分布位置(集中趋势)是否相同,平时说的非参数检验方法实际上就是指这一类方法

        两个独立样本/多个独立样本中心位置的检验

          秩和检验:用的最多,检验效能最高

          中位数检验:检验效能很低,一般不用

          两样本的K-S检验:不只是检验集中趋势,同时考察总分分布情况

        两相关样本(配对)/多个相关样本中心位置(配伍)的检验

          配对秩和检验

          配伍Friedman双向秩方差分析:校验效能很低,实际使用价值不大

    非参数检验的一些概念

      首先明确数据确实无法使用效率更高的参数方法

      可以考虑使用的信息量

        中位数:大于/小于基于H0的中位数的样本个数分布是否均匀

        次序关系:数值和中位数的距离可以提供进一步的信息

      顺序统计量:非参数检验的理论基础

        通过对数据从小到大排序,并用排序号代替原始数值进行统计分析

      秩(Rank):排序号在统计学上称为秩(秩次)

      结(ties):绝对值相等称为结,又称同秩,一般取平均秩次

    成组样本比较的非参数方法

      Wilcoxon两样本秩和检验

        H0:两总体所在中心位置相等,中位数可以代表中心位置,但是只使用中位数的话信息量太少

        基于H0假定:混合编秩,分组求秩和

        考察各组秩和的大小是否明显偏离H0

        在非参数检验方法中效能最高

      Mann-Whitney U:大u检验使用更多,计算效能更高

        大样本下基本等价于两样本秩和检验

        可近似理解为基于秩次进行了两样本的t检验

      Kolmogorov-Smirnov Z

        两样本的K-S检验,检验效能不高

        考察的是整个分布是否相同,而不是只针对中心位置,即使中心位置相同也会得出总体分布不一致的结论

      Kruskal-Wallis H检验

        本质上就是基于秩次的单因素方差分析,可用于两组或者多组

        多组比较的事后两两比较

          本质上仍需要考虑如何控制总的一类错误

          样本量较小时,因为非参本身会损失样本信息,所以统计学家倾向于不做检验水准的校正

    import scipy.stats as ss
    # 两两比较的非参数方法
    # ss.median_test()  中位数检验,两组或者多组时均可使用
    # ss.ranksums(a, b)  wilcox秩和检验,相对使用较少
    # ss.mannwhitneyu(a, b, use_continuity, alternative) a,b要比较的序列值,use_continuity是否进行连续性的校正,默认true,大样本无所谓小样本一定要,alternative指的是进行单侧还是双侧
    # ss.ks_2samp(data1, data2) 两样本ks检验
    ss.mannwhitneyu(ccss.Qa3[ccss.s7=='未婚'], ccss.Qa3[ccss.s7=='已婚'])  # statistic大u统计量
    MannwhitneyuResult(statistic=121516.5, pvalue=0.0016970638386570689)

    ss.ranksums(ccss.Qa3[ccss.s7=='未婚'], ccss.Qa3[ccss.s7=='已婚'])  # p值同大u相比有变化,但是给出的统计结论是相同的
    RanksumsResult(statistic=2.7604079036339764, pvalue=0.005772923211835386)

    vss.median_test(ccss.Qa3[ccss.s7=='未婚'], ccss.Qa3[ccss.s7=='已婚'])  # p值大于0.05,统计结论跟大u相反,可见检验效能非常低,尽量少使用
    (2.6726310409335143, 0.10208713262673606, 100.0, array([[158, 321],
            [185, 469]], dtype=int64))

    ss.ks_2samp(ccss.Qa3[ccss.s7=='未婚'], ccss.Qa3[ccss.s7=='已婚'])  # ks检验的是总体分布的形状是否一致,在空间上找两个分布差异最大的作为检验统计量,因此检验效能较低,很浪费样本信息量
    Ks_2sampResult(statistic=0.07164630770934052, pvalue=0.16475982515811638)

    # 多组样本比较
    # ss.kruskal(sample1, sample2,.....,nan_policy='propagate')  # propagate,缺失值处理
    ss.kruskal(ccss.query("s0 =='北京' & time=='200704'").Qa3,
               ccss.query("s0 =='北京' & time=='200712'").Qa3,
               ccss.query("s0 =='北京' & time=='200812'").Qa3,
               ccss.query("s0 =='北京' & time=='200912'").Qa3
              )  # p值显示四组中是有差异的,所以要进行事后的两两比较
    KruskalResult(statistic=11.773756778518651, pvalue=0.008199757256201149)

    # 事后的两两比较
    ss.mannwhitneyu(ccss.query("s0 =='北京' & time=='200704'").Qa3,
               ccss.query("s0 =='北京' & time=='200712'").Qa3)
    MannwhitneyuResult(statistic=4576.5, pvalue=0.11076591017086002)

    ss.mannwhitneyu(ccss.query("s0 =='北京' & time=='200704'").Qa3,
               ccss.query("s0 =='北京' & time=='200812'").Qa3)  # 这两组有区别
    MannwhitneyuResult(statistic=4108.0, pvalue=0.0047485836175626865)

    ss.mannwhitneyu(ccss.query("s0 =='北京' & time=='200704'").Qa3,
               ccss.query("s0 =='北京' & time=='200912'").Qa3)
    MannwhitneyuResult(statistic=3543.5, pvalue=0.24866367569455522)

    连续型变量两配对样本比较:wilcoxon符号秩检验,一般不是用的很多,因为连续型变量一般都不违反正态性等,可以使用参数方法

      求出各组配对差值

      基于H0假定成立,差值应当围绕0上下对称分布

      按照差值绝对值计算秩次,然后分正、负组分别计算秩和

      考察正负秩和的大小是否明显偏离H0

    配伍样本比较的非参方法

      Fridman双向秩方差分析,校验效能差,只使用于连续型分类变量或者有序分类变量

      Kendall`s W 主要用于计算Kendall和协系数,用于表示K个指标间的关联程度

      Cochran`s Q 是McNemar检验针对多组的推广,只适用于两分类资料

    # 配对样本非参方法实现
    # ss.wilcoxon(a, b, zero_method='wilcox', correction=False)  # zero_method参数,pratt检验中包含0差值相对保守,wilcox丢弃0差值,一般选这个作为检验效能低的补偿,zsplit将0差值对半分入两组
    ccss_p = pd.read_excel(r"E:360DownloadsSoftware	ableauCCSS_Sample.xlsx", sheet_name='CCSS_pair')
    ccss_p.head()
     timeids2s3Qa3Qa4Qa8Qa10Qa16index1index1aindex1bQa3nQa4nQa8nQa10nQa16nindex1nindex1anindex1bn
    0 200704 22 2 59 100 100 100 100 50 70.296024 66.026939 72.642743 50 100 100 100 100 70.296024 66.026939 72.642743
    1 200704 40 2 28 150 150 150 150 100 109.349371 110.044898 108.964114 150 100 100 200 100 101.538702 110.044898 96.856991
    2 200704 45 1 55 100 50 50 100 200 78.106694 132.053878 48.428495 150 100 150 150 100 101.538702 110.044898 96.856991
    3 200704 69 1 26 150 200 150 50 100 101.538702 110.044898 96.856991 150 100 150 200 200 124.970710 154.062858 108.964114
    4 200704 98 1 63 100 200 150 150 100 109.349371 88.035919 121.071238 150 150 100 0 100 78.106694 110.044898 60.535619
    ss.wilcoxon(ccss_p.Qa4, ccss_p.Qa4n)
    WilcoxonResult(statistic=414.0, pvalue=0.02601583794073107)


    ss.wilcoxon(ccss_p.Qa8, ccss_p.Qa8n)
    WilcoxonResult(statistic=400.0, pvalue=0.03382421088468342)


    ss.wilcoxon(ccss_p.Qa10, ccss_p.Qa10n)
    WilcoxonResult(statistic=699.5, pvalue=0.6937576785525135)

    # 配伍样本,frifriedman卡方检验,至少需要提供三组数据
    ss.friedmanchisquare(ccss.query("s0=='北京' & time=='200704'").Qa4[:10],
                        ccss.query("s0=='北京' & time=='200712'").Qa4[:10],
                         ccss.query("s0=='北京' & time=='200812'").Qa4[:10],
                         ccss.query("s0=='北京' & time=='200912'").Qa4[:10],
                        )
    FriedmanchisquareResult(statistic=5.833333333333344, pvalue=0.12000654765321411)


    秩变换分析的基本原理

      秩和检验方法都可以看作是基于H0假设求出秩次,然后对秩次完成相应的参数检验

      秩变换分析方法,就是利用这一原理,基于H0假设成立的情况,先求原变量的秩次,然后使用秩次代替原变量进行参数分析

      当样本量较大时,其分析结果和相应的非参数方法基本一致,差别在于秩变换没有做关于总体等的一些校正,所以p值会略有不同,但不影响结果

      但是该方法可以进一步充分利用已知的参数方法,如多组样本的两两比较、多变量回归,从而大大扩展了非参数分析方法的范围

    秩变换分析的优缺点

      有点

        使用范围广,样本量充足的情况下均可使用

        分析结果更为稳健,不易受极端值的影响

      缺点

        检验效能相对稍低,存在信息损失,不适用于中小样本

        而且其分析结果相对没有那么“定量”,毕竟其描述的是影响因素对因素对因变量秩次的作用,而不是对因变量本身的作用

    # ss.rankdata(a, method='average')  # method对结的处理方式,默认average取对应秩次的平均值最好不要对结的方式进行修改,min/max取对应秩次的最小/最大值,dense所有相同的数值只赋予一个秩次,随后继续流水编号,ordinal按照数值出现的顺序依次赋予不同的秩次
    dfrank = ccss.loc[ccss.s0=='北京', ['time', 'Qa3']]
    dfrank.head()
     timeQa3
    0 200704 100
    1 200704 100
    3 200704 150
    5 200704 200
    6 200704 100

     

     

     

     

     

     

     

    # 编秩要基于H0假设
    dfrank["qa"] = ss.rankdata(dfrank.Qa3)
    dfrank.head()
    ss.f_oneway(dfrank[dfrank.time==200704].qa3r,
                dfrank[dfrank.time == 200712].qa3r,
                dfrank[dfrank.time == 200812].qa3r,
                dfrank[dfrank.time == 200912].qa3r
               )
    # 进行两两比较
    import scikit_posthocs as sp
    sp.posthoc_conover(dfrank, val_col='qa3r', group_col='time', p_adjust='bonferroni')
     200704200712200812200912
    200704 -1.000000 1.000000 0.054946 1.000000
    200712 1.000000 -1.000000 1.000000 0.349435
    200812 0.054946 1.000000 -1.000000 0.010739
    200912 1.000000 0.349435 0.010739 -1.000000
  • 相关阅读:
    Spring在代码中获取bean的几种方式
    SpringBoot学习:获取yml和properties配置文件的内容(转)
    SpringBoot 使用 @Value 从 YAML文件读取属性(转)
    SpringBoot yml 配置
    Springboot+shiro配置笔记+错误小结
    shiro退出登陆清空缓存实现
    springboot(十四):springboot整合shiro-登录认证和权限管理(转)
    Apache Shiro 简单概念
    漫步Facebook开源C++库Folly之string类设计(散列、字符串、向量、内存分配、位处理等,小部分是对现有标准库和Boost库功能上的补充,大部分都是基于性能的需求而“重新制造轮子”)
    Windows Vista 的历史地位
  • 原文地址:https://www.cnblogs.com/kogmaw/p/12681747.html
Copyright © 2011-2022 走看看