使用python进行方差分析_python多因素方差分析

使用python进行方差分析_python多因素方差分析利用python实现方差分析简介 方差分析是一种常用的对数据进行分析的方法,用于两个及两个以上样本均数和方差差别的显著性检验。本文介绍单因素方差分析和双因素方差分析。 方差分析存在三个假设: 1、各样本总体服从正态分布。 2、各样本总体方差一样。 3、各样本总体相互独立。单因素方差分析 单因素方差分析就是在只有一种影响因素下判断各个样本间的均值差别的显著性。 数据会…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

利用python实现方差分析

简介

方差分析是一种常用的对数据进行分析的方法,用于两个及两个以上样本均数和方差差别的显著性检验。本文介绍单因素方差分析和双因素方差分析。
方差分析存在三个假设:
1、各样本总体服从正态分布。
2、各样本总体方差一样。
3、各样本总体相互独立。

单因素方差分析

单因素方差分析就是在只有一种影响因素下判断各个样本间的均值差别的显著性。
数据会有一个总的方差(SST),这个方差可分为:因素影响产生(SSA)和由于随机误差产生(SSE)。
单因素方差分析的过程分为5步:
1、做出假设:H0:u1 = u2 = u3=…un。
2、选取置信度:sig。
3、选取测试数据的方法:F分布。
4、利用数据进行计算。
5、通过计算的数据得到的结果做出判断。
计算数学公式如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其中SSE服从自由度为n-k的卡方分布,SSA服从自由度为k-1的卡方分布。n为样本容量,k为影响因素的分组数。最后利用F分布来计算显著度。
通过python可以通过如下方式实现:

#one_way variance analysis for mean
def oneway_var_test(df, sig):
    data = np.array(df)
    x = np.mean(data)
    n = len(data)*len(data[0])
    k = len(data[0])
    m = len(data)
    SStotal = np.var(data)*n
    df_total = n-1
    SSE = np.var(df).sum()*m
    SST = (np.square(np.mean(df)-np.mean(arr))).sum()*m
    df_e = n-k
    df_t = k-1
    MST = SST/df_t
    MSE = SSE/df_e
    F = MST/MSE
    p = stats.f.sf(F,df_t,df_e)
    result = pd.DataFrame(index =['Treatment','Error','Total'],
                          columns = ['Sum of Squares', 'Degree of Freedom', 'Mean Square','F', 'p'])
    result['Sum of Squares'],result['Degree of Freedom']= [SST, SSE, SStotal],[df_t, df_e, df_total]
    result['Mean Square'],result['F'],result['p'] = [MST, MSE,np.nan],[F, np.nan, np.nan],[p, np.nan, np.nan]
    if p < sig:
        print('在显著度为'+str(sig)+'下,组间均值有差异')
    else:
        print('在显著度为'+str(sig)+'下,组间均值无差异')
    print (result)
    return result
	其中输入的df为dataframe, sig为置信度。

双因素方差分析

双因素方差分析是指在两种因素的影响下,判断各个样本间的均值差别的显著性。
数据的总的方差SST可分解为:由因素A影响产生的方差SSA,由因素B影响产生的方差SSB,以及由随机误差影响产生的方差SSE。
双因素方差分析的过程分为5步:
1、做出假设:a)H0:A因素对数据产生的影响为0。H1:A因素对数据产生的影响不为0。
b)H0:B因素对数据产生的影响为0。H1:B因素对数据产生的影响不为0。
2、选取置信度:sig。
3、选取测试数据的方法:F分布。
4、利用数据进行计算。
5、通过计算的数据得到的结果做出判断。
数学公式如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其中SSA服从自由度为k-1的卡方分布,SSB服从自由度为b-1的卡方分布,SSE服从自由度为(k-1)(b-1)
通过python可以通过如下方式实现:

