【Python实战因果推断】40_双重差分11

目录

Heterogeneous Effect over Time


Heterogeneous Effect over Time

有好消息也有坏消息。首先是好消息:你已经发现了问题所在。也就是说,你知道 TWFE 在应用于具有时间异构效应的交错采用数据时是有偏差的。用更专业的术语来说,您的数据生成过程具有不同的效应参数:

Y_{it}=\tau_{it}W_{it}+\alpha_{i}+\gamma_{t}+e_{it},

但你假设效果是恒定的:

Y_{it}=\tau W_{it}+\alpha_{i}+\gamma_{t}+e_{it} .

如果问题出在这里,一个简单的解决方法就是让每个时间和单位都有不同的效果。理论上,你可以用下面的公式实现类似的效果:downloads ~ treated:post:C(date):C(city) + C(date) + C(city)

就这样?问题解决了?不尽然。坏消息是:这个模型的参数会多于数据点的数量。由于日期和单位是相互影响的,因此每个单位在每个时间段都会有一个干预效应参数。但这正是您所拥有的样本数量!OLS 在这里根本无法运行。

好吧,所以你需要减少模型的干预效应参数数量。要做到这一点,你能想到以某种方式对单位进行分组吗?如果你稍微挠挠头,就会发现一种非常自然的分组方法:按队列分组!要知道,整个组群的效应随着时间的推移会遵循相同的模式。因此,对这种不切实际的模式的一个自然改进就是允许效应按群组而不是按单位变化:

Y_{it}=\tau_{gt}W_{it}+\alpha_{i}+\gamma_{t}+e_{it} .

该模型的干预效果参数数量更合理,因为队列数通常比单位数少得多。现在,您终于可以运行模型了:

 formula = "downloads ~ treated:post:C(cohort):C(date) + C(city)+C(date)"twfe_model = smf.ols(formula, data=mkt_data_cohorts_w).fit()

这将为您提供多个 ATT 估计值:每个队列和日期一个。因此,要想知道自己的方法是否正确,可以计算模型所隐含的个体干预效果估计值,然后求出平均值。要做到这一点,只需将干预后各单位的实际干预结果与模型预测的 \hat{y}_{0} 进行比较即可:

 df_pred = (mkt_data_cohorts_w.query("post==1 & treated==1").assign(y_hat_0=lambda d: twfe_model.predict(d.assign(treated=0))).assign(effect_hat=lambda d: d["downloads"] - d["y_hat_0"]))print("Number of param.:", len(twfe_model.params))print("True Effect: ", df_pred["tau"].mean())print("Pred. Effect: ", df_pred["effect_hat"].mean())Number of param.: 510True Effect: 2.2625252108176266Pred. Effect: 2.259766144685074

最终这给了你一个带有一堆参数的模型,但它确实设法恢复了真正的ATT。你甚至可以提取这些att并绘制它们:

这幅图的好处在于,它符合您对效应表现的直觉:效应逐渐上升,一段时间后保持不变。此外,它还告诉您,在干预前的所有时期,效果都为零,因此,从未干预过的人群的效果也为零。这可能会给您提供一些如何减少该模型参数数量的思路。例如,您可以只考虑大于队列的时间段的影响:

Y_{it}=\tau_{g,t\geq g}W_{it}+\alpha_{i}+\gamma_{t}+e_{it} .

这将涉及大量的特性工程,因为你必须在治疗前对日期进行分组,但很高兴知道这是可能的。

