【因果推断python】32_合成控制2

news2025/1/14 1:04:45

目录

合成控制作为线性回归的一种实现​编辑


合成控制作为线性回归的一种实现

为了估计综合控制的治疗效果,我们将尝试构建一个类似于干预期之前的治疗单元的“假单元”。然后,我们将看到这个“假单位”在干预后的表现。合成控制和它所模仿的单位之间的区别在于治疗效果。

要使用线性回归做到这一点,我们将使用 OLS 找到权重。我们将最小化干预前期间供体池中单位的加权平均值与治疗单位之间的平方距离。

为此,我们需要的第一件事是将单位(在我们的例子中为状态)转换为列,将时间转换为行。由于我们有 2 个功能,cigsale 和 retprice,我们将它们堆叠在一起,就像我们在上图中所做的那样。我们将建立一个在干预前看起来很像加利福尼亚的合成控制,并看看它在干预后的表现如何。出于这个原因,重要的是我们只选择干预前的时期。在这里,这些功能似乎具有相似的规模,因此我们不会对它们做任何事情。如果特征的比例不同,一个是千位,另一个是小数,在最小化差异时,较大的特征将是最重要的。为避免这种情况,首先对它们进行扩展很重要。

features = ["cigsale", "retprice"]

inverted = (cigar.query("~after_treatment") # filter pre-intervention period
            .pivot(index='state', columns="year")[features] # make one column per year and one row per state
            .T) # flip the table to have one column per state

inverted.head()

现在,我们可以将 Y 变量定义为加利福尼亚州,将 X 定义为其他州。

y = inverted[3].values # state of california
X = inverted.drop(columns=3).values  # other states

然后,我们运行回归。 有一个截距相当于添加另一个状态,其中每一行都是 1。你可以这样做,但我认为它更复杂,我就省略了。 回归将返回一组权重,以最小化治疗单位与供体池中单位之间的平方差。

from sklearn.linear_model import LinearRegression
weights_lr = LinearRegression(fit_intercept=False).fit(X, y).coef_
weights_lr.round(3)

array([-0.436, -1.038,  0.679,  0.078,  0.339,  1.213,  0.143,  0.555,
       -0.295,  0.052, -0.529,  1.235, -0.549,  0.437, -0.023, -0.266,
       -0.25 , -0.667, -0.106, -0.145,  0.109,  0.242, -0.328,  0.594,
        0.243, -0.171, -0.02 ,  0.14 , -0.811,  0.362,  0.519, -0.304,
        0.805, -0.318, -1.246,  0.773, -0.055, -0.032])

这些权重向我们展示了如何构建合成控制。 我们将状态 1 的结果乘以 -0.436,状态 2 的结果乘以 -1.038,状态 4 的结果乘以 0.679,依此类推。 我们可以通过池中状态的矩阵和权重之间的点积来实现这一点。

calif_synth_lr = (cigar.query("~california")
                  .pivot(index='year', columns="state")["cigsale"]
                  .values.dot(weights_lr))

现在我们有了合成控制,我们可以用加利福尼亚州的结果变量来绘制它。

plt.figure(figsize=(10,6))
plt.plot(cigar.query("california")["year"], cigar.query("california")["cigsale"], label="California")
plt.plot(cigar.query("california")["year"], calif_synth_lr, label="Synthetic Control")
plt.vlines(x=1988, ymin=40, ymax=140, linestyle=":", lw=2, label="Proposition 99")
plt.ylabel("Gap in per-capita cigarette sales (in packs)")
plt.legend();

好吧……似乎有些不对劲。这张照片中什么吸引了你的注意力?首先,干预后,合成控制的卷烟销量超过了加州。这表明干预措施成功地降低了卷烟需求。其次,注意干预前的时期是如何完美拟合的。合成控制能够与加利福尼亚州完全匹配。这表明我们的综合控制模型可能过度拟合数据。另一个迹象是干预后综合控制结果变量的巨大差异。注意它是如何不遵循平滑模式的。相反,它会上下波动。

如果我们思考为什么会发生这种情况,请记住我们的供体池中有 38 个州。因此,我们的线性回归有 38 个参数可供使用,以使预处理池与处理尽可能接近。在这种情况下,即使 T 很大,N 也很大,这给我们的线性回归模型提供了太多的灵活性。如果您熟悉正则化模型,可以使用 Ridge 或 Lasso 回归来解决此问题。在这里,我们将研究另一种更传统的避免过拟合的方法。

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

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

相关文章

Apollo配置中心最佳实践

携程配置中心地址:GitCode - 全球开发者的开源社区,开源代码托管平台 1.1 Apollo配置中心介绍 Apollo(阿波罗)是开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端…

又一个对标Sora的AI视频工具,Dream Machine,开始免费试用

新的AI视频工具又又来了-Dream Machine,开始免费试用。 地址:https://lumalabs.ai/dream-machine 该工具需要科学上网 先看一下官网的宣传视频 luma AI 发布 Dream Machine 我生成了几个视频,效果还可以 生成视频很简单 只需要输入描述就可…

高等数学笔记(一):映射与函数

一、映射 1.1 映射的概念 存在一个法则 f ,使得对 X 中每个元素 x ,在 Y 中有唯一确定的元素 y 与之对应(X、Y 非空集) 称 f 为从 X 到 Y 的映射,如图所示 其中 y 称为元素 x(在映射 f 下)的…

高交会专题展—2024BTE第8届国际生物技术大会暨展览会

