利用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)*ndf_total = n-1SSE = np.var(df).sum()*mSST = (np.square(np.mean(df)-np.mean(arr))).sum()*mdf_e = n-kdf_t = k-1MST = SST/df_tMSE = SSE/df_eF = MST/MSEp = 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)*nSST = (np.square(np.mean(df)-np.mean(arr))).sum()*mSSB = (np.square(np.mean(df, axis=1)-np.mean(arr))).sum()*kSSE = SStotal - SST - SSBdf_total = n-1df_e = (k-1)*(m-1)df_t = k-1df_b = m-1MST = SST/df_tMSE = SSE/df_eMSB = SSB/df_bFT = MST/MSEFB = MSB/MSEpt = 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输出的结果如下:

利用python实现方差分析相关推荐

  1. 利用Python进行数据分析笔记-pandas建模(statsmodels篇)

    跟着教程学习了一段时间数据分析,越学感觉坑越多.于是花了一个星期仔细看了下<利用Python进行数据分析>.写在这里主要是记录下,方便自己查看. statsmodels简介 statsmo ...

  2. 利用python进行数据分析学习笔记

    利用python进行数据分析 numpy:数组与向量化计算 pandas pandas读取和写入数据集及文件格式 数据清洗与准备 数据规整:连接.联合和重排列 绘图与可视化 数据聚合与分组操作 时间序 ...

  3. 《利用python进行数据分析》读书笔记

    <利用python进行数据分析>是一本利用python的Numpy.Pandas.Matplotlib库进行数据分析的基础介绍,非常适合初学者. 重要的python库 NumPy http ...

  4. 利用Python进行数据分析(Ⅴ)

    利用Python进行数据分析(Ⅴ) 本文参考书籍:<利用Python进行数据分析> 目录 利用Python进行数据分析(Ⅴ) 13.Python建模库介绍 13.1 pandas与建模代码 ...

  5. 统计系列(四)利用Python进行假设检验

    统计系列(四)利用Python进行假设检验 z检验 主要应用场景:在大样本量的总体比例检验 核心:两样本的总体比例差异 单样本比例检验 # 检验样本合格率与0.38是否有差异 import numpy ...

  6. mysql数据导入python_利用python将mysql中的数据导入excel

    原博文 2017-06-29 13:29 − Python对Excel的读写主要有xlrd.xlwt.xlutils.openpyxl.xlsxwriter几种. 如下分别利用xlwt和openpyx ...

  7. python 物理学中的应用_利用python求解物理学中的双弹簧质能系统详解

    前言 本文主要给大家介绍了关于利用python求解物理学中双弹簧质能系统的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 物理的模型如下: 在这个系统里有两个物体,它们的质 ...

  8. 怎么用python找论文_如何利用Python绘制学术论文图表方法

    论文中图表形式多样,常用的处理工具有excel.MATLAB以及Python等,excel自处理的方法有两个缺陷: 1.当数据较多时,容易出现excel"翻白眼"的现象: 2.需要 ...

  9. 在Ubuntu 16.04.5 LTS上利用python中的PIL模块压缩一百多兆的单张图片实操

    在前面的博文中,我将300多张电影海报拼接为了一张103MB的巨幅图片,我想拿它做电脑桌面(1080P),但是这么多的图片,存储和加载是个麻烦事儿,需要将它压缩到几MB大小. 在Ubuntu 16.0 ...

  10. 在Linux上利用python获取本机ip

    下面介绍在Linux上利用python获取本机ip的方法. 经过网上调查, 发现大致有两种方法, 一种是调用shell脚本,另一种是利用python中的socket等模块来得到,下面是这两种方法的源码 ...

最新文章

  1. 程序员兄弟们,我们的基本素质怎么样?
  2. oracle PL/SQL
  3. wdcp后台重启服务器后mysql打不开
  4. mybatis mysql crud_Mybatis实现CRUD操作
  5. VTK:图片之DotProduct
  6. SQL Server2008存储结构之聚集索引
  7. 程序员面试金典 - 面试题 17.14. 最小K个数(快排划分O(n))
  8. mysql general clomun_关于MySQL索引index杂谈
  9. Python 下划线
  10. 按键检测框架单击-双击-连按
  11. Google面试题——蓄水问题
  12. word中如何优雅的显示代码
  13. 符合c语言语法规定的是,若变量已正确定义并赋值,符合C语言语法的表达式是 A。a=a+7; B.a=7+b+c,a++...
  14. 综述: 通信雷达一体化中的信号处理
  15. 期货市场的大户黑手(最大的是华尔街 高盛之流)
  16. 大小写转换(金额转换)
  17. Linux 文件系统
  18. CMOS图像传感器的参数和评价标准
  19. org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.ljw
  20. 一文弄懂区块链技术原理

热门文章

  1. 最新kali之arping
  2. 104规约使用总结(三)——报文解析
  3. iec104点号_IEC104规约流程
  4. 了解SINAD、ENOB、SNR、THD、 THD + N、SFDR,不在噪底中迷失
  5. linux平台使用doxygen生成项目文档
  6. 转发表(MAC表)、ARP表、路由表总结
  7. fastdfs原理简析
  8. 如何轻松破解windows密码(运行即可,免重启)
  9. 路由器不开机——维修更换MT7621AT CPU
  10. w3school离线手册