前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python单因素方差分析实例

python单因素方差分析实例

作者头像
用户7010445
发布2020-03-03 14:58:27
2.9K0
发布2020-03-03 14:58:27
举报
试验设计

探究施肥是否会对促进植株生成(植株生长以树高作为指标来衡量)。试验为:

  • 对照组:清水
  • 实验组: 某肥料四个浓度梯度,分别是A,B,C,D,施肥一段时间之后测量树高(要控制其他变量保持一致,比如施肥之前的树高要基本保持一致,生长势基本保持一致等等)

做方差分析的时候数据需要满足正态分布;方差齐性等。正常拿到数据后需要对数据是否符合正态分布和组间方差是否一致做检验。如何来做以上两个检验今天先忽略掉,在默认拿到的数据符合条件后直接在做单因素方差分析。

模拟生成数据

使用numpy模块模拟生成5组,每组100个正态分布数据 正态分布函数参数依次是均值,标准差、数据的个数

代码语言:javascript
复制
import numpy as np
df = {'ctl':list(np.random.normal(10,5,100)),
      'treat1':list(np.random.normal(15,5,100)),\
      'treat2':list(np.random.normal(20,5,100)),\
      'treat3':list(np.random.normal(30,5,100)),\
      'treat4':list(np.random.normal(31,5,100))}
#组合成数据框
import pandas as pd
df = pd.DataFrame(df)
df.head()

  ctl     treat1     treat2     treat3     treat4
0  9.614605  15.719777  17.068697  23.842793  32.206690
1  7.617131  20.481499  14.880172  29.685766  29.372065
2  5.078861  13.683188  20.780142  25.123814  29.500179
3  4.749667  13.209488  15.390307  37.757911  27.912748
4  5.167490  20.374576  18.669367  33.772163  34.394511
箱线图展示一下数据
代码语言:javascript
复制
df.boxplot(grid = False)
import matplotlib.pyplot as plt
plt.show()

1.png

转化数据格式

数据格式整理为一列为处理,一列为数值的形式

代码语言:javascript
复制
df_melt = df.melt()
df_melt.head()

variable     value
0      ctl  9.614605
1      ctl  7.617131
2      ctl  5.078861
3      ctl  4.749667
4      ctl  5.167490

df_melt.columns = ['Treat','Value']
df_melt.head()

  Treat     Value
0   ctl  9.614605
1   ctl  7.617131
2   ctl  5.078861
3   ctl  4.749667
4   ctl  5.167490
使用seaborn模块绘制箱线图
代码语言:javascript
复制
import seaborn as sns
sns.boxplot(x='Treat',y='Value',data = df_melt)

2.jpg

方差分析
代码语言:javascript
复制
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm
model = ols('Value~C(Treat)',data=df_melt).fit()
anova_table = anova_lm(model, typ = 2)
print(anova_table)

               sum_sq     df           F         PR(>F)
C(Treat)  34622.433013    4.0  351.230458  4.926641e-143
Residual  12198.617718  495.0         NaN            NaN

方差分析的结果我们需要看P值,本例中P值等于4.926641e-143小于0.05,说明处理间存在显著差异,具体哪个处理间存在差异还需要通过多重检验来看。

多重检验

比较常用的检验方法是邓肯多重检验(Tukey HSD test)

代码语言:javascript
复制
from statsmodels.stats.multicomp import MultiComparison
mc = MultiComparison(df_melt['Value'],df_melt['Treat'])
tukey_result = mc.tukeyhsd(alpha = 0.5)
print(tukey_result)


Multiple Comparison of Means - Tukey HSD,FWER=0.50
=============================================
group1 group2 meandiff  lower   upper  reject
---------------------------------------------
 ctl   treat1  4.4997   3.379   5.6204  True 
 ctl   treat2  9.498    8.3773 10.6186  True 
 ctl   treat3  19.831  18.7103 20.9517  True 
 ctl   treat4 21.1355  20.0148 22.2562  True 
treat1 treat2  4.9983   3.8776  6.1189  True 
treat1 treat3 15.3313  14.2106  16.452  True 
treat1 treat4 16.6358  15.5151 17.7565  True 
treat2 treat3  10.333   9.2124 11.4537  True 
treat2 treat4 11.6375  10.5168 12.7582  True 
treat3 treat4  1.3045   0.1838  2.4252  True 
---------------------------------------------

多重检验结果表明各个组间均存在显著差异(reject这一列为True的话则说明两个处理间存在差异)

参考文献

  • 1 ANOVA using Python
  • 2 How to Use One Way ANOVA in Python
  • 3 Three ways to do a two-way ANOVA with Python
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小明的数据分析笔记本 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 参考文献
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档