Python实现两因素独立设计方差分析,简单效应分析

# Python实现两因素独立设计方差分析

1. 背景

1. 有研究者探讨了在不同企业文化下,管理者的不同语言风格所产生的影响

有的企业注重员工的独立性,强调个人努力和内部竞争;有的企业注重员工的整体性,强调团队合作和团队绩效。

管理者的语言风格有斩钉截铁型和优柔寡断型。

据此,研究者制作了 4 种录音材料,分别提供不同企业文化背景下管理者不同语言风格的对话内容, 12名被试被分成4组参与了实验,每组分别听不同的录音。最后要求被试用 7 点量表评估管理者的能力。

结果如下:

实验目的:探究不同企业文化下不同语言风格对管理能力得分的影响。

实验设计:2*2 两因素独立方差分析

变量:

自变量1: 企业文化(个人努力VS团队合作),自变量2: 语言风格(优柔寡断VS斩钉截铁)

因变量:管理能力得分

PS:此处为了减少数据转换操作,故直接采用长数据格式。

2. Python代码

import pandas as pd
from statsmodels.stats.multicomp import pairwise_tukeyhsd
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm
from scipy import statsdef general_data():# 为了减少转换这里直接给了长数据,指定第0列(表中第1列)为索引列df_two_way = pd.read_excel('./excel/不同企业文化下不同语言风格对管理的影响.xlsx', index_col=0)print("df_two_way=\n", df_two_way)# 制定各列的变量名,如不指定则直接用表头# df_two_way.columns = ['企业文化', '语言风格', '管理能力得分']return df_two_waydef two_way_anova(df_two_way):# 包括两个主效应和一个交互效应formula = '管理能力得分  ~  C(企业文化)  +  C(语言风格)  +  C(企业文化) : C(语言风格)'model_two_way = ols(formula, df_two_way).fit()anova_table = anova_lm(model_two_way)print("=======输出方差分析表=======")# print(anova_table)for i in range(3):  # 将科学计数法转换为小数并只保留3位小数,和SPSS输出结果一致anova_table["PR(>F)"][i] = format(anova_table["PR(>F)"][i], ".3f")print(anova_table)# 读取交互效应行,如果显著,进行下一步,简单效应分析int_p = anova_table["PR(>F)"]["C(企业文化):C(语言风格)"]print("交互作用p值=", int_p)if float(int_p) < 0.05:print("p值小于0.05,交互效应显著,要进行简单效应分析")return True# 由于没有找到现成的方案,所以考虑对表格进行拆分,如果交互作用显著,
# 则读取表格中的某一变量的某个水平下的所有数据,然后进行t校验
# 这是自己写的一个简单的算法,如有更好的方法欢迎赐教
def simple_effect_analysis(check, melt_data):dependent = "管理能力得分"# 交互效应存在,进行简单效应分析,否则跳过if check:# 简单效应分析需要分别# 检测企业文化为"个人努力"下的不同语言风格差异,# 以及企业文化为"团队合作"下的不同语言风格差异,# 分别对两种情况进行t检验即可groups = melt_data.groupby(melt_data.企业文化)for company_culture in ["个人努力", "团队合作"]:melt_data = groups.get_group(company_culture)# print(melt_data)# 分别比较在不同企业文化下,不同语言风格对管理能力得分影响的差异print("\n=======%s企业文化下不同语言风格t检验分析结果=========" % company_culture)t_test(melt_data)def t_test(melt_data):melt_data = melt_data[['语言风格', '管理能力得分']]# print("melt_data=\n", melt_data)groups = melt_data.groupby(melt_data.语言风格)a_group = groups.get_group("优柔寡断")# print("a_group=\n", a_group)b_group = groups.get_group("斩钉截铁")# print("b_group=\n", b_group)t_value, p_value = stats.ttest_ind(a=a_group['管理能力得分'], b=b_group['管理能力得分'])# T = (样本均值 - 总体均值或另一样本均值) / (标准误差)print(f"T值:{t_value:.3f}, p值:{p_value:.3f}")data = general_data()
simple_effect_analysis(two_way_anova(data), data)

