iwehdio的博客园:https://www.cnblogs.com/iwehdio/

  方差分析可以用来推断一个或多个因素在其状态变化时,其因素水平或交互作用是否会对实验指标产生显著影响。主要分为单因素方差分析、多因素无重复方差分析和多因素重复方差分析。
  做数理统计课后题,发现方差分析计算比较麻烦,想用Python掉包实现。但是发现大多教程对参数的讲解不是很清楚,在此做记录。
  主要用到的库是pandas和statsmodels。简要流程是,先用pandas库的DataFrame数据结构来构造输入数据格式。然后用statsmodels库中的ols函数得到最小二乘线性回归模型。最后用statsmodels库中的anova_lm函数进行方差分析。

import pandas as pd
import numpy as np
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm

​   首先,是输入的数据格式。使用pandas的DataFrame,每一行为一次试验的因素水平和试验结果。以下图中的题目为例。

  则对于因素A和因素B即结果R可表示为如下的DataFrame:

data = pd.DataFrame([[1, 1, 32],
[1, 2, 35],
[1, 3, 35.5],
[1, 4, 38.5],
[2, 1, 33.5],
[2, 2, 36.5],
[2, 3, 38],
[2, 4, 39.5],
[3, 1, 36],
[3, 2, 37.5],
[3, 3, 39.5],
[3, 4, 43]],
columns=['A', 'B', 'value'])

​   第一列为因素A的水平,第二列为因素B的水平,第三列为试验结果。在方差分析中,只关心每次试验中因素水平是否相同,所以我们可以把较为复杂的因素水平抽象为标签值 1,2,3。  

​   然后,输入ols函数。主要用到该函数的两个参数,formula和data。
  formula指定了:
        ①试验结果是哪一列。
        ②需要计算的是哪几个因素水平对结果的影响。
        ③是否计算交互作用。
​
  formula的类型为字符串,输入格式为如果试验结果的列名为‘value’,需要计算的因素的列名为‘A’和‘B’,则示例如下。

# 因素A的水平对结果的影响
'value ~ C(A)' # 因素A和因素B的水平对结果的影响
'value ~ C(A) + C(B)' # 因素A和因素B以及A和B的交互作用的水平对结果的影响
'value ~ C(A) + C(B) + C(A)*C(B)' # 多因素无重复试验,不计算交互作用的影响
model = ols('value~C(A) + C(B)', data=data[['A', 'B', 'value']]).fit()
anovat = anova_lm(model)
print(anovat)

  data为之前生成的DataFrame中选出的进行分析所需要的列,实际上ols是通过DataFrame的列名来获得试验结果和因素水平的数据的。
  最后用ols函数进行最小二乘线性拟合,用anova_lm函数进行方差分析并输出结果。之前题目输出的结果为:

  Residual表示误差,df表示自由度,sum_sq表示离差平方和,mean_sq表示均方离差,F表示F值,PR(>F)表示F值所对应的显著水平α。
  进行单因素多方差分析,将formula中的C(B)去掉即可。如果是对于有重复的多因素方差分析,示例如下:

  结果为: 

参考:施雨 《应用数理统计(西安交通大学)》 课后习题 4.1,4.3,4.5,4.6,4.9
   python做单因素方差分析:https://www.cnblogs.com/jin-liang/p/9852321.html
   Python数据科学:方差分析:https://blog.csdn.net/Kaitiren/article/details/85066793

iwehdio的博客园:https://www.cnblogs.com/iwehdio/

