使用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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java的四种输入方法,你会几种?

    java的四种输入方法,你会几种?java的输入方法最常见的就是Scanner的方法,我经过查阅一些资料发现了输入方法原来还有那么多种,可以玩出不少花样,下面是我总结出的四种输入方式,有需要的可以拿去1.Scanner相关的功能Scanner的输入方法是最常见的一种,也是小编在此最推荐的一种,固定格式如下:importjava.util.Scanner;publicclassTestDemo1007_4{publicstaticvoidmain(String[]args){Scanner

    2022年7月9日
    107
  • 解决微信小程序errcode:40029[通俗易懂]

    解决微信小程序errcode:40029[通俗易懂]第一次接触微信小程序,喜提errcode:40029errmsg:”invalidcode,hints:[req_id:6HfBbZyFe-8y]场景:写完接口之后前端联调一直500,最后发现是获取的时候微信报错了。解决办法:导入项目的时候appid要填入你请求session_key的appid,如图所示(我这个开发者工具是旧版的)还有一种解决方法是其他文章找…

    2022年5月24日
    356
  • 零基础入门STM32编程(二)

    零基础入门STM32编程(二)前情回顾上篇文章初步认识了STM32,了解了STM32的分类及型号命名规则,本篇内容继续STM32串口编程入门学习。一走进STM321.1STM32系列STM32单片机分为四类五种,四类介绍参见上一篇文章,本文仅阐述五个系列,分别为:STM32F0系列是针对8位和16位微控制器的32位MCU替代产品,对于工程人员来说非常有吸引力,他们希望其产品平台不会过时,并可围绕工业标准ArmCortex-M0内核进行标准化开发。 STM32G0系列是基于ArmCortex-M0+核心的新..

    2022年9月7日
    3
  • ping命令详解 ping命令入门详解

    ping命令详解 ping命令入门详解在这个时代,科技越来越发达,网络已经越来越成为人们不可缺少的一部分。计算机也已经是很多学校的课程了,因为计算机技术是非常有技术性的专业,它其中涉及到很多专业知识,需要通过学习才能掌握。今日小编就为大家介绍一个计算机的命令,它叫做Ping,这边介绍一下它的入门知识,主要是关于ping连接和命令方面的介绍。  1、Ping的基础知识  ping命令相信大家已经再熟悉不过了,但是能把ping的功能发…

    2022年9月22日
    7
  • openCV中cvSnakeImage()函数代码分析

    openCV中cvSnakeImage()函数代码分析/*M///////////////////////////////////////////////////////////////////////////////////////////IMPOR

    2022年7月3日
    21
  • Node.js的安装及环境配置【超详细】

    Node.js的安装及环境配置【超详细】Step1:去官网下载安装包下载方式1:官网下载根据自己电脑系统及位数选择。注意:图中.msi和.zip格式区别:1、.msi是Windowsinstaller的数据包,实际上是一个数据库,提供安装,修改,卸载你所安装的程序。此外:它还包含有关安装过程本身的信息。例如:安装序列、目标文件夹路径、安装选项和控制安装过程的属性。2、.zip是一个压缩包,解压之后即可,不需要安装。…

    2022年6月11日
    38

发表回复

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

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