【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 模型并求取平均结果并不丢人。事实上,这是一个特别聪明的想法。

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

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

相关文章

c语言唯一一个三目运算符

条件表达式由两个符号(?和:)组成,必须一起使用。要求有三个操作对象,称为三目运算符。 一般形式为 表达式1?表达式2:表达式3 理解如下: a>b?(maxa):(maxb); //相当…

Apache trino的ldap认证开启

作者:櫰木 1、背景 由于trino 默认没有开启用户认证体系,需要ldap用户进行认证。开启tls和ldap用户认证,提高安全性。 2、配置 前置条件。 trino 集群已经部署完成 ldap 服务 openjdk 版本大于11.0.17 生成证书 keytool -genkeypair…

【动态规划1】斐波那契数列模型篇

文章目录 声明动态规划介绍1137.第N个泰波那契数题目描述分析代码 面试题 08.01. 三步问题题目描述分析代码 746.使用最小花费爬楼梯题目描述分析代码 91.解码⽅法题目描述分析代码 声明 本篇博客为动态规的基础篇,从零开始学习动态规划,如有错误&#…

AGI 之 【Hugging Face】 的【问答系统】的 [评估并改进问答Pipeline] / [ 生成式问答 ] 的简单整理

AGI 之 【Hugging Face】 的【问答系统】的 [评估并改进问答Pipeline] / [ 生成式问答 ] 的简单整理 目录 AGI 之 【Hugging Face】 的【问答系统】的 [评估并改进问答Pipeline] / [ 生成式问答 ] 的简单整理 一、简单介绍 二、构建问答系统 三、评估并改进问答pipeline 1…

[k8s源码]4.informer

Informer 是 client-go 库中的一个核心组件,它提供了一种高效的方式来监视 Kubernetes 集群中资源的变化。Informer 通过 Watch 机制与 API Server 建立长连接,初次同步时会获取资源的完整列表,之后只接收增量更新,大大减少了网络流量。 使用informer可…

Java常用排序算法

算法复杂度 详解Java常用排序算法(10种,含演示动画) 冒泡排序(Bubble Sort) arr[0] 与 arr[1]比较,如果前面元素大就交换,如果后边元素大就不交换。然后依次arr[1]与arr[2]比较,第…

可视化工具选择指南:助力企业数字化转型和新质生产力发展

随着信息技术的快速发展和新质生产力概念的兴起,可视化工具在各个行业中的作用日益凸显。这些工具不仅能够帮助用户更直观地理解和分析数据,还能提升团队的协作效率和决策质量。 在当今数字化转型迅速发展的背景下,新质生产力的概念正在成为…

SpringBoot使用开发环境的application.properties

在Spring Boot项目中,application.properties 或 application.yml 文件是用于配置应用程序外部属性的重要文件。这些文件允许定制你的应用,而无需更改代码。根据不同的运行环境,可以通过创建以application-{profile}.properties格式命名的文件…

python-区间内的真素数(赛氪OJ)

[题目描述] 找出正整数 M 和 N 之间(N 不小于 M)的所有真素数。真素数的定义:如果一个正整数 P 为素数,且其反序也为素数,那么 P 就为真素数。 例如,11,13 均为真素数,因为 11 的反序…

利用Amazon Rekognition Face Liveness进行人脸活体检测的实践与探索

在人工智能、机器学习技术日渐普及的当下,出海企业都希望能够加快利用人工智能、机器学习技术,从而打造智能产品及其增值服务、为各地区提供本地化和个性化的服务体验及实现自身业务流程智能化。九河云将介绍人脸活体检测解决方案,亚马逊云科…

录频软件大盘点,哪款是你的最爱?

随着网络技术的飞速发展,人们对于录频软件的需求越来越强烈。无论是教育工作者、学生、游戏玩家还是商务人士,一款合适的录频软件都可以为他们提供便利。本文将介绍3款主流的录频软件,以帮助用户了解它们的特点、功能以及操作方法。 录频软件…

在Centos上安装MySQL

目录 在Centos上安装MySQL1.确认当前的系统版本2.添加 MySQL Yum 源2.1访问MySQL开发者专区2.2根据当前系统选择对应的发布包2.3补充 3.MySQL的历史发行版本4.安装发布包5.安装MySQL5.1启动MySQL服务器5.2查看服务器状态5.3开机自启动5.4 登入MySQL5.5修改密码 在Centos上安装M…

Spring Data Redis + Redis数据缓存学习笔记

文章目录 1 Redis 入门1.1 简介1.2 Redis服务启动与停止(Windows)1.2.1 服务启动命令1.2.2 客户端连接命令1.2.3 修改Redis配置文件1.2.4 Redis客户端图形工具 2. Redis数据类型2.1 五种常用数据类型介绍 3. Redis常用命令3.1 字符串操作命令3.2 哈希操作…

Docker-Nvidia(NVIDIA Container Toolkit)

安装NVIDIA Container Toolkit工具,支持docker使用GPU 目录 1.NVIDIA Container Toolkit 安装1.1 nvidia-docker安装1.2 验证1.2.1 验证安装1.2.2 额外补充 1.NVIDIA Container Toolkit 安装 1.1 nvidia-docker安装 NVIDIA/nvidia-docker Installing the NVIDIA …

SQL Server Query Store Settings (查询存储设置)

参考:Query Store Settings - Erin Stellato 在 SQL Server 2017 中,有九 (9) 个设置与查询存储相关。虽然这些设置记录在sys.database_query_store_options中,但我经常被问到每个设置的值“应该”是多少。我在下面列出了每个设置&am…

AI数字人直播源码解析:灰豚私有化部署背后的技术分析

随着AI数字人技术的应用潜力不断显现,与AI数字人相关的多个项目逐渐成为创业者们的重点关注对象,作为当前AI数字人典型应用场景之一的数字人直播意向人数更是屡创新高,AI数字人直播源码部署的热度也因此不断飙升,与各大数字人源码…

Centos7 安装私有 Gitlab

在 CentOS 7上,下面的命令也会在系统防火墙中打开 HTTP、HTTPS 和 SSH 访问。这是一个可选步骤,如果您打算仅从本地网络访问极狐GitLab,则可以跳过它。 sudo yum install -y curl policycoreutils-python openssh-server perl sudo systemct…

昇思25天学习打卡营第20天|应用实践之RNN实现情感分类

基本介绍 今天的应用实践是RNN实现情感分类,情感分类是自然语言处理中的经典任务,是典型的分类问题。RNN是一种循环神经网络,接收序列数据作为输入。模型训练所采用的数据集是IMDB影评数据集,数据集包含Positive和Negative两类。由…

数据库基础-进阶

数据库管理: *sql语句 数据库用来增删改查的语句 *** 备份 数据库的数据进行备份 * 主从复制,读写分离,高可用 原理 数据库的概念和相关的语法和规范: 数据库:组织,存储,管理数据的仓库。 数据…

cpp 强制转换

一、static_cast static_cast 是 C 中的一个类型转换操作符,用于在类的层次结构中进行安全的向上转换(从派生类到基类)或进行不需要运行时类型检查的转换。它主要用于基本数据类型之间的转换、对象指针或引用的向上转换(即从派生…