Python实现单因素方差分析

2024-02-07 15:50

本文主要是介绍Python实现单因素方差分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Python实现单因素方差分析

1.背景

正念越来越受到人们关注,正念是一种有意的、不加评判的对当下的注意觉察。可以通过可以通过观呼吸、身体扫描、正念饮食等多种方式培养。
为了验证正念对记忆力的影响,选取三组被试分别进行正念训练,运动训练和无训练,以测量他们的短时记忆是否改善。在各种条件严格控制下,三个月后测量各组的短时记忆回忆容量,结果如下:
在这里插入图片描述

为了验证各组是否存在差异,采用单因素方差分析进行分析,并同时使用SPSS对每一步代码进行说明。
PS:此处为随机数生成,且为了方便展示使用了宽数据,导入SPSS时可使用“数据”-“重构”转换为SPSS常用的长数据。

2.Python代码

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from statsmodels.stats.multicomp import pairwise_tukeyhsd  # 事后比较
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lmindependent = "处理"  # 自变量
dependent = '短时记忆回忆成绩'  # 因变量# 设置画图参数
def define_plt():plt.rcParams['font.sans-serif'] = ['SimHei', ]  # 设置汉字字体plt.rcParams['font.size'] = 12  # 字体大小plt.rcParams['axes.unicode_minus'] = False  # 正常显示负号# 处理数据
def general_data():# 使用melt()函数将读取数据进行结构转换,以满足ols()函数对数据格式的要求,# melt()函数能将列标签转换为列数据excel_data = pd.read_excel('不同正念处理下的短时记忆成绩.xlsx', index_col=0)melt_data = excel_data.melt(var_name=independent, value_name=dependent)print("\n=================melt_data========================")print(melt_data)return melt_data# 显示箱型线,检查是否有极端数值
def show_boxplot(melt_data):sns.boxplot(x=independent, y=dependent, data=melt_data)plt.show()  # 需要放最后运行,否则会阻挡后面程序的运行# 方差分析
def anova(melt_data):# ols()创建一线性回归分析模型model_ols = ols('%s~C(%s)' % (dependent, independent), melt_data).fit()# anova_lm()函数创建模型生成方差分析表anova_table = anova_lm(model_ols, typ=2)print("\n=================以下为方差分析表====================")print(anova_table)# 事后比较
def multiple_comparisons(melt_data):# 进行事后比较分析print("\n=================事后比较分析结果====================")print(pairwise_tukeyhsd(melt_data[dependent], melt_data[independent]))define_plt()  # 定义plt参数
memory_result = general_data()  # 生成数据
anova(memory_result)  # 方差分析
multiple_comparisons(memory_result)  # 事后比较
show_boxplot(memory_result)  # 显示箱型线

3.结果

3.1 运行以上代码,会出现如下结果

3.3.1 方差分析输出结果

在这里插入图片描述

对比一下SPSS的输出结果:
英文版
在这里插入图片描述

中文版
在这里插入图片描述

可以看出,Python的输出结果比较简洁,不过其实组别和误差两项也够用了。

3.3.2 事后比较分析结果

在这里插入图片描述

和SPSS中的结果进行比较:
英文版:
在这里插入图片描述

中文版:
在这里插入图片描述

可以看出,Python也是只输出了三个组的对比,不过和SPSS相比,也只是反过来用负数表示而已,重点关注画框的地方,大于0.05说明不能拒绝零假设,Python输出结果则是用False表示。

3.3.3 箱型图

在这里插入图片描述

SPSS的输出结果:
在这里插入图片描述

PS:部分字的内容不一样是我在不同地方输入变量的问题,这个无关紧要。
可以看到正念组是明显高于其他两个组的。

箱型图怎么看

箱型图的基本组成部分包括:
1.上边缘:数据点的最右侧界限,通常是最大值。
2.下边缘:数据点的最左侧界限,通常是最小值。
3.中位数:所有数据点按照大小顺序排列后位于中间位置的数值。
4.四分位距:IQR(Interquartile Range,四分位间距)定义为中位数与第一四分位数之间的距离的一半。
5.异常值:那些明显偏离数据集整体趋势的数据点,通常用圆点表示。
箱型图一般不包括均值。

4.逐个部分讲解

4.1 宽数据转换为长数据

当我们把这张Excel表导入SPSS时,
在这里插入图片描述

会显示如下
在这里插入图片描述

而我们要将其转换为长数据,即每个列为一个变量的类型

4.1.1 Python代码

在Python代码中,使用melt()函数实现

# 处理数据
def general_data():# 使用melt()函数将读取数据进行结构转换,以满足ols()函数对数据格式的要求,# melt()函数能将列标签转换为列数据excel_data = pd.read_excel('不同正念处理下的短时记忆成绩.xlsx', index_col=0)melt_data = excel_data.melt(var_name=independent, value_name=dependent)print("\n=================melt_data========================")print(melt_data)return melt_data

我们将输出结果打印出来,如下

