【因果推断python】31_合成控制1

news2025/1/11 12:58:42

目录

一个了解无从知晓事情的超酷数学技巧

我们有时间


一个了解无从知晓事情的超酷数学技巧

当我们审视双重差分法时,我们有来自 2 个不同城市的多个客户的数据:阿雷格里港和弗洛里亚诺波利斯。数据跨越 2 个不同的时间段:在阿雷格里港进行营销干预以增加客户存款之前和之后。为了估计干预效果,我们进行了回归,得到了差异估计量及其标准误差。

对于那种情况,我们有很多样本,因为数据是细颗粒度的。但是,如果我们所拥有的只是城市层面的汇总数据呢?例如,假设我们所拥有的只是干预前后两个城市的平均存款水平。

我们仍然可以计算 Diff-in-Diff 估计量

(E[Y(1)|D=1]-E[Y(1)|D=0])-(E[Y(0)|D=1]-E[Y(0)|D=0])=(87.06-206.16)-(46.01-171.64)=6.53

但是请注意,这里的样本量是 4,这也是我们 Diff-in-Diff 模型中的参数数量。在这种情况下,标准误差没有有效地定义,那么我们应该怎么做呢?另一个问题是弗洛里亚诺波利斯可能不像我们希望的那样与阿雷格里港相似。例如,弗洛里亚诺波利斯以其美丽的海滩和随和的人而闻名,而阿雷格里港则以其烧烤和草原而闻名。这里的问题是您永远无法确定您是否使用了适当的对照组。

