python 方差分析_用Python学分析 - 单因素方差分析
单因素方差分析(one-way analysis of variance)
判断控制变量是否对观测变量产生了显著影响
分析步骤
1. 建立检验假设
- h0:不同因子水平间的均值无差异
- h1:不同因子水平间的均值有显著差异
- 【注意】有差异,有可能是所有因子水平间都存在差异,也有可能只有两个因子水平间的均值存在差异
2. 计算检验统计量f值
f = msa / mse
msa = ssa / ( k - 1 ) msa:组间均方, 对总体方差的一个估计
mse = sse / ( n - k ) mse:组内均方,不论h0是否为真,mse都是总体方差的一个无偏估计
sst = ssa + sse sst:总误差平方和,反映全部观测值的离散情况
ssa:组间误差平方和,也称水平项误差平方和,反映各因子水平(总体)的样本均值之间的差异程度
sse: 组内误差平方和
3. 确定p值
4. 方差分析表
5. 根据给定的显著性水平,并作出决策
根据f值进行假设检验
根据选定的显著性水平,f值大于临界值时,将拒绝原假设
根据p值进行假设检验
6. 进一步分析
方差齐性检验
多重比较检验
- 确定控制变量的不同水平对观测变量的影响程度
- 哪个水平的作用明显区别于其他水平
- 哪个水平的作用是不显著
- 等等
【python分析:用ols模块进行计算】
1 # 引入数据
2 import pandas as pd
3 data_value = { '无促销':[23,19,17,26,28,23,24,30],
4 '被动促销':[26,22,20,30,36,28,30,32],
5 '主动促销':[30,23,25,32,48,40,41,46]}# 因变量
6 da = pd.dataframe( data_value ).stack()
7 da.columns = ['水平','观测值']
8
9 # ols模块进行分析
10
11 from statsmodels.formula.api import ols
12 from statsmodels.stats.anova import anova_lm
13
14 formula = '{} ~ {}'.format(da.columns[1], da.columns[0])
15 model = ols( formula, da ).fit()
16 anovat = anova_lm(model)
17 print(anovat)
输出结果:
【python分析:用自定义函数进行计算】
1 def anova_oneway( df, a = 0.05 ):
2 from scipy.stats import f
3 '''
4 进行单因素方差分析
5 输入值:df - pd.dataframe,第一列为水平,第二列为观测值;a - 显著性水平,默认为0.05
6 返回类型:字典
7 返回值:方差分析相关数据
8 '''
9 res = { 'ssa':0, 'sst':0 }
10 mu = df[df.columns[1]].mean()
11 da = df.groupby( df.columns[0] ).agg( {df.columns[1]:['mean','count']})
12 da.columns = ['mean','count']
13 res['df_a'] = len(list(da.index)) - 1 # 自由度
14 # 组间误差平方和
15 for row in da.index:
16 res['ssa'] += (da.loc[row,'mean'] - mu )**2 * da.loc[row,'count']
17 # 总误差平方和
18 for e in df[df.columns[1]].values:
19 res['sst'] += (e - mu )**2
20 res['sse'] = res['sst'] - res['ssa'] # 组内误差平方和
21 res['df_e'] = len(df) - res['df_a'] - 1 # 残差自由度
22 res['df_t'] = len(df) - 1 # 总和自由度
23 res['msa'] = res['ssa'] / res['df_a'] # 组间均方
24 res['mse'] = res['sse'] / res['df_e'] # 组内均方
25 res['f'] = res['msa'] / res['mse'] # f值
26 res['p_value'] = 1 - f(res['df_a'],res['df_e'] ).cdf( res['f']) #p值
27 res['a'] = a
28 res['f_alpha'] = f(res['df_a'],res['df_e'] ).ppf( 1-a ) # 基于显著性水平a的f临界值
29 return res
30
31 def print_anova_oneway( d, maxedg = 90 ):
32 '''
33 打印单因素方差分析表
34 输入值:d - dict字典,包含分析表所需要的数据; maxedg - 打印输出时装饰分隔符的最大长度
35 '''
36 title = '【单因素方差分析表】'
37 print( title.center( maxedg ))
38 print( '=' * maxedg )
39 print( '{:^12s}|{:^16s}|{:^6s}|{:^16s}|{:^12s}|{:^10s}|'.format('误差来源','平方和','自由度','均方和','f','p值'))
40 print( '-' * maxedg )
41 print( '{:8s}|{:>18,.4f} |{:>8d} |{:>18,.4f} |{:>11.6f} |{:>10.3%} |'.format( '组间(因子影响)',d['ssa'],d['df_a'],d['msa'],d['f'],d['p_value']))
42 print( '{:10s}|{:>18,.4f} |{:>8d} |{:>18,.4f} |'.format( '组内(误差)',d['sse'],d['df_e'],d['mse']))
43 print( '{:14s}|{:>18,.4f} |{:>8d} |'.format( '总和',d['sst'],d['df_t']))
44 print( '-' * maxedg )
45 print('备注:显著性水平为 {:.2%} 时,f的临界值是 {:.6f}。'.format(d['a'],d['f_alpha']))
46
47
48 p = 0.95 # 设定置信度水平
49 maxedg = 93 # 设定输出时装饰分隔符的最大长度
50 # 计算并输出单因素方差分析表
51 res = anova_oneway( da, a = 1-p )
52 print_anova_oneway( res, maxedg = maxedg )
如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!
python 方差分析_用Python学分析 - 单因素方差分析相关推荐
- python 方差分析_使用Python的重复测量方差分析
python 方差分析 A common method in experimental psychology is within-subjects designs. One way to analys ...
- 第一章 第一节:Python基础_认识Python
Python基础入门(全套保姆级教程) 第一章 第一节:Python基础_认识Python 1. 什么是编程 通俗易懂,编程就是用代码编写程序,编写程序有很多种办法,像c语言,javaPython语言 ...
- 用Python学分析 - 单因素方差分析
单因素方差分析(One-Way Analysis of Variance) 判断控制变量是否对观测变量产生了显著影响 分析步骤 建立检验假设 - H0:不同因子水平间的均值无差异 - H1:不同因子水 ...
- python 方差分析_数理统计(一)——用Python进行方差分析
方差分析可以用来推断一个或多个因素在其状态变化时,其因素水平或交互作用是否会对实验指标产生显著影响.主要分为单因素方差分析.多因素无重复方差分析和多因素重复方差分析. 做数理统计课后题,发现方差分析计 ...
- pythoncookbook和流畅的python对比_为什么你学Python效率比别人慢?因为你没有这套完整的学习资料...
以下资源免费获取方式! 关注!转发!私信"资料"即可免费领取! 入门书籍 1.<Python基础教程>(Beginning Python From Novice to ...
- ppt python 图表_利用python分析weibo数据做成图表放入PPT中
起因 很久以前,就有个想法,就是自动分析微博的数据,但是之前一直想的是网页版展示,flask想学了好久都没学,偶然的一次看到了一篇关于python处理pptx的文章,再加上同窗三年的室友在毕业后竟然主 ...
- 阿里云python课程_阿里云大学编程语言免费精华课程集锦
阿里云云栖社区 近期在微博免费开放了大数据报告以及多种课程,这不仅给互联网商业战略分析专家带来了福音同时也给有兴趣学习编程的同学们带来了免费知识大餐,因不允许发相关链接,请关注私信小编,小编会发给你链 ...
- 方差分析中怎么看有无显著性影响_用R语言做单因素方差分析及多重比较
SPSS方差分析的应用已经做得非常好了,绝大多数的方差分析问题均可通过SPSS"点菜单"的方式得以解决,R语言在统计和可视化方面有自己的特色,我们不妨来对比着学习.选用R语言自带案 ...
- 第一门语言学python好_零基础学编程,哪一门语言比较适合入门?
最近,有不少小伙伴问我,说零基础学编程,第一门语言学哪个好?有人推荐学Python,理由是Python简单,对新人友好,上手快,那Python到底适不合适新人学呢. 我今天就这个问题给大家稍微的展开一 ...
最新文章
- devDependencies与dependencies (转载)
- 【Groovy】闭包 Closure ( 闭包中调用 Groovy 脚本中的方法 | owner 与 delegate 区别 | 闭包中调用对象中的方法 )
- [swift 进阶]读书笔记-第八章:错误处理 C8P2 错误和函数参数
- FSF 称 DRM 被用于锁定、控制和监视用户
- C语言 提取字符串中的所有整数
- Python——itertools.chain.from_iterable将多个迭代器连接成一个统一的迭代器的最高效的方法
- 假如我来发明编程语言
- Scala学习(一):Scala简介与Hello World!
- 财务报表五力、五性分析雷达图
- 时间与时间戳的小问题
- java运行期类型鉴定
- c语言中的圆方程,高中圆的方程练习题
- java 字母大小写的转换_Java字母大小写转换的方法
- 和导师的微信聊天翻车现场,你一定也经历过!
- 违反唯一约束条件oracle,oracle imp遇到违反唯一约束条件 (GZW.SYS_C006112)
- 斐乐第五家高尔夫独立店东莞开业;康莱德酒店及度假村签约西安、南京和成都三家酒店 | 美通企业日报...
- mac下启动/停止/重启mysql服务
- openlaw爬虫超级详细讲解
- Datawhale 智慧海洋建设-Task1
- 文本处理工具--grep
热门文章
- 增强现实之开源AR库——AR.js
- Android超级管理员,实现一键锁屏等等
- 乐高大颗粒作品13:台秤
- Unity类似手机通知栏的滑动效果
- 树莓派4B 搭建私人网盘
- KDZD8119高压漏电起痕试验机
- linux 针对目录空间配额,在XFS文件系统上实现针对目录的配额限制
- MATLAB的iamgeLabeler制作语义分割标签及路径修改
- 如何使用Python进行Excel表格的处理,表的整合、内容的调整、定位更新等等
- android 钢琴识别音阶对错_Android Piano Companion(钢琴伴侣)v6.31.412 PRO