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

目录

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

我们有时间


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

当我们审视双重差分法时,我们有来自 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 来估计它的权重,对吧?对!事实上,让我们现在就这样做。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于头条项目经验面试题的总结

文章目录 前言一、论坛项目经典话术二、请你介绍一下你最近的项目吧2.1 话术1 三、你的公司的开发环境是怎么搭建的?四、登录你们是怎么做的?4.1 账号密码登录4.2 手机验证码发送4.2.1 手机验证码发送4.2.2 手机验证码登录 五、用户行为限流是怎么做的&a…

oracle 删除当前用户下所有表

荆轲刺秦王 通常呢 我们将正式环境的 oracle 数据库 导出成 dmp 文件,然后导入到测试环境或者本地环境,期间可能会出现各种问题。那么如何使错误的导入数据全部删除呢。可以这样做: 1. 本地虚拟机启动 oracle 服务 2. sqldeveloper 连接 o…

数据桥梁:无缝连接信息孤岛与分析前沿

在数字化浪潮席卷全球的今天,数据已成为推动社会进步和经济发展的重要力量。然而,在实际应用中,我们常常遇到的一个挑战是如何将分散、孤立的数据资源进行有效整合,打破“信息孤岛”,实现数据的无缝连接和高效利用。本…

【智能算法应用】基于粒子群算法的多尺度Retinex图像去雾方法

目录 1.算法原理2.粒子群算法的多尺度Retinex图像去雾方法3.结果展示4.参考文献5.代码获取 1.算法原理 【智能算法】粒子群算法(PSO)原理及实现 多尺度Retinex算法 在Retinex算法中,雾化图像的形成可以总结为入射光和反射光的乘积: I ( x…

开源可二次开发的商城小程序源码系统源码 前后端分离 附带完整的安装包以及搭建部署教程

系统概述 本开源商城小程序源码系统是基于现代Web开发技术栈打造的一套高性能、易扩展的电商解决方案。它采用了前后端分离的设计模式,前端使用Vue.js或React等主流框架构建用户界面,后端则采用Node.js/Express、Spring Boot等技术栈处理业务逻辑与数据…

QT调用vs2019生成的c++动态库

QT调用vs2019生成的c动态库 dll库的创建方法: VS2019创建c动态链接库dll与调用方法-CSDN博客 加减法示范: 头文件 // 下列 ifdef 块是创建使从 DLL 导出更简单的 // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 DLL3_EXPORTS // 符号编…

Linux Debian12使用podman安装xss-labs靶场环境

一、xss-labs简介 xss-labs靶场是一个专门用于学习和练习跨站脚本攻击(XSS)技术的在线平台。它提供了一系列的实验场景和演示,帮助安全研究人员、开发人员和安全爱好者深入了解XSS攻击的原理和防御方法。 二、安装podman环境 Linux Debian…

LVS/NAT负载均衡实操

添加规则,并做持久操作 1 添加规则 [rootlvs ~]# ipvsadm -A -t 10.36.178.183:80 -s wrr [rootlvs ~]# ipvsadm -a -t 10.36.178.183:80 -r 192.168.65.201:80 -m -w 3 [rootlvs ~]# ipvsadm -a -t 10.36.178.183:80 -r 192.168.65.202:80 -m -w 1[rootlvs ~]# ipvsadm -Ln …

第2章 Rust初体验4/8:提供标准库之外功能的Library Crate:简化包管理和依赖管理:猜骰子冷热游戏

讲动人的故事,写懂人的代码 2.4 故事2: 生成点数之和的随机答案 又是新的一天,大家的培训课又开始了哦!现在,我们的学员们开始用三种语言来实现故事2,加油! 2.4.1 Rust版故事2 2.4.1.1 提供标准库之外功能的Library Crate:简化包管理和依赖管理 贾克强:“我们的故事…

【JVM】JVisualVM的介绍、使用和GC过程

VisualVM介绍 VisualVM 是Netbeans的profile子项目,已在JDK6.0 update 7 中自带,能够监控线程,内存情况,查看方法的CPU时间和内存中的对 象,已被GC的对象,反向查看分配的堆栈(如100个String对象分别由哪几…

30 岁的程序员,要有 “归零“ 心态

大家好,我是码农先森。 古话说的 “三十而立”,正是担重之时,却大部分人在职场中都处于不上不下的尴尬境地。已经没有刚毕业时那股子冲劲,被生活和工作磨平了棱角。 在技术思想方面,似乎已经触及到了天花板&#xff…

阻容感的串联和并联

文章目录 电阻的串联电容的串联 电阻的串联 电容的串联 CC1C2/(C1C2) 串联后电容反而变小了,所以实际应用中,电容不串联(我没见过电容串联使用的) 类似于电导的分压, 电容一般是并联使用 电感一般串联使用

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

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

MNIST手写字符分类

MNIST手写字符分类 文章目录 MNIST手写字符分类1 数据集2 模型构建3 训练4 模型保存5 推理6 模型导出7 导出模型测试 1 数据集 MNIST手写字符集包括60000张用于训练的训练集图片和10000张用于测试的测试集图片,所有图片均归一化为28*28的灰度图像。其中字符区域为白…

Vue31-自定义指令:总结

一、自定义函数的陷阱 1-1、自定义函数名 自定义函数名,不能用驼峰式!!! 示例1: 示例2: 1-2、指令回调函数的this 【回顾】: 所有由vue管理的函数,里面的this直接就是vm实例对象。…

小主机折腾记26

双独立显卡调用问题 前两天将tesla p4从x99大板上拆了下来,将880G5twr上的rx480 4g安装到了x99大板上,预计是dg1输出,rx480做3d运算。安装完驱动后,还想着按照之前tesla p4的设置方法去设置rx480,结果果然&#xff0c…

边坡监测规范:确保边坡工程安全稳定的专业准则

边坡工程是土木工程中不可或缺的一部分,其安全性直接关系到工程整体的质量与稳定性。因此,在边坡工程中实施有效的监测措施,遵循一系列专业的监测规范,对于预防边坡失稳、滑坡等灾害的发生,保障人民群众的生命财产安全…

使用 Vue 和 Ant Design 实现抽屉效果的模块折叠功能

功能描述: 有两个模块,点击上面模块的收起按钮时,上面的模块可以折叠,下面的模块随之扩展 代码实现: 我们在 Vue 组件中定义两个模块的布局和状态管理: const scrollTableY ref(560); // 表格初始高度…

ssm161基于web的资源共享平台的共享与开发+jsp

资源共享平台设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本资源共享平台就是在这样的大环境下诞生,其可以帮助管理者在短时间内处…

tkinter滚动条Scrollbar

tkinter滚动条Scrollbar 滚动条Scrollbar滚动条的基本用法效果代码 滚动条Scrollbar 在Tkinter中,**滚动条(Scrollbar)**是一个允许用户在较大的内容区域内平移的组件。**滚动条通常与文本框(Text)、列表框&#xff0…