当前位置: 首页 > news >正文

【Python实战因果推断】37_双重差分8

目录

Diff-in-Diff with Covariates


Diff-in-Diff with Covariates

您需要学习的 DID 的另一个变量是如何在模型中包含干预前协变量。这在您怀疑平行趋势不成立,但条件平行趋势成立的情况下非常有用:

E\Big[Y(0)_{it = 1}-Y(0)_{it = 0}\Big|D=1,X\Big]=E\Big[Y(0)_{it = 1}-Y(0)_{it = 0}\Big|D=0,X\Big]

考虑这种情况:您拥有与之前相同的营销数据,但现在您拥有全国多个地区的数据。如果你绘制出每个地区的干预结果和对照结果,你会发现一些有趣的现象:

 mkt_data_all = (pd.read_csv("./data/short_offline_mkt_all_regions.csv").astype({"date":"datetime64[ns]"}))

干预前的趋势在一个地区内似乎是平行的,但在不同地区之间却不是。因此,如果在这里简单地运行 DID 的双向固定效应规范,就会得到有偏差的 ATT 估计值:

 print("True ATT: ", mkt_data_all.query("treated*post==1")["tau"].mean())m = smf.ols('downloads ~ treated:post + C(city) + C(date)',data=mkt_data_all).fit()print("Estimated ATT:", m.params["treated:post"])True ATT: 1.7208921056102682Estimated ATT: 2.068391984256296

您需要以某种方式考虑每个地区的不同趋势。您可能会认为,只需在回归中加入地区作为额外的协变量就能解决问题。但请再想一想!还记得使用单位固定效应如何消除任何时间固定协变量的影响吗?这不仅适用于不可观测的混杂因素,也适用于跨时间恒定的地区协变量。最终的结果是,天真地将其加入回归是无害的。您将得到与之前相同的结果: 

 m = smf.ols('downloads ~ treated:post + C(city) + C(date) + C(region)',data=mkt_data_all).fit()m.params["treated:post"]2.071153674125536

要想在 DID 模型中正确包含干预前协变量,您需要回顾一下 DID 的工作原理,即估算两个重要部分:干预基线和控制趋势。然后将控制趋势投射到治疗基线中。这意味着您必须分别估计每个地区的控制趋势。矫枉过正的做法是对每个地区分别进行差分回归。您可以在各个地区之间循环,或者将整个 DID 模型与地区虚拟变量进行交互:

 m_saturated = smf.ols('downloads ~ (post*treated)*C(region)',data=mkt_data_all).fit()
atts = m_saturated.params[m_saturated.params.index.str.contains("post:treated")]attspost:treated 1.676808
post:treated:C(region)[T.N] -0.343667
post:treated:C(region)[T.S] -0.985072
post:treated:C(region)[T.W] 1.369363
dtype: float64

请记住,ATT 估计值应根据基线组来解释,在本例中,基线组为东部地区。因此,对北部地区的影响为 1.67-0.34,对南部地区的影响为 1.67-0.98,以此类推。接下来,您可以使用加权平均法对不同的 ATT 进行汇总,其中一个地区的城市数量就是权重:

 reg_size = (mkt_data_all.groupby("region").size()/len(mkt_data_all["date"].unique()))base = atts[0]np.array([reg_size[0]*base]+[(att+base)*sizefor att, size in zip(atts[1:], reg_size[1:])]).sum()/sum(reg_size)1.6940400451471818

尽管我说这是矫枉过正,但这其实是个不错的主意。它很容易实现,也很难出错。不过,它也有一些问题。例如,如果你有很多协变量或连续协变量,这种方法就不切实际了。因此,我认为您应该知道还有另一种方法。与其将区域与治疗后和治疗后虚拟变量交互,您可以只与治疗后虚拟变量交互。这个模型将分别估计每个地区受治疗者的趋势(治疗前和治疗后的结果水平),但它将拟合一个截距移动到受治疗者和治疗后时期:

  m = smf.ols('downloads ~ post*(treated + C(region))',data=mkt_data_all).fit()m.summary().tables[1]