3. 结果

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

3.1.1 两因素独立方差分析输出结果

由于它这里对得不是很齐,所以我把p值圈了出来,可以看到有两个主效应的p值和一个交互效应的p值,其中企业文化主效应不显著,其他两个显著。

我的代码检测到交互作用p值小于0.05,就自动进入简单效应分析。

可以和SPSS的输出结果对比下:

中文版:

英文版:

3.1.2 简单效应分析结果

由于没有找到现成的方案来做简单效应分析,所以考虑对表格进行拆分,如果交互作用显著,则读取表格中的某一变量的某个水平下的所有数据,然后进行t检验。
代码中呈现的是自己写的简单算法,如有错误或更好的方法欢迎赐教。

补充,T值的公式为:

T = (样本均值 - 总体均值或另一样本均值) / (标准误差)

SPSS中的输出:

这里SPSS是采用了语法编辑器中的COMPARE语句,因为没有直接的成对比较方法。

可以看出,在不同企业文化下,不同语言风格的管理能力得分均存在显著差异。

4. 详细分析

4.1 方差分析

4.1.1 python代码

def general_data():# 为了减少转换这里直接给了长数据,指定第0列(表中第1列)为索引列df_two_way = pd.read_excel('./excel/不同企业文化下不同语言风格对管理的影响.xlsx', index_col=0)print("df_two_way=\n", df_two_way)# 制定各列的变量名,如不指定则直接用表头# df_two_way.columns = ['企业文化', '语言风格', '管理能力得分']return df_two_waydef two_way_anova(df_two_way):# 包括两个主效应和一个交互效应formula = '管理能力得分  ~  C(企业文化)  +  C(语言风格)  +  C(企业文化) : C(语言风格)'model_two_way = ols(formula, df_two_way).fit()anova_table = anova_lm(model_two_way)print("=======输出方差分析表=======")# print(anova_table)for i in range(3):  # 将科学计数法转换为小数并只保留3位小数,和SPSS输出结果一致anova_table["PR(>F)"][i] = format(anova_table["PR(>F)"][i], ".3f")print(anova_table)# 读取交互效应行,如果显著,进行下一步,简单效应分析int_p = anova_table["PR(>F)"]["C(企业文化):C(语言风格)"]print("交互作用p值=", int_p)if float(int_p) < 0.05:print("p值小于0.05,交互效应显著,要进行简单效应分析")return True

代码中都有详细注释,不再重复,这里补充一下SPSS操作

4.1.2 SPSS操作

把自变量和因变量放入对应位置,点击确认即可

同样描述统计和齐性检验那些可以在选项里面选择,这里不选择,输出可以纯粹一点,结果见开头,不再重复贴出。

4.2 简单效应分析

4.2.1 Python代码