为了解决这个问题,我们将使用合成控制法,该方法被称为[“过去几年政策评估文献中最重要的创新”](https://www.aeaweb.org/articles?id=10.1257 /jep.31.2.3)。它基于一个简单但强大的想法。我们不需要在未处理中样本找到任何与处理非常相似的单个单元。相反,我们可以将自己的组合打造为多个未经处理的单元的组合,从而创建有效的合成控制。合成控制是极其有效和直观的方法,甚至有一篇文章发表在 [华盛顿邮报](https://www.washingtonpost.com/news/wonk/wp/2015/10/ 30/如何在竞争性声明的世界中衡量事物/),而不是科学期刊上。

import warnings
warnings.filterwarnings('ignore')

import pandas as pd
import numpy as np
from matplotlib import style
from matplotlib import pyplot as plt
import seaborn as sns
import statsmodels.formula.api as smf

%matplotlib inline

pd.set_option("display.max_columns", 6)
style.use("fivethirtyeight")

要查看它的实际应用,可以考虑估计卷烟税对其消费的影响的问题。为了提供一些背景信息,这是一个在经济学中已经争论了很长时间的问题。论点的一方面说税收将增加雪茄的成本,从而降低其需求。另一方认为,由于香烟会导致成瘾,因此价格的变化不会对他们的需求产生太大影响。在经济方面,我们会说卷烟的需求对价格没有弹性,增加税收只是以吸烟者为代价增加政府收入的一种方式。为了解决问题,我们将查看有关此事的一些美国数据。

1988 年,加利福尼亚州通过了著名的烟草税和健康保护法案,该法案被称为 Proposition 99。 “它的主要作用是对加利福尼亚州内销售的烟草卷烟征收每包 25 美分的州消费税,对雪茄和嚼烟等其他商业烟草产品的零售征收大致相当的消费税。对烟草销售的限制包括禁止在青少年可以进入的公共场所使用香烟自动售货机,以及禁止个人销售单支香烟。该法案产生的收入被指定用于各种环境和保健计划,以及反烟草烟草广告。”

为了评估其效果,我们可以收集来自多个州和多年的卷烟销售数据。在我们的例子中,我们从 39 个州获得了 1970 年到 2000 年的数据。其他州也有类似的烟草控制计划,因此被排除在分析之外。这是我们的数据的样子。

cigar = (pd.read_csv("data/smoking.csv")
         .drop(columns=["lnincome","beer", "age15to24"]))

cigar.query("california").head()

我们将state作为州指数,其中加利福尼亚是第 3 位。我们的协变量是retprice(卷烟零售价)和cigsale(每包卷烟的人均销售额)。 我们感兴趣的结果变量是cigsale。 最后,我们有布尔辅助变量来表示加利福尼亚州和干预后时期。 如果我们绘制加州和其他州的卷烟销售量,这就是我们会得到的。

ax = plt.subplot(1, 1, 1)

(cigar
 .assign(california = np.where(cigar["california"], "California", "Other States"))
 .groupby(["year", "california"])
 ["cigsale"]
 .mean()
 .reset_index()
 .pivot("year", "california", "cigsale")
 .plot(ax=ax, figsize=(10,5)))

plt.vlines(x=1988, ymin=40, ymax=140, linestyle=":", lw=2, label="Proposition 99")
plt.ylabel("Cigarette Sales Trend")
plt.title("Gap in per-capita cigarette sales (in packs)")
plt.legend();  

在我们有对应数据的这段时间里,加利福尼亚人的香烟购买量显然低于全国平均水平。此外,80 年代后卷烟消费似乎呈下降趋势。与其他州相比,在 99 号提案之后,加利福尼亚州的下降趋势似乎加速了,但我们不能肯定地说。这只是我们通过审阅绘出的图形得出的猜测。

为了回答 99 号提案是否对卷烟消费产生影响的问题,我们将使用干预前的时期来建立一个综合控制。我们将结合其他州来建立一个与加州趋势非常相似的假州。然后,我们将看到这种合成控制在干预后的表现。

我们有时间

为了使过程更正式一点,假设我们有 \text{J+1} 单位。不失一般性,假设单元 1 是受干预影响的单元。单位 j=2,\ldots,J+1 是未经处理的单位的集合,我们将其称为“供体池”。还假设我们拥有的数据跨越 T 个时间段,在干预之前有 T_{0} 个时间段。对于每个单元 j 和每个时间 t,我们观察结果 Y_{jt}。对于每个单元 j 和周期 t,将 Y_{jt}^N  定义为没有干预的潜在结果,将 Y_{jt}^I 定义为有干预的潜在结果。然后,对于处理单元 j=1 在时间 t 的影响,对于 t>T_0 定义为

\tau_{1t}=Y_{jt}^I-Y_{jt}^N

由于单位 j=1是经过处理的单位,因此 Y_{jt}^I 是事实,但 Y_{jt}^N 不是。那么挑战就变成了我们如何估计 Y_{jt}^N。请注意如何为每个时期定义治疗效果,这意味着它可以随时间变化。它不需要是瞬时的。它可以累积或消散。概括地说,估计处理效果的问题归结为估计如果不进行处理,单元 j=1 的结果会发生什么的问题

为了估计 {Y}^N_{jt},我们记住,供体池中的单位组合可能比单独的任何未处理单位更好地近似处理单位的特征。因此,综合控制被定义为控制池中单元的加权平均值。给定权重 \boldsymbol{W}=(w_2,\ldots,w_{J+1}){Y}^N_{jt} 的综合控制估计为

\hat{Y}^N_{jt} = \sum^{J+1}{j=2} w_j Y{jt}

如果所有这些数学运算让您头疼,那么您并不孤单。但别担心,我们有很多例子可以让它更直观。这一次,我喜欢将综合控制视为一种颠倒的回归方式。众所周知,线性回归也是一种将预测作为变量加权平均值的方法。现在,考虑一下那些回归,例如 diff-in-diff 示例中的回归,其中每个变量在一段时间内都是虚拟变量。在这种情况下,回归可以表示为以下矩阵乘法

在综合控制案例中,我们没有很多样本,但我们确实有很多时间段。所以我们要做的是翻转输入矩阵。然后,样本成为“变量”,我们将结果表示为样本的加权平均值,就像下面的矩阵乘法一样。

如果我们每个时间段有多个特征,我们可以像这样堆积特征。重要的是要做到这一点,以便回归试图通过使用其他单元来“预测”处理过的单元 1。这样,我们可以以某种最佳方式选择权重来实现我们想要的这种接近度。我们甚至可以对特征进行不同的缩放,以赋予它们不同的重要性。

那么,如果综合控制可以看作是一个线性回归,那也意味着我们可以用 OLS 来估计它的权重,对吧?对!事实上,让我们现在就这样做。

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

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

相关文章

smart_rtmpd 的后台管理

高效的流媒体服务器 smart_rtmpd,您值得拥有 smart_rtmpd 的下载地址 https://github.com/superconvert/smart_rtmpd smart_rtmpd 的管理后台 https://github.com/superconvert/smart_rtmpd/edit/master/web%20manager/src/README.md web 管理后台说明 web 管理…

如何开发一个直播APP:功能介绍与开发步骤详解

随着移动互联网的迅猛发展,直播APP已经成为人们生活中不可或缺的一部分。无论是娱乐、教育、商业还是其他领域,直播APP都以其独特的实时互动性和广泛的受众群体而备受欢迎。那么,如何开发一个直播APP呢?本文将详细介绍直播APP的功…

视频监控汇聚平台:接入不同品牌的监控视频,同时把所有的监控视频接到不同的上级视频监控平台(第三方平台)

目录 一、需求描述 (一)总体描述 (二)前端接入 (三)向上级联 二、需求分析 (一)接入所有不同品牌、不同型号的监控视频 1、确认各品牌摄像头的接口类型和协议 2、选择合适的…

【Linux】易错点——/etc/passwd ; /etc/shadow;ifconfig;route;chmod;ps;mv

/etc/passwd ; /etc/shadow /etc/passwd: 用户账户的详细信息在此文件中更新。 用户名:密码:用户 ID:群组 ID:用户 ID 信息:用户的家目录: Shell /etc/shadow: 用户账户密码在此文…

VRRP跟踪接口及认证(华为)

#交换设备 VRRP跟踪接口及认证 一、相关概念 1.VRRP跟踪接口 当 VRRP 的 Master 设备的上行接口出现问题, 而 Master 设备一直保持 Active 状态,那么就会导致网络出现中断,所以必须要使得 VRRP 的运行状态和上行接口能够关联。在配置了 VRRP 元余的网…

Web应用安全测试-爆破猜解

Web应用安全测试-爆破猜解 邮件内容中请求链接可预测 漏洞描述:邮件中的重置密码等链接可预测,导致链接可以直接被猜解访问。 测试方法: 先按照正常流程重置密码,接收重置密码邮件,分析重置链接的构造。通常情况下…

Pygame常用模块

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 Pygame做游戏开发的优势在于不需要过多考虑与底层开发相关的内容,而可以把工作重心放在游戏逻辑上。例如,Pygame中集成了很多…

抖某音号解封释放实名

##抖音账号封禁后如何解封呢 我相信,做过抖音,或者正在做抖音的朋友,都曾面临一种尴尬至极的局面,辛辛苦苦做起来的账号,或者刚刚准备好的账号,在一时之间,竟然被抖音官方封禁了! 实…

继承深度剖析

前言 从继承开始就开始C进阶了, 这一块需要好好学习,这块知识很重要, 坑有点多,所以是面试笔试的常客。 基本概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段, 它允许程序员在保持原有…

【C语言】12.指针与数组的关系

一、数组名的理解 #include <stdio.h> int main() {int arr[10] { 1,2,3,4,5,6,7,8,9,10 };printf("&arr[0] %p\n", &arr[0]);printf("arr %p\n", arr);return 0; }通过上述代码输出结果我们发现结果相同&#xff0c;因此我们得出结论&a…

矩阵的掩膜操作

掩膜 矩阵上的掩码操作其实很简单&#xff0c;其思路是我们根据掩膜矩阵&#xff08;即内核&#xff09;重新计算图像中每个像素的值&#xff0c;此掩码保存的值将调整相邻像素(和当前像素)对新像素值的影响程度。从数学的角度来看&#xff0c;我们用我们指定的值做一个加权平…

最流行的后端框架:如何选择适合自己的框架

最流行的后端框架&#xff1a;如何选择适合自己的框架 在当今快节奏的数字环境中&#xff0c;软件开发需要高效、可扩展且可靠的解决方案。最流行的后端框架&#xff0c;这就是后端框架的用武之地。这些软件框架提供了构建 Web 应用程序的骨干&#xff0c;处理了从数据库交互到…

关于FPGA对 DDR4 (MT40A256M16)的读写控制 I

关于FPGA对 DDR4 &#xff08;MT40A256M16&#xff09;的读写控制 I 语言 &#xff1a;Verilg HDL EDA工具&#xff1a;ISE、Vivado 关于FPGA对 DDR4 &#xff08;MT40A256M16&#xff09;的读写控制 I一、引言二、DDR4的特性&#xff08;MT40A256M16&#xff09;&#xff08;1…

vue-echarts与echarts图标拐点点击及其图表任意点击方法

要求&#xff1a;两个图表分别点击获取X轴时间点 一、vue-echarts&#xff1a;点击事件&#xff08;拐点点击 图表任意点击&#xff09; 效果图&#xff1a; 图一&#xff1a; 图二&#xff1a; <v-chart autoresize ref"oneMyChart" class"chart"…

破布叶(Microcos paniculata)单倍型染色体级别基因组-文献精读22

Haplotype-resolved chromosomal-level genome assembly of Buzhaye (Microcos paniculata) 破布叶、布渣叶&#xff08;Microcos paniculata&#xff09;单倍型解析染色体级别基因组组装 摘要 布渣叶&#xff08;Microcos paniculata&#xff09;是一种传统上用作民间药物和…

如何用PlayCanvas打造一个令人惊叹的3D模型在线展示

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 使用 PlayCanvas 渲染 3D 模型 应用场景介绍 PlayCanvas 是一款用于创建交互式 3D 内容的跨平台引擎。它广泛应用于游戏开发、建筑可视化和虚拟现实体验等领域。 代码基本功能介绍 本代码演示了如何使用 Pl…

一文解答 | 代码签名证书怎么选

在当代软件开发中&#xff0c;代码签名证书对于确保软件的完整性、安全性及其可信度至关重要。它通过数字签名验证代码的来源和未被篡改的状态&#xff0c;向最终用户确保软件的可靠性。选择合适的代码签名证书既有利于保护软件开发商的声誉&#xff0c;也有助于建立用户对软件…

鸿蒙轻内核调测-内存调测-内存泄漏检测

1、基础概念 内存泄漏检测机制作为内核的可选功能&#xff0c;用于辅助定位动态内存泄漏问题。开启该功能&#xff0c;动态内存机制会自动记录申请内存时的函数调用关系&#xff08;下文简称LR&#xff09;。如果出现泄漏&#xff0c;就可以利用这些记录的信息&#xff0c;找到…

高温车间降温通风方案

高温车间降温&#xff0c;解决厂房高温闷热必须做到以下两点才能实现&#xff0c;否则即使安装中央空调也没用&#xff1a;一、解决厂房内部热量 通过通排风负压风机、环保空调、工业大风扇等常用排热降温设备&#xff0c;降低室内温度&#xff1b;二、屏蔽外部太阳热源 …

日本2024年最受欢迎的转职行业是IT 通信

2024年有关机构针对超1000名人力资源专业人士进行了“推荐转职行业”的调查。结果显示&#xff0c;日本目前最受欢迎的转职行业是 1、“IT/通信行业”&#xff08;45.9%&#xff09;&#xff0c; 2、其次是“互联网/广告/游戏”&#xff08;31.9%&#xff09;&#xff0c; 3、“…