#two_way variance analysis for mean
def twoway_var_test(df, sig):
    data = np.array(df)
    x = np.mean(data)
    n = len(data)*len(data[0])
    k = len(data[0])
    m = len(data)
    SStotal = np.var(data)*n
    SST = (np.square(np.mean(df)-np.mean(arr))).sum()*m
    SSB = (np.square(np.mean(df, axis=1)-np.mean(arr))).sum()*k
    SSE = SStotal - SST - SSB
    df_total = n-1
    df_e = (k-1)*(m-1)
    df_t = k-1
    df_b = m-1
    MST = SST/df_t
    MSE = SSE/df_e
    MSB = SSB/df_b
    FT = MST/MSE
    FB = MSB/MSE
    pt = stats.f.sf(FT,df_t,df_e)
    pb = stats.f.sf(FB,df_b,df_e)
    result = pd.DataFrame(index =['TreatmentT','TreatmentB','Error','Total'],
                          columns = ['Sum of Squares', 'Degree of Freedom', 'Mean Square','F', 'p'])
    result['Sum of Squares'],result['Degree of Freedom']= [SST,SSB,SSE, SStotal],[df_t,df_b,df_e, df_total]
    result['Mean Square'],result['F'],result['p'] = [MST,MSB, MSE,np.nan],[FT,FB,np.nan, np.nan],[pt,pb, np.nan, np.nan]
    if pt < sig:
        print('在显著度为'+str(sig)+'下,T因素对均值有影响')
    else:
        print('在显著度为'+str(sig)+'下,T因素对均值无影响')
    if pb < sig:
        print('在显著度为'+str(sig)+'下,B因素对均值有影响')
    else:
        print('在显著度为'+str(sig)+'下,B因素对均值无影响')
    print (result)
    return result
	其中输入的df为dataframe, sig为置信度。

python编写

编写过程中利用到的库有numpy、pandas、scipy库。利用numpy库和pandas库对数据进行处理和计算,通过scipy库的stats得到F分布的概率的分位点。最后通过同一组数据在excel表格上同样的分析,得到的结果一致,进而确定代码编写成功。

利用excel进行检验结果是否正确

利用到的数据如下:
在这里插入图片描述
对单因素方差分析进行检验:
利用编写函数得到的结果:
在这里插入图片描述
利用excel输出的结果如下:
在这里插入图片描述
对双因素方差分析进行检验:
利用编写函数得到的结果:
在这里插入图片描述
利用excel输出的结果如下: 在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/181774.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 红旗Linux安装_桌面摆台红旗

    红旗Linux安装_桌面摆台红旗红旗Linux桌面版4.0光盘启动安装过程图解(RedFlagLinux4.0)一,准备工作:1,购买或下载红旗Linux桌面版4.0的安装光盘或镜像文件.下载地址:[url]http://www.redflag-linux.com/xiazai/xiazai.php?id=1325[/url]2,在硬盘中至少留2个分区给安装系统用,…

    2022年8月20日
    10
  • 项目管理-5大过程组-10大知识领域-47过程

    项目管理五大过程组:1、启动过程组:获得授权,定义一个新项目或现有项目的一个新阶段,正式开始该项目或阶段的一组过程。2、规划过程组:明确项目范围,优化目标,为实现目标而制定行动方案的一组过程。3、执行过程组:完成项目管理计划中确定的工作以实现项目目标的一组过程。4、监控过程组:跟踪、审查和调整项目进展与绩效,识别必要的计划变更并启动相应变更的一组过程。5、收尾过程组:为完结所有过程组的…

    2022年4月13日
    51
  • labview霍夫曼编码_香农编码与霍夫曼编码[通俗易懂]

    labview霍夫曼编码_香农编码与霍夫曼编码[通俗易懂]一.香农-范诺编码香农-范诺(Shannon-Fano)编码的目的是产生具有最小冗余的码词(codeword)。其基本思想是产生编码长度可变的码词。码词长度可变指的是,被编码的一些消息的符号可以用比较短的码词来表示。估计码词长度的准则是符号出现的概率。符号出现的概率越大,其码词的长度越短。香农-范诺编码算法需要用到下面两个基本概念:(1)熵(Entropy)某个事件的信息量(又称自信息)用Ii…

    2025年9月3日
    6
  • IDEA三种注释快捷键

    IDEA三种注释快捷键三种注释方式  行注释、块注释、方法或类说明注释。一、快捷键:Ctrl+/  使用Ctrl+/,添加行注释,再次使用,去掉行注释二、演示代码if(hallSites!=null&&hallSites.size()>0){//行注释//最大行号intmaxRow=0;//最大列数intmaxCol=0;}块注释一、快捷键:Ctrl+Shift+/  使用Ctr..

    2022年4月30日
    66
  • REPEATER 嵌套

    REPEATER 嵌套http://support.microsoft.com/kb/326338/EN-US/

    2022年7月14日
    15
  • StarUML入门教程

    StarUML入门教程声明 原文链接 StarUML 使用简明教程 作者 栾小邑 StarUML 入门教程 StarUML 简称 SU 是一种创建 UML 类图 生成类图和其他类型的统一建模语言 UML 图表的工具 StarUML 是一个开源项目之一发展快 灵活 可扩展性强 zj StarUML 官方下载地址 http staruml io downloadStar 主界面创建工程在启动 starUML 时 系统会默认帮我们创建一个工程 如果这个工程不是你想要的工程 你可以点击 File gt

    2025年6月30日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号