# 由于没有找到现成的方案,所以考虑对表格进行拆分,如果交互作用显著,
# 则读取表格中的某一变量的某个水平下的所有数据,然后进行t校验
# 这是自己写的一个简单的算法,如有更好的方法欢迎赐教
def simple_effect_analysis(check, melt_data):dependent = "管理能力得分"# 交互效应存在,进行简单效应分析,否则跳过if check:# 简单效应分析需要分别# 检测企业文化为"个人努力"下的不同语言风格差异,# 以及企业文化为"团队合作"下的不同语言风格差异,# 分别对两种情况进行t检验即可groups = melt_data.groupby(melt_data.企业文化)for company_culture in ["个人努力", "团队合作"]:melt_data = groups.get_group(company_culture)# print(melt_data)# 分别比较在不同企业文化下,不同语言风格对管理能力得分影响的差异print("\n=======%s企业文化下不同语言风格t检验分析结果=========" % company_culture)t_test(melt_data)def t_test(melt_data):melt_data = melt_data[['语言风格', '管理能力得分']]# print("melt_data=\n", melt_data)groups = melt_data.groupby(melt_data.语言风格)a_group = groups.get_group("优柔寡断")# print("a_group=\n", a_group)b_group = groups.get_group("斩钉截铁")# print("b_group=\n", b_group)t_value, p_value = stats.ttest_ind(a=a_group['管理能力得分'], b=b_group['管理能力得分'])# T = (样本均值 - 总体均值或另一样本均值) / (标准误差)print(f"T值:{t_value:.3f}, p值:{p_value:.3f}")
simple_effect_analysis()函数中,有两步关键的数据拆分,详细说明如下,
"""
df_two_way=企业文化  语言风格  管理能力得分
被试                    
1   个人努力  优柔寡断     3.1
2   个人努力  优柔寡断     3.0
3   个人努力  优柔寡断     3.2
4   个人努力  斩钉截铁     4.7
5   个人努力  斩钉截铁     4.6
6   个人努力  斩钉截铁     4.8
7   团队合作  优柔寡断     4.5
8   团队合作  优柔寡断     4.4
9   团队合作  优柔寡断     4.6
10  团队合作  斩钉截铁     3.5
11  团队合作  斩钉截铁     3.4
12  团队合作  斩钉截铁     3.6
"""
# 将该数据按企业文化分组,然后按照对应的值,拆分为两个df格式的数据
def split_data(df_two_way):groups = df_two_way.groupby(df_two_way.企业文化)person_df = groups.get_group("个人努力")team_df = groups.get_group("团队合作")print(person_df)print(team_df)
# 即可得到
"""企业文化  语言风格  管理能力得分
被试                    
1   个人努力  优柔寡断     3.1
2   个人努力  优柔寡断     3.0
3   个人努力  优柔寡断     3.2
4   个人努力  斩钉截铁     4.7
5   个人努力  斩钉截铁     4.6
6   个人努力  斩钉截铁     4.8
"""
# 以及
"""企业文化  语言风格  管理能力得分
被试                    
7   团队合作  优柔寡断     4.5
8   团队合作  优柔寡断     4.4
9   团队合作  优柔寡断     4.6
10  团队合作  斩钉截铁     3.5
11  团队合作  斩钉截铁     3.4
12  团队合作  斩钉截铁     3.6
"""

然后t_test也用了相同的方式处理。

4.2.2 SPSS中的简单效应分析

据我所知,SPSS中没有直接的点击操作可以进行简单效应分析,所以这部分要进入语法编辑器中进行操作。

在之前的方差分析页面中,点击Paste
即可进入语法编辑器窗口

  1. UNIANOVA 管理能力得分 BY 企业文化 语言风格:这部分表示要进行单因素方差分析(UNIANOVA),因变量是“管理能力得分”,自变量是“企业文化”和“语言风格”。
  2. /METHOD=SSTYPE(3):指定使用Type III SS(类型III平方和),这是计算F统计量所用的平方和类型。
  3. /INTERCEPT=INCLUDE:表示在模型中包含截距项。
  4. /CRITERIA=ALPHA(0.05):设置显著性水平为0.05。
  5. /DESIGN=企业文化 语言风格 企业文化*语言风格:指定用于设计的自变量,即“企业文化”、“语言风格”和它们的交互项“企业文化*语言风格”。

然后我们在中间加一句:/EMMEANS=TABLES(企业文化*语言风格) COMPARE(语言风格)ADJ(LSD)

DATASET ACTIVATE DataSet1.
UNIANOVA 管理能力得分 BY 企业文化 语言风格/METHOD=SSTYPE(3)/INTERCEPT=INCLUDE/EMMEANS=TABLES(企业文化*语言风格) COMPARE(语言风格)ADJ(LSD)/CRITERIA=ALPHA(0.05)/DESIGN=企业文化 语言风格 企业文化*语言风格.
  1. /EMMEANS=TABLES(企业文化*语言风格) COMPARE(语言风格)ADJ(LSD):这部分是关于估计边际平均数(EMMEANS)的命令,用于生成交叉表,比较不同组之间的平均数,并使用LSD(最小显著差异)方法进行多重比较。

点击顶部的绿色三角即可运行,注意光标要放在代码块中。

输出结果如下:

中文版:

英文版:

END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/643149.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LCD液晶屏驱动详解(3)