第二十六届中国国际高新技术成果交易会 THE 26th CHINA HI-TECH FAIR BTE第8届国际生物技术大会暨展览会 The 8th International Bio-technology Conference & Expo 2024年11月14-16日 深圳国际会展中心 展位预定:137交易会1016交易会3299 龚经理 组织机构…

企业商家如何精明选择软件开发公司

在当今信息化社会,企业的运营和发展已经离不开软件系统的支持。而选择一个合适的软件开发公司,则成为了企业商家在信息化道路上的一大挑战。那么,究竟如何挑选出既符合业务需求,又能保障项目成功的软件开发公司呢? 明…

【第5章】Vue之API风格

文章目录 前言一、选项式 API(Options API)1. 代码2. 效果 二、组合式 API(Composition API)1. 代码2. 效果 三、两者之间的区别总结 前言 Vue.js 提供了两种主要的 API 风格来组织组件的代码:选项式 API(…

SAP MMRV/MMPV 物料账期月结月底月初开关

公告:周一至周五每日一更,周六日存稿,请您点“关注”和“在看”,后续推送的时候不至于看不到每日更新内容,感谢。 这是一条刮刮乐,按住全部选中:点关注的人最帅最美,欢迎&#xff1…

码农学点儿经济学-博傻理论

博傻理论 一位石油大佬去天堂开会,他兴冲冲地跑进会议室,却发现座无虚席,早已经没了他的座位。于是他灵机一动,大喊一声:大家注意啦!听说,有人在地狱发现了石油!此言一出&#xff0c…

(财务应用程序:计算利息)

(财务应用程序:计算利息)如果知道收支余额和年利率的百分比,就可以使用下面的 公式计算: 编写程序,读取收支余额和年百分利率,显示下月利息。下面是一个运行示例: package myjava; import java.math.*; import java.util.Scanner;…

10.4 Go 并发模式

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

使用Arthas查看方法的参数信息情况

使用Arthas查看方法的参数信息情况 前言 最近在排查一个bug,需要看看一个接口方法的传参,但是方法里并没有打印传参,而且还是生产环境,更新包也麻烦,所以,准备安装一下Arthas,通过Arthas可以做…

iText7——画发票PDF(完整)

显示描述&#xff1a; 1、每页显示必须带有发票头、“销售方和购买方信息” 2、明细填充为&#xff1a;当n≤8 行时&#xff0c;发票总高度140mm&#xff0c;每条发票明细行款高度4.375mm&#xff1b; 当8<n≤12行时&#xff0c;发票高度增加17.5mm&#xff0c;不换页&#…

Flink任务如何跑起来之 2.算子 StreamOperator

Flink任务如何跑起来之 2.算子 StreamOperator 前文介绍了Transformation创建过程&#xff0c;大多数情况下通过UDF完成DataStream转换中&#xff0c;生成的Transformation实例中&#xff0c;核心逻辑是封装了SimpleOperatorFactory实例。 UDF场景下&#xff0c;DataStream到…

python怎么显示行号

我们如果想让Python IDLE显示行号&#xff0c;我们可以通过扩展IDLE功能来做到。 1.我们需要下载一个LineNumber.py扩展。 2.我们打开Python安装目录&#xff0c;找到安装目录下的Lib\idlelib目录&#xff0c;复制LineNumber到这个目录。 3.然后启动扩展。 4.配置扩展的方式…

CCF 矩阵重塑

第一题&#xff1a;矩阵重塑&#xff08;一&#xff09; 本题有两种思路 第一种 &#xff08;不确定是否正确 但是100分&#xff09; #include<iostream> using namespace std; int main(){int n,m,p,q,i,j;cin>>n>>m>>p>>q;int a[n][m];for(i…

英语学习笔记34——What are they doing?

What are they doing? 他们在做什么&#xff1f; 词汇 Vocabulary sleep v. 睡觉 ing形式&#xff1a;sleeping 例句&#xff1a;那个男孩正在睡觉。    That boy is sleeping. 相关&#xff1a;sleepy 困的 例句&#xff1a;我太困了。    I’m so sleepy. shave v.…

实时数据的处理一致性如何保证?

实时数据一致性的定义以及面临的挑战 数据一致性通常指的是数据在整个系统或多个系统中保持准确、可靠和同步的状态。在实时数据处理中&#xff0c;一致性包括但不限于数据的准确性、完整性、时效性和顺序性。 下图是典型的实时/流式数据处理的流程&#xff1a; 流式数据以各…

技术速递|Java on Azure Tooling 5月更新 - Java 对 Azure 容器应用程序的入门指南支持

作者&#xff1a;Jialuo Gan 排版&#xff1a;Alan Wang 大家好&#xff0c;欢迎阅读 Java on Azure 工具 5 月份更新。在本次更新中&#xff0c;我们将介绍 Java 在 Azure 上的容器应用程序的入门指南。希望您喜欢这些更新&#xff0c;并享受使用 Azure 工具包的流畅体验。请下…

鸿蒙轻内核A核源码分析系列七 进程管理 (3)

本文记录下进程相关的初始化函数&#xff0c;如OsSystemProcessCreate、OsProcessInit、OsProcessCreateInit、OsUserInitProcess、OsDeInitPCB、OsUserInitProcessStart等。 1、LiteOS-A内核进程创建初始化通用函数 先看看一些内部函数&#xff0c;不管是初始化用户态进程还…