与 post:treated 相关的参数可以解释为 ATT。它与您之前得到的 ATT 并不完全相同,但非常接近。出现这种差异的原因是--您现在应该知道--回归按方差对各地区的 ATT 进行了平均,而之前是按地区大小进行平均的。这意味着回归会使干预分布更均匀(方差更大)的地区占更大比重。

第二种方法运行速度更快,但缺点是需要仔细考虑如何进行交互。因此,我建议您只有在真正了解自己在做什么的情况下才使用这种方法。或者,在使用之前,先尝试建立一些模拟数据,在这些数据中,您知道真实的 ATT,然后看看能否用您的模型恢复它。请记住:为每个地区运行一个 DID 模型并求取平均结果并不丢人。事实上,这是一个特别聪明的想法。

相关文章:

【Python实战因果推断】37_双重差分8

目录 Diff-in-Diff with Covariates Diff-in-Diff with Covariates 您需要学习的 DID 的另一个变量是如何在模型中包含干预前协变量。这在您怀疑平行趋势不成立,但条件平行趋势成立的情况下非常有用: 考虑这种情况:您拥有与之前相同的营销数…...

【python学习】第三方库之matplotlib的定义、功能、使用场景和代码示例(线图、直方图、散点图)

引言 Matplotlib 是一个 Python 的 2D 绘图库,它可以在各种平台上以各种硬拷贝格式和交互环境生成具有出版品质的图形。通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图、直方图、功率谱、条形图、错误图、散点图等 Matplotlib 是 …...

MySQL(3)表的操作

目录 1. 表的操作; 2. 数据类型; 1. 表的操作: 1.1 创建表: 语法: create table 表名( 属性 类型 [comment ], 属性 类型 [comment ], 属性 类型 ) character set 字符集 collate 校验集 engine 存储引擎; 前面博客提到: MyISAM和InoDB这两个比较重要. 1.2 查看表…...

SQL GROUPING运算符详解

在大数据开发中,我们经常需要对数据进行分组和汇总分析。 目录 1. GROUPING运算符概念2. 语法和用法3. 实际应用示例4. GROUPING运算符的优势5. 高级应用场景5.1 与CASE语句结合使用5.2 多维数据分析 6. 性能考虑和优化技巧7. GROUPING运算符的局限性8. 最佳实践9. GROUPING与其…...

在VS2017下FFmpeg+SDL编写最简单的视频播放器

1.下载ShiftMediaProject/FFmpeg 2.下载SDL2 3.新建VC控制台应用 3.配置include和lib 4.把FFmpeg和SDL的dll 复制到工程Debug目录下,并设置调试命令 5.复制一下mp4视频到工程Debug目录下(复制一份到*.vcxproj同一目录,用于调试) 6…...

LogViewer v2.x更新

logvewer 介绍 logviewer 是一个可以方便开发人员通过浏览器查看和下载远程服务器集群日志,使用ssh方式管理远程tomcat、jar包等应用,节省服务器资源。大家可以下载体验,请勿用于生产环境。欢迎提出意见或建议。 解决的问题 一般情况下公司…...

detection_segmentation

目标检测和实例分割(OBJECT_DETECTION AND INSTANCE SEGMENTATION) 文章目录 目标检测和实例分割(OBJECT_DETECTION AND INSTANCE SEGMENTATION)一. 计算机视觉(AI VISION)1. 图像分类2. 目标检测与定位3. 语义分割和实例分割目标检测算法可以分为两大类: R-CNN生成…...

0基础学python-13:古希腊掌管时间的模块——datetime和time

目录 前言 datetime模块 一、datetime 类 1.创建 datetime 对象 2.获取日期时间的各个部分 3.格式化日期时间为字符串 4.解析字符串为 datetime 对象 二、timedelta 类 1.创建 timedelta 对象 datetime注意事项 time模块 1.获取当前时间戳 2.获取当前时间的结构化表…...