2.2、LCD控制寄存器LCDCON2 用于设置垂直方向各信号的时间参数&#xff0c;格式如下表所示&#xff1a; 功能位说明VBPD[31:24]VSYNC信号脉冲之后&#xff0c;还要经过(VBPD1)个HSYNC信号周期&#xff0c;有效的行数据才出现&#xff1b;LINEVAL[23:14]LCD的垂直宽度&#xf…

2024PMP考试新考纲-【过程领域】近期典型真题和很详细解析(11)

华研荟继续为您分享【过程Process领域】的新考纲下的真题&#xff0c;帮助大家体会和理解新考纲下PMP的考试特点和如何应用所学的知识和常识&#xff08;经验&#xff09;来解题&#xff0c;并且举一反三&#xff0c;一次性3A通过2024年PMP考试。 2024年PMP考试新考纲-【过程领…

探索文件与交互:使用PyQt5构建一个高级文件选择器

在当今的应用程序开发中&#xff0c;文件管理和交互是一个重要的组成部分。特别是对于桌面应用程序&#xff0c;提供一个直观、功能丰富的文件选择器是提高用户体验的关键。 本篇博客&#xff0c;我将介绍如何使用Python和PyQt5来构建一个高级的文件选择器&#xff0c;它不仅能…

数据挖掘笔记1

课程&#xff1a;清华大学-数据挖掘&#xff1a;理论与算法&#xff08;国家级精品课&#xff09;_哔哩哔哩_bilibili 一、Learning Resources 二、Data 数据是最底层的一种表现形式。数据具有连续性。从存储上来讲&#xff0c;数据分为逻辑上的和物理层的。大数据&#xff1…

np.bincount函数的用法

官网写的非常清晰了&#xff0c; 返回数组的数量比x中的最大值大1&#xff0c;它给出了每个索引值在x中出现的次数。下面&#xff0c;我举个例子让大家更好的理解一下&#xff1a; np.bincount(np.array([0, 1, 1, 3, 2, 1, 7])) array([1, 3, 1, 1, 0, 0, 0, 1])最大值是7&a…

BUU BRUTE 1

靶场教程 1.开局页面&#xff0c;是个登录界面。2.尝试万能密码&#xff0c;发现并不可行&#xff0c;提示【用户名错误】。用户名输入admin&#xff0c;发现提示密码错误&#xff0c;为四位数字。3.那么&#xff0c;抓包爆破吧。通过burp进行抓包。4.发送包到 Intruder 进行爆…

Redis(七)复制

文章目录 是什么功能配置配主库不配从库权限细节 案例配置文件修改 一主二仆固定配置文件主从问题命令操作手动指定 薪火相传反客为主复制原理和工作流程存在问题 是什么 https://redis.io/docs/management/replication/ 就是主从复制&#xff0c;master以写为主&#xff0c;S…

Ubuntu findfont: Font family ‘SimHei‘ not found.

matplotlib中文乱码显示 当我们遇到这样奇怪的问题时, 结果往往很搞笑 尝试1不行 Stopping Jupyter Installing font-manager: sudo apt install font-manager Cleaning the matplotlib cache directory: rm ~/.cache/matplotlib -fr Restarting Jupyter. 尝试2 This work fo…

Kafka-服务端-副本机制

Kafka从0.8版本开始引入副本(Replica)的机制&#xff0c;其目的是为了增加Kafka集群的高可用性。 Kafka实现副本机制之后&#xff0c;每个分区可以有多个副本&#xff0c;并且会从其副本集合(Assigned Replica,AR)中选出一个副本作为Leader副本&#xff0c;所有的读写请求都由…

Bluetooth Device Address(BD_ADDR) - 2

蓝牙核心规范&#xff1a;Core v5.3中关于蓝牙地址的其他说明 Vol 3: Host, Part C: Generic Access Profile 3 User interface aspects 3.2 Representation of Bluetooth parameters 3.2.1 Bluetooth Device Address (BD_ADDR) BD_ADDR 是蓝牙设备使用的地址。在设备发现过…

IPoE技术汇总

