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

【Python实战因果推断】31_双重差分2

目录

Canonical Difference-in-Differences

Diff-in-Diff with Outcome Growth


Canonical Difference-in-Differences

差分法的基本思想是,通过使用受治疗单位的基线,但应用对照单位的结果(增长)演变,来估算缺失的潜在结果 E[Y(0)|D=1,Post=1]

\begin{aligned}E[Y(0)|D=1,Post=1]&=E[Y|D=1,Post=0]\\&+(E[Y|D=0,Post=1]-E[Y|D=0,Post=0])\end{aligned}

其中,用样本平均数代替右侧期望值,就可以估计出 E[Y(0)|D=1,Post=1]。之所以称其为 "差异-差分(DID)估计法",是因为如果将前述表达式替换为 ATT 中的 E[Y(0)|D=1,Post=1],就会得到 "差异中的差异":

\begin{aligned}ATT&=(E[Y|D=1,Post=1]-E[Y|D=1,Post=0])\\&-(E[Y|D=0,Post=1]-E[Y|D=0,Post=0])\end{aligned}

不要被这些期望吓倒。以其典型形式,您可以很容易地得到 DID 估计值。首先,将数据的时间段分为干预前和干预后。然后,将单位分为治疗组和对照组。最后,您可以简单地计算所有四个单元的平均值:干预前与对照组、干预前与干预组、干预后与对照组、干预后与干预组:

 did_data = (mkt_data.groupby(["treated", "post"]).agg({"downloads":"mean", "date": "min"}))did_data

