首页 > 编程语言 >Python统计实战:一题搞定双因子方差分析(交互效应分析)

Python统计实战:一题搞定双因子方差分析(交互效应分析)

时间:2024-06-21 19:31:15浏览次数:24  
标签:行车时间 搞定 Python 效应 方差分析 df 时段 路段 col

为了解决特定问题而进行的学习是提高效率的最佳途径。这种方法能够使我们专注于最相关的知识和技能,从而更快地掌握解决问题所需的能力。

(以下练习题来源于《统计学—基于Python》。联系获取完整数据和Python源代码文件。)


练习题

城市道路交通管理部门为研究不同路段和不同时段对行车时间的影响,派一名交通警察分别在3个路段的高峰期与非高峰期亲自驾车进行实验,通过实验共获得30个行车时间(单位:分钟)数据。

时段路段1路段2路段3
高峰期36.528.132.4
高峰期34.129.933
高峰期37.232.236.2
高峰期35.631.535.5
高峰期3830.135.1
非高峰期30.627.631.8
非高峰期27.924.328
非高峰期32.42226.7
非高峰期31.825.429.3
非高峰期27.321.725.6

(1)分析路段、时段以及路段和时段的交互作用对行车时间的影响(α=0.05)。

(2)计算偏效应量并进行分析。


计算结果和分析

(1)设路段(因子A)对行车时间的效应分别为α1(路段1)、α2(路段2)、α3(路段3);时段(因子B)对行车时间的效应分别为β1(高峰期)、β2(非高峰期)。

检验路段效应的假设为:H0 = α1 = α2 = α3 = 0(路段对行车时间的影响不显著);H1:α1,α2,α3至少有一个不等于0(路段对行车时间的影响显著)

检验时段效应的假设为: H0 = β1 = β2 = 0(路段对行车时间的影响不显著);H1:β1,β2至少有一个不等于0(路段对行车时间的影响显著)

交互效应方差分析结果如下图所示。可以发现,检验时段和路段的P值均小于0.05,表示两个因子对行车时间的影响均显著;而检验交互效应的P值大于0.05,表示交互效应对产量的影响不显著。

# 主效应方差分析
# 将表格的短格式数据转为长格式
import pandas as pd
exercise9_5 = pd.read_csv('exercise9_5.csv')
# exercise9_4.head()

exercise9_5_1 = pd.melt(exercise9_5, id_vars = ['时段'], value_vars = ['路段1', '路段2', '路段3'],
                       var_name = '路段', value_name = '行车时间')

# 输出主效应方差分析表
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm

model2i = ols(formula = '行车时间 ~ 路段 + 时段 + 路段:时段', data = exercise9_5_1).fit()  
anova_lm(model2i, typ = 1) # 输出交互效应方差分析表

(2)主效应量与偏效应量如计算结果如下图所示。交互效应的偏效应量为0.000244,表示在排除时段和路段的影响后,交互效应解释了行车时间误差的0.0244%。如此小的偏效应量也佐证了(1)题检验中交互效应不显著的结论。

# 计算交互效应方差分析的效应量
import numpy as np
model2i = ols(formula = '行车时间 ~ 路段 + 时段 + 路段:时段', data = exercise9_5_1).fit()  
df_res = anova_lm(model2i, typ = 1) 
df_res['eta_sq'] = df_res['sum_sq'] / df_res['sum_sq'].sum()  # 计算主效应量
df_res['eta_sq_part'] = df_res['sum_sq'] / (df_res['sum_sq'] + df_res.loc['Residual', 'sum_sq']) # 计算偏效应量
df_res.loc['Residual', 'eta_sq_part'] = np.nan
df_res[['eta_sq', 'eta_sq_part']][:3]  # 输出前3行效应量

绘制主效应和交互效应图

下图中的箱线图反映了两个因子的主效应,可观察路段和时段的不同处理的行车实践差异。折线图反映了两个因子的交互效应。图中的各条折现基本上是平行的,表示两个因子间无明显的交互效应。

# 绘制主效应和交互效应图
from statsmodels.graphics.api import interaction_plot
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Songti SC'] # 设置中文字体
plt.rcParams['axes.unicode_minus'] = False     # 正常显示负号
df = exercise9_5_1

y_col = '行车时间'
x1_col = '时段'
x2_col = '路段'

plt.subplots(2, 2, figsize = (8, 7))
ax1 = plt.subplot(221)
interaction_plot(x = df[x2_col], trace = df[x1_col], response = df[y_col],
                xlabel = y_col, ylabel = x2_col, ax = ax1)
ax1.set_title(f'{y_col} ~ {x2_col}|{x1_col}')