=================melt_data========================处理  短时记忆回忆成绩
0   正念组      11.3
1   正念组      10.8
2   正念组       8.4
3   正念组       8.5
4   正念组       8.9
5   正念组      10.7
6   正念组       8.4
7   正念组      11.1
8   正念组       8.3
9   正念组      11.9
10  运动组       7.0
11  运动组       6.4
12  运动组       7.6
13  运动组       6.2
14  运动组       6.6
15  运动组       8.2
16  运动组       5.7
17  运动组       8.9
18  运动组       8.7
19  运动组       6.7
20  控制组       6.3
21  控制组       5.2
22  控制组       9.0
23  控制组       5.0
24  控制组       7.5
25  控制组       6.3
26  控制组       6.0
27  控制组       5.2
28  控制组       7.1
29  控制组       7.4

4.1.2 对应的SPSS操作

为了适应使用不同语言的场景,我将同时呈现中文版和英文版
1.数据-重构
在这里插入图片描述
在这里插入图片描述

2.将选定变量重构为个案(C)
在这里插入图片描述
在这里插入图片描述

3.重构一个变量组
在这里插入图片描述
在这里插入图片描述

4.把数据列都放入目标变量中,个案组标识和固定变量可以先不管
在这里插入图片描述
在这里插入图片描述

5.这一步将各组名作为索引变量
在这里插入图片描述
在这里插入图片描述

6.选择使用变量名作为索引
在这里插入图片描述
在这里插入图片描述

7.之前那个序号没什么用,可以直接删除
在这里插入图片描述
在这里插入图片描述

8.完成即可
在这里插入图片描述
在这里插入图片描述

9.确定
在这里插入图片描述
在这里插入图片描述

10.可以看到新生成名为索引1的一列
在这里插入图片描述
在这里插入图片描述

11.点一下下面的变量视图,将索引1改成组别
在这里插入图片描述
在这里插入图片描述

12.再将组别排序,即可获得长数据
在这里插入图片描述
在这里插入图片描述

其实这样操作还不如直接在Excel里面操作,可能还方便一些,这里只是做个展示。

而且在SPSS中,如果使用“分析”-“比较平均值”下面的“单因素 ANOVA 检验…”,则不能使用字符串,如“正念组”这样,而是要转换成数字123之类的,变成组1组2组3,但是这样看起来不方便,输出结果也不好看。我们还可以使用“分析”-“一般线性模型”下的单变量,来达到方差分析的目的。

4.2 方差分析

4.2.1 Python代码

# 方差分析
def anova(melt_data):# ols()创建一线性回归分析模型model_ols = ols('%s~C(%s)' % (dependent, independent), melt_data).fit()# anova_lm()函数创建模型生成方差分析表anova_table = anova_lm(model_ols, typ=2)print("\n=================以下为方差分析表====================")print(anova_table)

Python输出结果:
在这里插入图片描述

4.2.2 SPSS操作

在这里插入图片描述
在这里插入图片描述

一般这里我们会按需要点击“图”、“事后比较”、“选项”这些来输出一些内容,比如描述统计、齐性检验,交互图什么的,不过这里暂时不需要,为了让输出纯粹一点,选好因变量和固定因子直接点确定即可。
在这里插入图片描述
在这里插入图片描述

SPSS输出结果:
中文版
在这里插入图片描述

英文版
在这里插入图片描述

4.3 事后比较

4.3.1 Python代码

# 事后比较
def multiple_comparisons(melt_data):# 进行事后比较分析print("\n=================事后比较分析结果====================")print(pairwise_tukeyhsd(melt_data[dependent], melt_data[independent]))

Python输出结果:
在这里插入图片描述

4.3.2 SPSS操作

在这里插入图片描述
在这里插入图片描述

选择事后比较
在这里插入图片描述
在这里插入图片描述

选择“图基(Tukey)”即可
在这里插入图片描述
在这里插入图片描述

然后点确定
在这里插入图片描述
在这里插入图片描述

SPSS输出结果:
在这里插入图片描述
在这里插入图片描述

这一步同时还会输出主体间因子 Between-Subjects Factors,齐性子集 Homogeneous Subsets和前面的主体间效应检验 Tests of Between-Subjects Effects,不过这不是重点,我们主要关注和代码对应的部分即可。

4.4 箱型图

4.4.1 Python代码

# 设置画图参数
def define_plt():plt.rcParams['font.sans-serif'] = ['SimHei', ]  # 设置汉字字体plt.rcParams['font.size'] = 12  # 字体大小plt.rcParams['axes.unicode_minus'] = False  # 正常显示负号# 显示箱型线,检查是否有极端数值
def show_boxplot(melt_data):sns.boxplot(x=independent, y=dependent, data=melt_data)plt.show()  # 需要放最后运行,否则会阻挡后面程序的运行

Python输出结果:
在这里插入图片描述

4.4.2 SPSS操作

在这里插入图片描述
在这里插入图片描述

由于这里我们只是想看一下箱型图,不想输出太多内容,所以左下角点击只显示图即可,如果还想输出正态性检验,Q-Q图之类的,可以按需要点击右侧的按钮设置选取。
在这里插入图片描述

在这里插入图片描述
SPSS输出结果:
在这里插入图片描述

END

这篇关于Python实现单因素方差分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/688200

相关文章

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略 1. 特权模式限制2. 宿主机资源隔离3. 用户和组管理4. 权限提升控制5. SELinux配置 💖The Begin💖点点关注,收藏不迷路💖 Kubernetes的PodSecurityPolicy(PSP)是一个关键的安全特性,它在Pod创建之前实施安全策略,确保P