在国内并没有遇到这么多的IPoE&#xff08;IP over Ethernet&#xff09;技术&#xff0c;可能也是因为我来日本多年了&#xff0c;没有接触国内的IPv4 over IPv6的技术&#xff0c;感觉国内IPv4地址紧张&#xff0c;用的传统NAT和PPPoE非常多&#xff0c;大多数设备还是建立在…

使用 YApi 管理 API 文档,测试, mock

随着互联网的发展&#xff0c;API变的至关重要。根据统计&#xff0c;目前市面上有上千万的开发者&#xff0c;互联网项目超过10亿&#xff0c;保守统计涉及的 API 数量大约有 100 亿。这么大基数的API&#xff0c;只要解决某些共有的痛点&#xff0c;将会是非常有意义的事情。…

开发实战角度:distinct实现原理及具体优化总结

1.背景 Distinct是一种常用的操作&#xff0c;在所有数据库的SQl语言中都是一个非常重要的操作&#xff0c;在Hive中&#xff0c;Distinct去重原理是通过MapReduce来实现的&#xff0c;Distinct操作可以应用于单个列&#xff0c;亦可以应用于多个列。基本原理是将输入的数据集…

机器学习期末复习总结笔记(李航统计学习方法)

文章目录 模型复杂度高---过拟合分类与回归有监督、无监督、半监督正则化生成模型和判别模型感知机KNN朴素贝叶斯决策树SVMAdaboost聚类风险PCA深度学习范数计算梯度下降与随机梯度下降SGD线性回归逻辑回归最大熵模型适用性讨论 模型复杂度高—过拟合 是什么&#xff1a;当模型…

golang通过go-git下载gitlab源码

1 申请令牌 方法1&#xff1a;具体项目下申请&#xff1a; 方法2&#xff1a;全局申请 2 获取token 3 下载代码 package mainimport ("fmt""os""github.com/go-git/go-git/v5" )func main() {_, err : git.PlainClone("/tmp/foo",…

java web mvc-07-Vaadin 入门介绍

拓展阅读 Spring Web MVC-00-重学 mvc mvc-01-Model-View-Controller 概览 web mvc-03-JFinal web mvc-04-Apache Wicket web mvc-05-JSF JavaServer Faces web mvc-06-play framework intro web mvc-07-Vaadin web mvc-08-Grails 开源 The jdbc pool for java.(java …

MySQL函数—数值函数,随机数验证码生成

MySQL函数—日期函数 函数功能CEIL(x)向上取整FLOOR(x)向下取整MOD(x,y)返回x/y的模&#xff08;取余&#xff09;RAND()返回0-1的随机数ROUND(x,y)求参数x的四舍五入&#xff0c;保留y位小数 1、向上取整&#xff1a;CEIL。只要小数点后的数字大于0就取整。 select CEIL(1.2…

Qt解析含颜色的QString字符串显示到控件

1、需求 开发接收含颜色字符串显示到窗口&#xff0c;可解析字符串颜色配置窗口属性&#xff0c;且分割字符串显示。 mprintf(“xxxxxx”)&#xff1b;打印的xxxxxx含有颜色配置。 2、实现方法 2.1、条件 选用Qt的PlainTextEdit控件显示字符串&#xff0c;配置为只读模式 …

pytestallure分析redis的数据并动态生成testCase报告

1.pytest.mark.parametrize pytest.mark.parametrize 是一个pytest的装饰器&#xff0c;它可以用于将参数传递给测试函数。使用 pytest.mark.parametrize 装饰器时&#xff0c;需要在装饰器中指定参数名称和参数值。对于多个参数&#xff0c;可以使用多个装饰器。 下面是一些…

数据链路层——笔记·续

使用集线器的星形拓扑 传统以太网传输媒体&#xff1a;粗同轴电缆 -> 细同轴电缆 -> 双绞线。 采用双绞线的以太网采用星形拓扑。 在星形的中心则增加了一种可靠性非常高的设备&#xff0c;叫做集线器 (hub)。 传统以太网使用同轴电缆&#xff0c;采用总线形拓扑结构&am…