就像在差异模型中加入协变量的问题一样,解决 TWFE 偏差的方法有两种。一种是在运行双向固定效应模型时巧妙地将虚拟变量进行交互。另一种方法是将问题分解成多个 2 × 2 差分模型,分别求解每个模型,然后合并结果。一种方法是使用从未接受过治疗的组作为对照,为每个队列估计一个差异模型:

 cohorts = sorted(mkt_data_cohorts_w["cohort"].unique())treated_G = cohorts[:-1]nvr_treated = cohorts[-1]def did_g_vs_nvr_treated(df: pd.DataFrame,cohort: str,nvr_treated: str,cohort_col: str = "cohort",date_col: str = "date",y_col: str = "downloads"):did_g = (df.loc[lambda d:(d[cohort_col] == cohort)|(d[cohort_col] == nvr_treated)].assign(treated = lambda d: (d[cohort_col] == cohort)*1).assign(post = lambda d:(pd.to_datetime(d[date_col])>=cohort)*1))att_g = smf.ols(f"{y_col} ~ treated*post",data=did_g).fit().params["treated:post"]size = len(did_g.query("treated==1 & post==1"))return {"att_g": att_g, "size": size}atts = pd.DataFrame([did_g_vs_nvr_treated(mkt_data_cohorts_w, cohort, nvr_treated)for cohort in treated_G])atts

然后,您可以将结果与加权平均值相结合,其中的权重是每个队列的样本量(T * N)。得出的估计结果与您之前的估计结果非常相似:

 (atts["att_g"]*atts["size"]).sum()/atts["size"].sum()2.2247467740558697

另外,您也可以使用尚未接受治疗的人群作为对照,而不是使用从未接受治疗的人群作为对照,这样可以增加对照的样本量。这种方法比较麻烦,因为您必须对同一队列多次运行差分法。

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

TDesign组件库日常应用的一些注意事项

【前言】Element(饿了么开源组件库)在国内使用的普及率和覆盖率高于TDesign-vue(腾讯开源组件库),这也导致日常开发遇到组件使用上的疑惑时,网上几乎搜索不到其文章解决方案,只能深挖官方文档或…

大厂面试官问我:Redis为什么使用哈希槽的方式进行数据分片?为什么不适用一致性哈希的方式?【后端八股文十三:Redis 集群哈希八股文合集(1)】

本文为【Redis 集群哈希 八股文合集(1)】初版,后续还会进行优化更新,欢迎大家关注交流~ hello hello~ ,这里是绝命Coding——老白~💖💖 ,欢迎大家点赞🥳🥳关注…

pdf怎么转换成图片?3种PDF转图片方法分享

pdf怎么转换成图片?将PDF转换成图片不仅满足了快速分享的需求,还便于在多种平台上展示。特别是在社交媒体、演示文稿或在线文档中,图片格式的PDF页面更加直观易用。此外,转换成图片后,我们还可以利用图片编辑工具对PDF…

【Linux】启动的秘密花园:深入GRUB、Init系统和Systemd

🐇明明跟你说过:个人主页 🏅个人专栏:《Linux :从菜鸟到飞鸟的逆袭》🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、Linux的起源与发展 2、Linux的特点 3、Linux启…

Java中的迭代器(Iterator)

