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 stats


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_way


def 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_way


def 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.mfbz.cn/a/343922.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

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…

《Linux C编程实战》笔记:信号的发送

信号的发送主要由函数kill、raise、sigqueue、alarm、setitimer以及abort来完成 kill函数 kill函数用来发送信号给指定的进程。 #include<sys/types.h> #include<signal.h> int kill(pid_t pid,int sig); 该函数的行为与第一个参数pid有关&#xff0c;第二个参…

开源模型应用落地-业务整合篇(四)

一、前言 通过学习第三篇文章&#xff0c;我们已经成功地建立了IM与AI服务之间的数据链路。然而&#xff0c;我们目前面临一个紧迫需要解决的安全性问题&#xff0c;即非法用户可能会通过获取WebSocket的连接信息&#xff0c;顺利地连接到我们的服务。这不仅占用了大量的无效连…

jenkins安装配置,使用Docker发布maven项目全过程记录(2)

2、使用Docker发布Maven项目过程的配置 首先说明&#xff0c;在这里仅介绍我使用Jenkins的发布过程的配置&#xff0c;不涉及Dockerfile、docker-compose.yml文件的内容。 2.1 创建Item 在这里&#xff0c;输入item名称&#xff0c;我使用的Freestyle project&#xff0c;点击…

MSP430仿真器使用常见问题

一、 主要是驱动安装问题 有用户反应驱动安装不上&#xff0c;按照用户手册操作一直不能安装成功。 可以尝试如下步骤进行安装。 1. 双击设备管理器中无法安装或者提示有错误的430仿真器设备 选择驱动程序——更新驱动程序 选择手动安装 选择从电脑设备驱动列表中安装 弹出下…

Spring Security 6 学习-1

什么是 Spring Security Spring Security文档 Spring Security中文文档 Spring Security 是 Spring 家族中的安全型开发框架&#xff0c;主要解决三大方面问题&#xff1a;认证&#xff08;你是谁&#xff09;、授权&#xff08;你能干什么&#xff09;、常见攻击保护&#xff…

mysql INSERT数据覆盖现有元素(若存在)

INSERT...ON DUPLICATE KEY UPDATE的使用 如果指定了ON DUPLICATE KEY UPDATE&#xff0c;并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值&#xff0c;则会更新ON DUPLICATE KEY UPDATE关键字后面的字段值。 例如&#xff0c;如果列a被定义为UNIQUE&#xff0…

机器学习实验3——支持向量机分类鸢尾花

文章目录 &#x1f9e1;&#x1f9e1;实验内容&#x1f9e1;&#x1f9e1;&#x1f9e1;&#x1f9e1;数据预处理&#x1f9e1;&#x1f9e1;代码认识数据相关性分析径向可视化各个特征之间的关系图 &#x1f9e1;&#x1f9e1;支持向量机SVM求解&#x1f9e1;&#x1f9e1;直觉…

JavaEE-Nuxt中的vuex

Nuxt中的vuex 参考&#xff1a;https://v2.nuxt.com/docs/directory-structure/store 3.1 根模块数据操作 步骤一&#xff1a;创建 store/index.js 添加一个 counter变量&#xff0c;并可以继续累加操作 export const state () > ({counter: 0 })export const mutations …

用户反映在浏览器中使用AI工具 Copilot 遇到严重卡顿问题,微软官方给出初步解释

近日&#xff0c;多位用户反馈在使用Edge和Chrome浏览器中的Copilot时出现卡顿问题&#xff0c;甚至需要重启浏览器才能解决。对此&#xff0c;微软广告和网络服务部门CEO米哈伊尔帕拉欣表示&#xff0c;问题可能与Edge浏览器的“效率模式”有关。 微软中国官方网址链接&#x…

【GitHub项目推荐--12 年历史的 PDF 工具开源了】【转载】