棒球特长生升学具有其独特的优势和劣势·棒球6号位

棒球特长生升学具有其独特的优势和劣势,以下是对这两方面的详细分析: 获得更好的教育资源: 棒球特长生有机会通过棒球特长招生计划进入更好的学校。这些学校往往拥有更优质的教育资源,包括师资力量、教学设施、课程设置等&#…...

搜维尔科技:Xsens DOT 可穿戴传感器介绍及示例应用演示

Xsens DOT可穿戴传感器介绍及示例应用演示 搜维尔科技:Xsens DOT 可穿戴传感器介绍及示例应用演示...

数据分析案例-2024 年热门动漫数据集可视化分析

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…...

C#小结:未能找到类型或命名空间名“xxx”(是否缺少 using 指令或程序集引用?)

方案一:移除类库这些失效的引用,下载对应版本的dll(如有则不需要重复下载),重新添加引用 方案二:类库右键属性-调整目标框架版本(一般是降低版本) 方案三:调整类库编译顺…...

STM32智能无人机控制系统教程

目录 引言环境准备智能无人机控制系统基础代码实现:实现智能无人机控制系统 4.1 数据采集模块 4.2 数据处理与控制算法 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景:无人机管理与优化问题解决方案与优化收尾与总结 1. 引言 智能无人机控…...

从 QWebEnginePage 打印文档

QWebEnginePage 是 Qt WebEngine 模块中的一个类,它提供了用于处理网页内容的接口。如果你想要打印 QWebEnginePage 中的内容,你可以使用 QPrinter 和 QPrintDialog 类来实现。 项目配置了 Qt WebEngine 模块,并且在你的.pro文件中包含了相应…...

初识Docker及管理Docker

Docker部署 初识DockerDocker是什么Docker的核心概念镜像容器仓库 容器优点容器在内核中支持2种重要技术:Docker容器与虚拟机的区别 安装Docker源码安装yum安装检查Docker Docker 镜像操作配置镜像加速器(阿里系)搜索镜像获取镜像查看镜像信息…...

【学术会议征稿】2024年第三届信息学,网络与计算技术国际学术会议(ICINC2024)

2024年第三届信息学,网络与计算技术国际学术会议(ICINC2024) 2024 3rd International Conference on Informatics,Networking and Computing (ICINC 2024) 2024年第三届信息学,网络与计算技术国际学术会议(ICINC2024)将于2024年10月25-27日于中国郑州召…...

在golang中Sprintf和Printf 的区别

最近一直在学习golang这个编程语言,我们这里做一个笔记就是 Sprintf和Printf 的区别 fmt.Sprintf 根据格式化参数生成格式化的字符串并返回该字符串。 fmt.Printf 根据格式化参数生成格式化的字符串并写入标准输出。由上面就可以知道,fmt.Sprintf返回的…...

策略模式原理与C++实现

定义 定义一些列算法,把他们一个个封装起来,并且使他们可以相互替换(变化)。该模式使得算法可独立于使用它的客户程序(稳定)而变化(扩展、子类化)。 C实现 在不考虑策略模式的情况…...

打包一个自己的Vivado IP核

写在前面 模块复用是逻辑设计人员必须掌握的一个基本功,通过将成熟模块打包成IP核,可实现重复利用,避免重复造轮子,大幅提高我们的开发效率。 接下来将之前设计的串口接收模块和串口发送模块打包成IP核,再分别调用…...

《昇思25天学习打卡营第05天|qingyun201003》

日期 心得 通过本节课的学习,学习到了通过网络获取数据集,处理数据集模型。数据模型层数据变换,模型参数解析和其对应代码中的API进行解析。 昇思MindSpore 基础入门学习 网络构建 (AI 代码解析) 网络构建 神经网络模型是由神经网络层和T…...