ax2 = plt.subplot(222)
df.boxplot(column = y_col, by = x1_col, grid = False, ax = ax2)
ax2.set_title(f'{y_col} ~ {x1_col}|{x1_col}')

ax3 = plt.subplot(223)
df.boxplot(column = y_col, by = x2_col, grid = False, ax = ax3)
ax3.set_title(f'{y_col} ~ {x2_col}|{x2_col}')

ax4 = plt.subplot(224)
interaction_plot(x = df[x1_col], trace = df[x2_col], response = df[y_col],
                xlabel = y_col, ylabel = x1_col, ax = ax4)
ax4.set_title(f'{y_col} ~ {x1_col}|{x2_col}')

plt.tight_layout()

都读到这里了,不妨关注、点赞一下吧!

标签:行车时间,搞定,Python,效应,方差分析,df,时段,路段,col
From: https://blog.csdn.net/lucasluy2020/article/details/139779234

相关文章

  • python web框架哪家强?Flask、Django、FastAPI对比
    前言当你掌握了python的基础知识,并且会用和HTML和CSS编写简单的静态网页。现在你只需再掌握一个pythonweb框架的知识,就可以开始编写一个动态的网站了。目前市面比较流程的pythonweb框架有三个flask、Django、FastAPI。接下来我们对比一下。他们三个各自有什么特点。Flas......
  • Python+selenium+unittest框架实现网易邮箱的自动登录
    文章目录概要整体架构流程技术细节小结概要 本实例只针对简单的账密登录场景做处理,涉及登录方式切换、人机检测部分未作处理,后续会跟进处理。整体架构流程依赖环境    Python3.7    selenium3.141.0    ddt1.6.0        目......
  • Python标注工具labelImg使用Pyinstaller打包成EXE的过程及问题处理
    直接上过程1.在python项目中使用pip命令安装pyinstaller。2.在python编辑器(如Pycharm)终端切换到要打包的.py文件所在目录。3.使用pyinstaller工具命令打包.py文件,如:pyinstallerlabelImg.py--noconsole--workpath.\Pyinstaller\temp --distpath.\Pyinstaller\dist 4.......
  • python pyinstaller打包的exe 反编译问题记录 破解加密
    首先是用pyinstxtractor这个网上很多教程,不详说了。生成一个xxx.exe_extracted目录生成过程中,如果pyinstaller用key加密了,会[!]Error:FailedtodecompressPYZ-00.pyz_extracted\Cython\__init__.pyc,probablyencrypted.Extractingasis. 这个说是fail了,其实可以解......
  • 详解pip换源步骤,打造极速Python开发环境
    在当今日益数字化的世界中,Python及其包管理工具pip已成为开发者们不可缺少的工具。Python的广泛应用,从数据分析到人工智能,从Web开发到科学计算,都离不开大量高质量的库和包的支持。但是,在安装和管理这些库和包时,网络速度和源的可靠性往往成为制约效率的瓶颈。为了解决这一问题,......
  • Python批量保存Excel文件中的图表为图片
    Excel工作簿作为一款功能强大的数据处理与分析工具,被广泛应用于各种领域,不仅能够方便地组织和计算数据,还支持用户创建丰富多彩的图表,直观展示数据背后的洞察与趋势。然而,在报告编制、网页内容制作或分享数据分析成果时,直接嵌入整个Excel文件往往不够便捷,且可能受限于接收者......
  • python中的yield与yield from
    生成器与迭代器在Python中,迭代器就是可以用来迭代(比如for循环中的迭代)操作的对象,任何实现了__next__方法的对象都可以称之为迭代器。classFib:def__init__(self,n)->None:self.prev=0self.cur=1self.n=ndef__next__(self......
  • python rce
    之前学习过了rce在php下的利用,接下来来学习一下python中rce的利用,其根本主要就是执行系统命令的函数有所不同.os模块os是python中用来执行系统命令的包.下面是常用的两个方法.1.os.system:可以用来执行系统命令,但是无法将系统命令执行的结果返回.如果执行成功了会返回0,失败......
  • python读取excel文件
    在Python中,可以使用pandas库来读取Excel文件。首先,确保安装了pandas和openpyxl(用于处理Excel文件的库):pipinstallpandasopenpyxl以下是使用pandas读取Excel文件的示例代码:importpandasaspd#读取Excel文件df=pd.read_excel('example.xlsx')#显示数据框内容p......
  • Python学习之爬虫简单例子
    importBeautifulSoupimportpandasaspdimporturllib.request,urllib.errordefrequestUrl(url):  headers={    'User-Agent':"Mozilla/5.0(Macintosh;IntelMacOSX10_14_6)AppleWebKit/537.36(KHTML,likeGecko)Chrome/81.0.404......