最近在整理 PDF 的时候&#xff0c;有一些需求普通的 PDF 编辑器没办法满足&#xff0c;比如 PDF 批量合并、编辑等。 于是&#xff0c;我就去 GitHub 上看一看有没有现成的轮子&#xff0c;发现了这个 PDF 神器「PDF 补丁丁」&#xff0c;让人惊讶的是这个 PDF 神器有 12 年的…

C#,计算几何,鼠标点击绘制 (二维,三次)B样条曲线的代码

B样条&#xff08;B-Spline&#xff09;是常用的曲线拟合与插值算法之一。 这里给出在 Form 的 图像 Picturebox 组件上&#xff0c;按鼠标点击点绘制 &#xff08;三次&#xff09;B样条曲线的代码。 2022-12-05 修改了代码。 1 文本格式 using System; using System.Data; …

机器人制作开源方案 | 智能特殊环境清洗机器人

作者&#xff1a;达德聪 袁豪杰 杨垚 单位&#xff1a;邢台学院 指导老师&#xff1a;王承林 杨立芹 智能特殊环境清洗机器人基于STC系列单片机为核心&#xff0c;驱动摄像头模块、超声波模块、ESP8266无线模块、自动寻迹模块、舵机模块、语音识别模块&#xff0c;实现自主寻…

《WebKit 技术内幕》学习之十二(2):安全机制

2 沙箱模型 2.1 原理 一般而言&#xff0c;对于网络上的网页中的JavaScript代码和插件是不受信的&#xff08;除非是经过认证的网站&#xff09;&#xff0c;特别是一些故意设计侵入浏览器运行的主机代码更是非常危险&#xff0c;通过一些手段或者浏览器中的漏洞&#xff0c…

中仕教育:事业编招考全流程介绍

一、报名阶段 1. 了解查看招聘信息&#xff1a;查看各类事业编岗位的招聘信息&#xff0c;包括岗位职责、招聘条件、报名时间等。 2. 填写报名表&#xff1a;按照要求填写报名表&#xff0c;包括个人信息、教育背景、工作经历等内容。 3. 提交报名材料&#xff1a;将报名表及…

作物品种测试——批量获取试验站点直线距离

参考资料&#xff1a; 根据经纬度计算两地之间的距离_经纬度计算距离-CSDN博客 用于计算不同试验站点之间的距离&#xff0c;可以据此来评估各试验站点分布的合理性。 1、首选需要准备excel文件&#xff0c;用于存放各试验站点的经纬度信息。数据列内容如下&#xff1a; 2、…

[Android] Android文件系统中存储的内容有哪些?

文章目录 前言root 文件系统/system 分区稳定性:安全性: /system/bin用来提供服务的二进制可执行文件:调试工具:UNIX 命令&#xff1a;调用 Dalvik 的脚本(upall script):/system/bin中封装的app_process脚本 厂商定制的二进制可执行文件: /system/xbin/system/lib[64]/system/…

x-cmd pkg | perl - 具有强大的文本处理能力的通用脚本语言

目录 介绍首次用户技术特点竞品进一步阅读 介绍 Perl 是一种动态弱类型编程语言。Perl 内部集成了正则表达式的功能&#xff0c;以及巨大的第三方代码库 CPAN;在处理文本领域,是最有竞争力的一门编程语言之一 生态系统&#xff1a;综合 Perl 档案网络 (CPAN) 提供了超过 25,0…

记一次Flink通过Kafka写入MySQL的过程

一、前言 总体思路&#xff1a;source -->transform -->sink ,即从source获取相应的数据来源&#xff0c;然后进行数据转换&#xff0c;将数据从比较乱的格式&#xff0c;转换成我们需要的格式&#xff0c;转换处理后&#xff0c;然后进行sink功能&#xff0c;也就是将数…

记一次压测程序时的OOM分析过程

背景&#xff1a;在一个项目调优的过程中&#xff0c;丰富了一些组件后&#xff0c;再次对项目进行压测&#xff0c;发现和之前的性能差距甚大&#xff0c;并且每次运行一段时间后&#xff0c;延迟骤增&#xff0c;带宽骤降&#xff0c;查看程序日志&#xff0c;发现了 OutOfMe…
最新文章