如何在Hermes Agent项目中自定义Provider接入Taotoken多模型服务

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 如何在Hermes Agent项目中自定义Provider接入Taotoken多模型服务 Hermes Agent 是一个功能强大的AI代理框架,它允许开发…...

别再死记硬背PID参数了!手把手教你用AFM虚拟实验调出清晰形貌图

从零掌握AFM虚拟实验:PID调参实战指南与形貌优化技巧 第一次打开AFM虚拟实验界面时,面对密密麻麻的PID参数滑块,我完全懵了——P值调大还是调小?I参数到底影响什么?为什么别人的样品图像清晰锐利,而我的总是…...

拆解国产FPGA的HDMI显示链路:从PGL22G的TMDS编码到MS7200接收芯片的完整信号流分析

国产FPGA的HDMI显示链路深度解析:从PGL22G的TMDS编码到MS7200接收芯片全流程 在当今国产芯片崛起的浪潮中,紫光同创PGL22G FPGA以其出色的性价比和完整的生态支持,成为许多视频处理项目的首选。本文将带您深入理解一个完整的HDMI显示链路如何…...

3分钟上手XXMI启动器:一站式二次元游戏模组管理平台

3分钟上手XXMI启动器:一站式二次元游戏模组管理平台 【免费下载链接】XXMI-Launcher Modding platform for GI, HSR, WW and ZZZ 项目地址: https://gitcode.com/gh_mirrors/xx/XXMI-Launcher 你是否曾为管理不同游戏的模组而感到头疼?每个游戏都…...

AI 编码循环验证关卡:结构背压比智能代理更优,Shen-Backpressure 来助力!

结构背压优于智能代理:用 Shen-Backpressure 为 AI 编码循环设验证关卡2026 年 5 月 18 日,一些最严重的软件漏洞往往不起眼,访问控制漏洞仍是 [OWASP 十大安全风险中的头号问题](https://owasp.org/Top10/2025/A01_2025-Broken_Access_Contr…...

从零开始构建FPGA项目:ADI HDL开发实战经验分享

从零开始构建FPGA项目:ADI HDL开发实战经验分享 【免费下载链接】hdl HDL libraries and projects 项目地址: https://gitcode.com/gh_mirrors/hd/hdl ADI HDL(Analog Devices HDL)是一套功能强大的硬件描述语言库,专为FPG…...

如何用AntiMicroX解决PC游戏手柄兼容问题:5分钟快速上手终极手柄映射工具

如何用AntiMicroX解决PC游戏手柄兼容问题:5分钟快速上手终极手柄映射工具 【免费下载链接】antimicrox Graphical program used to map keyboard buttons and mouse controls to a gamepad. Useful for playing games with no gamepad support. 项目地址: https:/…...

数据中心网络卡顿?可能是你的链路聚合负载分担策略没选对!

数据中心网络卡顿?深度解析链路聚合负载分担策略优化之道 当视频会议卡成PPT、网页加载转圈圈时,很多运维团队的第一反应是"带宽不够"。但在实际排查中,我们经常发现这样的场景:交换机之间的物理链路明明已经通过链路聚…...

终极量化数据获取指南:3步掌握pywencai高效获取同花顺问财数据

终极量化数据获取指南:3步掌握pywencai高效获取同花顺问财数据 【免费下载链接】pywencai 获取同花顺问财数据 项目地址: https://gitcode.com/gh_mirrors/py/pywencai 在量化投资和金融数据分析领域,获取精准、实时的A股市场数据一直是技术开发者…...

波卡XCMP深度解析:跨链通信的核心标准与实战指南

波卡XCMP深度解析:跨链通信的核心标准与实战指南 引言:多链时代的“通信协议” 在区块链从“单链”走向“多链”甚至“链网”的演进中,跨链互操作性已成为决定生态繁荣与否的关键。波卡(Polkadot)提出的XCMP&#xff0…...