Python玩转数据分析——单因素方差分析
概念
方差分析(Analysis of Variance,简称ANOVA),又称“变异数分析”或“F检验”,用于两个及两个以上样本均数差别的显著性检验。单因素方差分析即影响试验的因素只有一个。
需要满足的假设
- 样本是独立的。
- 每个样本来自正态分布的总体。
- 各总体的标准偏差都是相等的,即同方差性。
准备数据
将抗生素注入人体会产生抗生素与血浆蛋白质结合的现象,这种结合会降低药效。下表给出了四种常用的抗生素注入到牛的体内时,抗生素与血浆蛋白质结合的百分比。推断不同抗生素的结合百分比是否有显著性差异(设显著性水平为0.05)。
抗生素 | 结合百分比 |
---|---|
A1 | 29.6 , 24.3 , 28.5 , 32.0 , 28.6 , 31.5 , 25.7 |
A2 | 27.3 , 32.6 , 30.8 , 34.8 , 31.4 |
A3 | 21.6 , 17.5 , 18.3 , 19.0 , 23.4 , 14.8 |
A4 | 29.2 , 32.8 , 25.0 , 24.2 , 28.2 , 27.4 |
将数据导入Python:
dic_t=[{'抗生素':'A1','结合百分比':29.6},{'抗生素':'A1','结合百分比':24.3},{'抗生素':'A1','结合百分比':28.5},{'抗生素':'A1','结合百分比':32.0},{'抗生素':'A1','结合百分比':28.6},{'抗生素':'A1','结合百分比':31.5},{'抗生素':'A1','结合百分比':25.7},{'抗生素':'A2','结合百分比':27.3},{'抗生素':'A2','结合百分比':32.6},{'抗生素':'A2','结合百分比':30.8},{'抗生素':'A2','结合百分比':34.8},{'抗生素':'A2','结合百分比':31.4},{'抗生素':'A3','结合百分比':21.6},{'抗生素':'A3','结合百分比':17.5},{'抗生素':'A3','结合百分比':18.3},{'抗生素':'A3','结合百分比':19.0},{'抗生素':'A3','结合百分比':23.4},{'抗生素':'A3','结合百分比':14.8},{'抗生素':'A4','结合百分比':29.2},{'抗生素':'A4','结合百分比':32.8},{'抗生素':'A4','结合百分比':25.0},{'抗生素':'A4','结合百分比':24.2},{'抗生素':'A4','结合百分比':28.2},{'抗生素':'A4','结合百分比':27.4},]
df_t=pd.DataFrame(dic_t)
方差齐性检验
运用Levene方差齐性检验,先对各总体等方差的假设进行检验,代码如下:
def f_homovar(df_c,col_fac,col_sta):df=df_c.copy()list_fac=df[col_fac].unique()for i in list_fac:df.loc[df[col_fac]==i,col_sta]=abs(df[df[col_fac]==i][col_sta]-df[df[col_fac]==i][col_sta].mean())r=len(list_fac)n=df[col_sta].count()x_bar=df[col_sta].mean()list_Qa=[]list_Qw=[]for i in list_fac:series_i=df[df[col_fac]==i][col_sta]xi_bar=series_i.mean()ni=series_i.count()list_Qa.append(ni*(xi_bar-x_bar)**2)list_Qw.append(((series_i-xi_bar)**2).sum())Sa=sum(list_Qa)/(r-1)Sw=sum(list_Qw)/(n-r)F=Sa/Swsig=stats.f.sf(F,r-1,n-r)dic_res=[{'Levene Statistic':F,'df1':r-1,'df2':n-r,'Sig.':sig}]df_res=pd.DataFrame(dic_res,columns=['Levene Statistic','df1','df2','Sig.'])return df_res
f_homovar(df_t,'抗生素','结合百分比')
结果如下:
由于p值 Sig.= 0.979 > 0.05,故可以认为各总体方差相等。
单因素方差分析
接下来进行单因素方差分析,代码如下:
def f_oneway(df_c,col_fac,col_sta):df=df_c.copy()list_fac=df[col_fac].unique()r=len(list_fac)n=df[col_sta].count()x_bar=df[col_sta].mean()list_Qa=[]list_Qw=[]for i in list_fac:series_i=df[df[col_fac]==i][col_sta]xi_bar=series_i.mean()ni=series_i.count()list_Qa.append(ni*(xi_bar-x_bar)**2)list_Qw.append(((series_i-xi_bar)**2).sum())Sa=sum(list_Qa)/(r-1)Sw=sum(list_Qw)/(n-r)F=Sa/Swsig=stats.f.sf(F,r-1,n-r)df_res=pd.DataFrame(columns=['方差来源','平方和','自由度','均方','F值','Sig.'])df_res['方差来源']=['组间','组内','总和']df_res['平方和']=[sum(list_Qa),sum(list_Qw),sum(list_Qa)+sum(list_Qw)]df_res['自由度']=[r-1,n-r,n-1]df_res['均方']=[Sa,Sw,'-']df_res['F值']=[F,'-','-']df_res['Sig.']=[sig,'-','-']return df_res
f_oneway(df_t,'抗生素','结合百分比')
结果如下:
由于p值 Sig.= 0.000 < 0.05,故可以认为不同抗生素的结合百分比有显著差异。
Python玩转数据分析——单因素方差分析相关推荐
- 用python玩转数据测试与作业_用Python玩转数据分析10
MOOC上的课程<用Python玩转数据分析>的学习笔记. 数据探索与预处理之数据清洗 数据探索包括检查数据错误,了解数据分布特征和内在规律 数据预处理包括数据清洗,数据集成(integr ...
- 四大会计师事务所python数据分析_用Python玩转数据分析4
MOOC上的课程<用Python玩转数据分析>的学习笔记. 序列序列中的每一个元素都有它的一个索引,N长的序列中元素的索引从[0]到[N-1]或者从[-1]到[-N]. 字符串,用''表示 ...
- R语言基础数据分析—单因素方差分析
有了试验数据,我们就需要进行数据的处理与分析,而在试验设计中,通常分为单因素试验或者双因素试验.试验中要考察的指标称为试验指标,影响试验指标的条件称为因素,因素所处的状态称为水平,若试验中只有一个因素 ...
- Python玩转数据分析——双因素方差分析
概念 方差分析(Analysis of Variance,简称ANOVA),又称"变异数分析"或"F检验",用于两个及两个以上样本均数差别的显著性检验.双因素方 ...
- Python笔记-方差分析之单因素方差分析
这个单因素分析一般是用来研究不同行业股票收益水平. 比如下面的代码: from statsmodels.stats.anova import anova_lm from statsmodels.for ...
- Python玩转数据分析——T检验
概念 T检验,也称 student t 检验 ( Student's t test ) ,用来比较两个样本的均值差异是否显著,通常用于样本含量较小 ( n < 30 ) 的样本.分为单样本 t ...
- 用python玩转办公软件(pandas数据分析)入门
用python玩转办公软件(pandas数据分析)入门 文章目录 用python玩转办公软件(pandas数据分析)入门 1.pandas介绍 2.csv文件介绍 3.pandas常用操作csv (1 ...
- 慕课《用Python玩转数据》之B站弹幕数据分析
慕课<用Python玩转数据>之B站弹幕数据分析 1.源代码 # -*- coding: utf-8 -*- """ Created on Wed May 1 ...
- Python 玩数据分析:统计 Excel 并用 Matplotlib 绘图
Python 玩数据分析:统计 Excel 并用 Matplotlib 绘图 数据无处不在 我希望我懂得如何使用基本的电子公式 一图胜千言 完整代码 作者:高玉涵 时间:2022.6.19 11: ...
最新文章
- 【Spring】基于xml实现事务控制(银行转账)
- 魅族手机使用鸿蒙系统,魅族宣布接入华为鸿蒙系统,这应该是黄章最正确的决定...
- [RHEL5企业级Linux服务攻略]--第6季 Vsftpd服务全攻略之常规配置
- html逻辑判断符,JavaScript中的逻辑判断符、||与!介绍
- Spring-Cloud中常见的服务组件
- excel统计行数_值得收藏的6个Excel函数公式(有讲解)
- NB-IoT/LoRa是新技术?其实30年前就已经出现了
- 简单开发一个java 插件式demo
- Linux的磁盘配额设置
- 【Matplotlib】 移动spines
- SpringBoot非官方教程 | 第二十篇: 处理表单提交
- python scipy.optimize.minimize多变量多参数优化
- dava靶场远程命令执行
- 如何判断Convex Set(凸集)、Convex Function(凸函数)
- 数据信息系统的计算机应用,管理信息系统与计算机应用.ppt
- L*a*b 颜色空间
- 电脑识别不到硬盘的问题
- 关于seo怎样才能优化网站(seo网站优化如何做)
- Google 管理层 正式信息
- 用java编写输出欢迎光临_编写一个完整的Java applet程序,程序功能为:在屏幕上输出“欢迎光临Java世界!”的字符串信息。...