数理统计(一)——用Python进行方差分析的更多相关文章

  1. 【总目录】——概率论与数理统计及Python实现

    注:这是一个横跨数年的任务,标题也可以叫做“从To Do List上划掉学习统计学”.在几年前为p值而苦恼的时候,还不知道Python是什么:后来接触过Python,就喜欢上了这门语言.统计作为数据科 ...

  2. 【概率论与数理统计】小结3 - 一维离散型随机变量及其Python实现

    注:上一小节对随机变量做了一个概述,这一节主要记录一维离散型随机变量以及关于它们的一些性质.对于概率论与数理统计方面的计算及可视化,主要的Python包有scipy, numpy和matplotlib ...

  3. 【概率论与数理统计】小结4 - 一维连续型随机变量及其Python实现

    注:上一小节总结了离散型随机变量,这个小节总结连续型随机变量.离散型随机变量的可能取值只有有限多个或是无限可数的(可以与自然数一一对应),连续型随机变量的可能取值则是一段连续的区域或是整个实数轴,是不 ...

  4. 数理统计(二)——Python中的概率分布API

    数理统计(二)——Python中的概率分布API iwehdio的博客园:https://www.cnblogs.com/iwehdio/ 数理统计中进行假设检验需要查一些分布的上分位数表.在scip ...

  5. 方差分析(python代码实现)

    python机器学习-乳腺癌细胞挖掘(欢迎关注博主主页,学习python视频资源,还有大量免费python经典文章) https://study.163.com/course/introduction ...

  6. Python matplotlib 概率论与数理统计 伯努利分布 二项分布

    Python 代码实现 二项分布 import numpy as np import matplotlib.pyplot as plt import math from scipy import st ...

  7. 【机器学习理论】概率论与数理统计--假设检验,卡方检验,t检验,F检验,方差分析

    显著性水平α与P值: 1.显著性水平是估计总体参数落在某一区间内,可能犯错误的概率,用α表示. 显著性是对差异的程度而言的,是在进行假设检验前确定的一个可允许作为判断界限的小概率标准. 2.P值是用来 ...

  8. 机器学习:Python中如何使用最小二乘法

    之所以说"使用"而不是"实现",是因为python的相关类库已经帮我们实现了具体算法,而我们只要学会使用就可以了.随着对技术的逐渐掌握及积累,当类库中的算法已经 ...

  9. python数据分析入门学习笔记

    学习利用python进行数据分析的笔记&下星期二内部交流会要讲的内容,一并分享给大家.博主粗心大意,有什么不对的地方欢迎指正~还有许多尚待完善的地方,待我一边学习一边完善~ 前言:各种和数据分 ...

随机推荐

  1. 010.Kubernetes二进制部署kube-controller-manager

    一 部署高可用kube-controller-manager 1.1 高可用kube-controller-manager介绍 本实验部署一个三实例 kube-controller-manager 的 ...

  2. JSON数据与Java对象的相互转换

    JSON数据与Java对象的相互转换 JSON解析器 常见的解析器:Jsonlib .Gson. fastjson. jackson JSON转化为Java对象 使用步骤: 1.导入jackson的相 ...

  3. C++中对封装的语法支持——重载运算符

    重载运算符 1.对于自定义类型,编译器不知道运算规则,而重载运算符会将两个对象相加转换为函数调用. 2.运算符重载转换的函数调用,函数名字是固定的规则. (1) 如果重载+号运算符,函数名字就是:op ...

  4. 理解Spark SQL(一)—— CLI和ThriftServer

    Spark SQL主要提供了两个工具来访问hive中的数据,即CLI和ThriftServer.前提是需要Spark支持Hive,即编译Spark时需要带上hive和hive-thriftserver ...

  5. 心里有点B树

    在说B树之前最好先看看2-3树, 2-3树是B树的一种特例, 什么B树, B树就是2-3树, 2-3-4 树 , 2-3-4-5... 树的统称, 而B+树又是B树的一种变形 性质: 什么是二节点, ...

  6. nyoj 257 郁闷的C小加(一)(栈、队列)

    郁闷的C小加(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 我们熟悉的表达式如a+b.a+b*(c+d)等都属于中缀表达式.中缀表达式就是(对于双目运算符来说 ...

  7. android逆向总结

    首先项目里的java文件,以及项目引用到的第三方jar或aar包里面的class,统统都编译成classes.dex放在apk包的根目录,项目的资源目录和AndroidManifest.xml被处理生 ...

  8. 【algo&ds】8.最小生成树

    1.最小生成树介绍 什么是最小生成树? 最小生成树(Minimum spanning tree,MST)是在一个给定的无向图G(V,E)中求一棵树T,使得这棵树拥有图G中的所有顶点,且所有边都是来自图 ...

  9. MySQL锁会不会,你就差看一看

    数据库锁知识 不少人在开发的时候,应该很少会注意到这些锁的问题,也很少会给程序加锁(除了库存这些对数量准确性要求极高的情况下),即使我们不会这些锁知识,我们的程序在一般情况下还是可以跑得好好的.因为这 ...

  10. C/C++ 条件编译静态库

    ==>windows 下方法: 1.方法一:VS工程中中直接添加 1.1在VS的属性->常规->附加库目录,添上文件夹的路径:例如:lib/x64: 1.2输入的附加依赖项,添加上库 ...