这些就是获得 DID 估计值所需的全部数据。对于干预基线 E[Y|D=1,Post=0],您可以使用 did_data.loc[1] 将其索引到干预中,然后使用 follow up .loc[0] 将其索引到干预前。要得到对照组结果的变化,即 E[Y|D=0,Post=1]-E[Y|D=0,Post=0] ,可以用 did_data.loc[0] 索引到对照组,用 .diff() 计算差值,然后用后续 .loc[1] 索引到最后一行。将对照组趋势与治疗基线相加,就得到了反事实 E[ Y(0) |D=1,Post=1 ] 的估计值。要得到 ATT,可以用干预后期间受治疗者的平均结果减去 ATT:

 y0_est = (did_data.loc[1].loc[0, "downloads"] # treated baseline# control evolution+ did_data.loc[0].diff().loc[1, "downloads"])att = did_data.loc[1].loc[1, "downloads"] - y0_estatt0.6917359536407233

如果将这个数字与真实 ATT(过滤干预单位和干预后时期)进行比较,可以发现 DID 估计值与其试图估计的结果相当接近:

 mkt_data.query("post==1").query("treated==1")["tau"].mean()0.7660316402518457

Diff-in-Diff with Outcome Growth

对 DID 的另一个非常有趣的理解是,它是在时间维度上对数据进行区分。让我们把单位 i 在不同时间的结果差异定义为 \Delta y_{i}=E\Big[y_{i}\Big|t>T_{pre}\Big]-E\Big[y_{i}\Big|t\leq T_{pre}\Big] 。现在,让我们把按时间和单位划分的原始数据转换成一个带有 Δyi 的数据框架,其中时间维度已被区分出来:

 pre = mkt_data.query("post==0").groupby("city")["downloads"].mean()post = mkt_data.query("post==1").groupby("city")["downloads"].mean()delta_y = ((post - pre).rename("delta_y").to_frame()# add the treatment dummy.join(mkt_data.groupby("city")["treated"].max()))delta_y.tail()

接下来,您可以使用潜在的结果符号来根据Δy来定义ATT ATT=E[\Delta y_1-\Delta y_0],

DID试图通过用控制单元的平均值替换Δy0来识别哪个控制单元:ATT=E[\Delta y|D=1]-E[\Delta y|D=0]​​​​​​​

如果你用样本平均值来代替这些期望,你会看到你得到了和之前相同的估计:

 (delta_y.query("treated==1")["delta_y"].mean()- delta_y.query("treated==0")["delta_y"].mean())0.6917359536407155

这是对 DID 的一个有趣的解释,因为它非常清楚地说明了它的假设,即 E[\Delta y_{0}]=E[\Delta y|D=0],但我们稍后会进一步讨论这个问题。

由于这些都是非常专业的数学知识,我想通过绘制治疗组和对照组随时间变化的观察结果,以及治疗组的估计反事实结果,让大家对 DID 有更直观的理解。在下图中,E[Y(0)|D=1] 的 DID 估计结果以虚线表示。它是通过将对照组的轨迹应用到干预基线中得到的。因此,估计的 ATT 将是估计的反事实结果 Y(0) 与观察到的结果 Y(1) 之间的差值,两者均处于干预后时期(圆点与十字之间的差值):

相关文章:

【Python实战因果推断】31_双重差分2

目录 Canonical Difference-in-Differences Diff-in-Diff with Outcome Growth Canonical Difference-in-Differences 差分法的基本思想是,通过使用受治疗单位的基线,但应用对照单位的结果(增长)演变,来估算缺失的潜…...

ArcGIS中使用线快速构造成面的方法

准备工作:一个需要转化为面的封闭线;一个处于可编辑状态的面要素文件。 1.选中一个围合封闭成的线 2.点击高级编辑工具中的构造面小工具 3.弹出对话框,直接点确定即可 4.效果如下图: 特别注意:记得要把面图层编辑功能…...

Spring AOP的几种实现方式

1.通过注解实现 1.1导入依赖 <dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>5.1.6.RELEASE</version></dependency> 1.2定义注解 import java.lang.annotation.*;Targ…...

字节码编程bytebuddy之实现抽象类并并添加自定义注解

写在前面 本文看下使用bytebuddy如何实现抽象类&#xff0c;并在子类中添加自定义注解。 1&#xff1a;代码 1.1&#xff1a;准备基础代码 类和方法注解 package com.dahuyou.bytebuddy.cc.mine;import java.lang.annotation.ElementType; import java.lang.annotation.Re…...

LLM-阿里云 DashVector + ModelScope 多模态向量化实时文本搜图实战总结

文章目录 前言步骤图片数据Embedding入库文本检索 完整代码 前言 本文使用阿里云的向量检索服务&#xff08;DashVector&#xff09;&#xff0c;结合 ONE-PEACE多模态模型&#xff0c;构建实时的“文本搜图片”的多模态检索能力。整体流程如下&#xff1a; 多模态数据Embedd…...

CentOS7安装部署git和gitlab

安装Git 在Linux系统中是需要编译源码的&#xff0c;首先下载所需要的依赖&#xff1a; yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker方法一 下载&#xff1a; wget https://mirrors.edge.kernel.org/pub/s…...

《昇思25天学习打卡营第16天|基于MindNLP+MusicGen生成自己的个性化音乐》

MindNLP 原理 MindNLP 是一个自然语言处理&#xff08;NLP&#xff09;框架&#xff0c;用于处理和分析文本数据。 文本预处理&#xff1a;包括去除噪声、分词、词性标注、命名实体识别等步骤&#xff0c;使文本数据格式化并准备好进行进一步分析。 特征提取&#xff1a;将文…...

算法学习day10(贪心算法)

贪心算法&#xff1a;由局部最优->全局最优 贪心算法一般分为如下四步&#xff1a; 将问题分解为若干个子问题找出适合的贪心策略求解每一个子问题的最优解将局部最优解堆叠成全局最优解 一、摆动序列&#xff08;理解难&#xff09; 连续数字之间的差有正负的交替&…...

卡尔曼滤波Kalman Filter零基础入门到实践(上部)

参考视频&#xff1a;入门&#xff08;秒懂滤波概要&#xff09;_哔哩哔哩_bilibili 一、入门 1.引入 假设超声波距离传感器每1ms给单片机发数据。 理论数据为黑点&#xff0c; 测量数据曲线为红线&#xff0c;引入滤波后的数据为紫线 引入滤波的作用是过滤数据中的噪声&a…...

力扣-dfs

何为深度优先搜索算法&#xff1f; 深度优先搜索算法&#xff0c;即DFS。就是找一个点&#xff0c;往下搜索&#xff0c;搜索到尽头再折回&#xff0c;走下一个路口。 695.岛屿的最大面积 695. 岛屿的最大面积 题目 给你一个大小为 m x n 的二进制矩阵 grid 。 岛屿 是由一些相…...

keepalived高可用集群

一、keepalived&#xff1a; 1.keepalive是lvs集群中的高可用架构&#xff0c;只是针对调度器的高可用&#xff0c;基于vrrp来实现调度器的主和备&#xff0c;也就是高可用的HA架构&#xff1b;设置一台主调度器和一台备调度器&#xff0c;在主调度器正常工作的时候&#xff0…...

文献翻译与阅读《Integration Approaches for Heterogeneous Big Data: A Survey》

CYBERNETICS AND INFORMATION TECHNOLOGIES’24 论文原文下载地址&#xff1a;原文下载 目录 1 引言 2 大数据概述 3 大数据的异构性 4 讨论整合方法 4.1 大数据仓库&#xff08;BDW&#xff09; 4.2 大数据联盟&#xff08;BDF&#xff09; 5 DW 和 DF 方法的比较、分…...

应用最优化方法及MATLAB实现——第3章代码实现

一、概述 在阅读最优方法及MATLAB实现后&#xff0c;想着将书中提供的代码自己手敲一遍&#xff0c;来提高自己对书中内容理解程度&#xff0c;巩固一下。 这部分内容主要针对第3章的内容&#xff0c;将其所有代码实现均手敲一遍&#xff0c;中间部分代码自己根据其公式有些许的…...

django的增删改查,排序,分组等常用的ORM操作

Django 的 ORM&#xff08;对象关系映射&#xff09;提供了一种方便的方式来与数据库进行交互。 1. Django模型 在 myapp/models.py 中定义一个示例模型&#xff1a;python from django.db import modelsclass Person(models.Model):name models.CharField(max_length100)age…...

Leetcode Java学习记录——树、二叉树、二叉搜索树

文章目录 树的定义树的遍历中序遍历代码 二叉搜索树 常见二维数据结构&#xff1a;树/图 树和图的区别就在于有没有环。 树的定义 public class TreeNode{public int val;public TreeNode left,right;public TreeNode(int val){this.val val;this.left null;this.right nu…...

华为HCIP Datacom H12-821 卷30

1.单选题 以下关于OSPF协议报文说法错误的是? A、OSPF报文采用UDP报文封装并且端口号是89 B、OSPF所有报文的头部格式相同 C、OSPF协议使用五种报文完成路由信息的传递 D、OSPF所有报文头部都携带了Router-ID字段 正确答案:A 解析: OSPF用IP报文直接封装协议报文,…...

element el-table实现表格动态增加/删除/编辑表格行,带校验规则

本篇文章记录el-table增加一行可编辑的数据列&#xff0c;进行增删改。 1.增加空白行 直接在页面mounted时对form里面的table列表增加一行数据&#xff0c;直接使用push() 方法增加一列数据这个时候也可以设置一些默认值。比如案例里面的 产品件数 。 mounted() {this.$nextTi…...

QT调节屏幕亮度

1、目标 利用QT实现调节屏幕亮度功能&#xff1a;在无屏幕无触控时&#xff0c;将屏幕亮度调低&#xff0c;若有触控则调到最亮。 2、调节亮度命令 目标装置使用嵌入式Linux系统&#xff0c;调节屏幕亮度的指令为&#xff1a; echo x > /sys/class/backlight/backlight/…...

实变函数精解【3】

文章目录 点集求导集 闭集参考文献 点集 求导集 例1 E { 1 / n 1 / m : n , m ∈ N } 1. lim ⁡ n → ∞ ( 1 / n 1 / m ) 1 / m 2. lim ⁡ n , m → ∞ ( 1 / n 1 / m ) 0 3. E ′ { 0 , 1 , 1 / 2 , 1 / 3 , . . . . } E\{1/n1/m:n,m \in N\} \\1.\lim_{n \rightar…...

JVM:SpringBoot TomcatEmbeddedWebappClassLoader

文章目录 一、介绍二、SpringBoot中TomcatEmbeddedWebappClassLoader与LaunchedURLClassLoader的关系 一、介绍 TomcatEmbeddedWebappClassLoader 是 Spring Boot 在其内嵌 Tomcat 容器中使用的一个类加载器&#xff08;ClassLoader&#xff09;。在 Spring Boot 应用中&#…...

告别重复造轮子,用快马ai一键生成rabbitmq多模式高效代码模板

最近在项目中频繁使用RabbitMQ处理消息队列&#xff0c;发现手动编写各种模式的代码既耗时又容易出错。特别是当业务需要切换不同消息模式时&#xff0c;往往要重新查阅文档、调试参数。经过一番摸索&#xff0c;我总结出一套高效使用RabbitMQ的方法&#xff0c;并借助InsCode(…...

Zynq Linux FPGA Manager实战:5分钟搞定PL配置(含bit转bin避坑指南)

Zynq Linux FPGA Manager实战&#xff1a;5分钟搞定PL配置&#xff08;含bit转bin避坑指南&#xff09; 第一次在Zynq开发板上尝试配置PL逻辑时&#xff0c;我盯着Vivado生成的.bit文件发愁——官方文档里提到的PCAP、ICAP协议像天书一样&#xff0c;而网上各种教程要么步骤不全…...

11111111111111111111111

11111111111111111111111111111111...

实战指南:基于快马平台与yolov11快速开发货架商品检测系统

今天想和大家分享一个最近用yolov11实现的零售商品检测项目&#xff0c;整个过程在InsCode(快马)平台上完成得特别顺利。这个系统可以自动识别超市货架上的商品&#xff0c;特别适合库存管理或者智能结算场景。 项目背景与需求分析 超市货架商品识别看似简单&#xff0c;实际会…...

Windows 10下SQLMap安装配置全攻略(附Python环境搭建)

Windows 10下SQLMap实战指南&#xff1a;从Python环境搭建到高级配置 在渗透测试和安全研究领域&#xff0c;SQLMap无疑是数据库安全检测的瑞士军刀。这款开源工具能够自动检测和利用SQL注入漏洞&#xff0c;支持几乎所有主流数据库系统。但对于Windows用户&#xff0c;特别是刚…...

Halcon拼图算子tile_images_offset实战:从图像裁切到精准拼接

1. 认识tile_images_offset算子 第一次接触Halcon的tile_images_offset算子时&#xff0c;我正面临一个棘手的工业检测项目。客户需要将多个摄像头拍摄的电路板局部图像拼接成完整视图&#xff0c;传统手动拼接方式效率低下且误差大。这个算子就像及时雨&#xff0c;完美解决了…...

教育培训品牌视觉体系全攻略:5步打造统一、专业、让人过目不忘的品牌形象

教育培训机构的品牌视觉是否混乱&#xff0c;直接影响家长和学员的第一印象。宣传海报用一种蓝&#xff0c;公众号封面又是另一种蓝&#xff0c;课程介绍册的字体也和官网不一样。这种视觉不统一的问题&#xff0c;会让品牌显得不够专业&#xff0c;降低信任感。今天分享一套用…...

揭秘AI教材写作:低查重率,用AI轻松搞定教材编写难题!

编写教材需要丰富的资料作为基础&#xff0c;但传统的资料整理方式早已无法满足当前的需求。过去&#xff0c;课标文件、学术论文和教学案例等信息零散地散落在多个平台上&#xff0c;比如知网和教研网站&#xff0c;这让我们花费数天才筛选到有用的内容。而即使所有资料都收集…...

ROS 2 手眼标定完整方案

我给你整理ROS 2 中最稳定、最常用、工业级可用的手眼眼标定包&#xff0c;包含安装、使用、命令、区别&#xff0c;直接照着用就行。 一、ROS 2 首选手眼标定包&#xff1a;easy_handeye2 github 地址&#xff1a;https://github.com/IFL-CAMP/easy_handeye2 这是 easy_hand…...

为什么你的Ubuntu实时内核编译失败了?PREEMPT_RT补丁的5个关键配置解析

为什么你的Ubuntu实时内核编译失败了&#xff1f;PREEMPT_RT补丁的5个关键配置解析 在工业自动化、机器人控制和金融交易等对延迟敏感的领域&#xff0c;毫秒级的响应差异可能直接影响系统可靠性。许多开发者选择Ubuntu搭配PREEMPT_RT补丁构建实时系统&#xff0c;却在编译阶段…...