Java中的迭代器(Iterator) 1、 迭代器的基本方法2、 迭代器的使用示例3、注意事项4、克隆与序列化5、结论 💖The Begin💖点点关注,收藏不迷路💖 在Java中,迭代器(Iterator&#xff0…

隐性行为克隆——机器人的复杂行为模仿学习的新表述

介绍 论文地址:https://arxiv.org/pdf/2109.00137.pdf 源码地址:https://github.com/opendilab/DI-engine.git 近年来,人们对机器人学习进行了大量研究,并取得了许多成果。其中,模仿学习法尤其受到关注。这是一种从人…

无线通信 | 发射系统架构:两次变频发射机和直接变频发射机

微信公众号上线,搜索公众号小灰灰的FPGA,关注可获取相关源码,定期更新有关FPGA的项目以及开源项目源码,包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 本节目录 一、发射系统架构 1、两次变频发射机 2、直接变频发射机…

微信小程序 vant-weapp的 SwipeCell 滑动单元格 van-swipe-cell 滑动单元格不显示 和 样式问题 滑动后删除样式不显示

在微信小程序开发过程中 遇到个坑 此处引用 swipeCell 组件 刚开始是组件不显示 然后又遇到样式不生效 首先排除问题 是否在.json文件中引入了组件 {"usingComponents": {"van-swipe-cell": "vant/weapp/swipe-cell/index","van-cell-gro…

图新地球-如何快速绘制各种形状的箭头(一分钟小视频演示)

0.序 随着近几年测绘成果的完善,很多检察院、规划院、自然资源局等政府与事业单位,日常的应用也都不在仅仅局限于原来的卫星影像底图了,很多院都应用上了无人机航测高分辨率影像以及倾斜模型。 可能经常需要再道路中央标注汽车行驶方向、掉头…

AQS源码解析(ReentrantLock)

什么是AQS:Juc中的大多数同步器都是围绕着一些相同的基础行为,比如等待队列,条件队列,共享,独占获取变量这些行为,抽象出来就是基于AQS(AbstractQueuedSynchronizer)实现的。所以可以把AQS看成这…

Iterator 与 ListIterator:Java 集合框架中的遍历器比较

Iterator 与 ListIterator:Java 集合框架中的遍历器比较 1、Iterator1.1 特点 2、ListIterator2.1 特点 3、Iterator 和 ListIterator 的区别4、示例4.1 使用 Iterator 遍历 Set4.2 使用 ListIterator 遍历 List 并修改 5、总结 💖The Begin&#x1f49…

智慧农业新纪元:解锁新质生产力,加速产业数字化转型

粮食安全乃国家之根本,“浙江作为农业强省、粮食生产重要省份,在维护国家粮食安全大局中肩负着重大使命。浙江粮食产业经济年总产值已突破4800亿元,稳居全国前列,然而,同样面临着规模大而不强、质量效益有待提升、数字…

全网超详细客户端连接Redis

使用官方Redis Insight(不支持中文) 下载地址 https://redis.io/insight/ RedisInsight - The Best Redis GUI 下载信息可随便填写 添加redis 点击链接

艺术与技术的交响曲:CSS绘图的艺术与实践

在前端开发的世界里,CSS(层叠样式表)作为网页布局和样式的基石,其功能早已超越了简单的颜色和间距设置。近年来,随着CSS3的普及,开发者们开始探索CSS在图形绘制方面的潜力,用纯粹的代码创造出令…

Kafka 高并发设计之数据压缩与批量消息处理

《Kafka 高性能架构设计 7 大秘诀》专栏第 6 章。 压缩,是一种用时间换空间的 trade-off 思想,用 CPU 的时间去换磁盘或者网络 I/O 传输量,用较小的 CPU 开销来换取更具性价比的磁盘占用和更少的网络 I/O 传输。 Kafka 是一个高吞吐量、可扩展…

【PostgreSQL】PostgreSQL简史

博主介绍:✌全网粉丝20W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…

【教学类-67-04】20240718毛毛虫ABC排序

背景需求 【教学类-67-01】20240715毛毛虫AB排序-CSDN博客文章浏览阅读747次,点赞17次,收藏8次。【教学类-67-01】20240715毛毛虫AB排序https://blog.csdn.net/reasonsummer/article/details/140443310【教学类-67-02】20240716毛毛虫ABB排序-CSDN博客文…

Atcoder ABC351 A-E 题解

A: 打卡题 题目描述 一中队和二中队正在进行一场棒球比赛&#xff0c;一中队是第一棒。 目前&#xff0c;比赛已进行到第九局上半&#xff0c;第九局下半即将开始。 一中队在 第i局 (1 < i < 9) 上半场得到了 Ai 分&#xff0c;二中队在 第j局 (1 < j < 8) 下…

数据结构之跳表SkipList、ConcurrentSkipListMap

概述 SkipList&#xff0c;跳表&#xff0c;跳跃表&#xff0c;在LevelDB和Lucene中都广为使用。跳表被广泛地运用到各种缓存实现当中&#xff0c;跳跃表使用概率均衡技术而不是使用强制性均衡&#xff0c;因此对于插入和删除结点比传统上的平衡树算法更为简洁高效。 Skip lis…

2-37 基于matlab的IMU姿态解算

基于matlab的IMU姿态解算,姿态类型为四元数&#xff1b;角速度和线加速度的类型为三维向量。IMU全称是惯性导航系统&#xff0c;主要元件有陀螺仪、加速度计和磁力计。其中陀螺仪可以得到各个轴的加速度&#xff0c;而加速度计能得到x&#xff0c;y&#xff0c;z方向的加速度&a…