【Python实战因果推断】28_倾向分8

目录

Treatment Is Easy to Model


Treatment Is Easy to Model

第一个例子中,治疗分配的模型相当容易建立,但干预结果的模型却比较复杂。具体来说,干预遵循伯努利分布,其概率由以下倾向得分给出:

e(x)=\frac1{1+e^{-(1+1.5x)}}

如果您没有意识到,这正是逻辑回归所采用的形式,因此应该很容易对其进行估计。此外,由于P(T|X) 很容易建模,IPW 分数在这里找到真正的 ATE 应该没有问题,因为它接近 2。相比之下,由于结果 Y 比较棘手,回归模型可能会遇到一些麻烦:

 np.random.seed(123)n = 10000x = np.random.beta(1,1, n).round(2)*2e = 1/(1+np.exp(-(1+1.5*x)))t = np.random.binomial(1, e)y1 = 1y0 = 1 - 1*x**3y = t*(y1) + (1-t)*y0 + np.random.normal(0, 1, n)df_easy_t = pd.DataFrame(dict(y=y, x=x, t=t))print("True ATE:", np.mean(y1-y0))True ATE: 2.0056243152

下面两幅图显示了这些数据的情况。值得注意的是数据中的效应异质性,这在第二幅图中很容易看到。请注意,当 x 值较低时,效应为 0,而随着 x 值的增加,效应呈非线性增加。这种异质性往往是回归很难做到的:

现在,让我们看看回归在这个数据中的作用。在这里,我再次分别拟合m1和m0,并将ATE估计为整个数据集中不同预测的平均值,N^{-1}\Sigma\left(\widehat{m}_1(x)-\widehat{m}_0(X)\right)

 m0 = smf.ols("y~x", data=df_easy_t.query("t==0")).fit()m1 = smf.ols("y~x", data=df_easy_t.query("t==1")).fit()regr_ate = (m1.predict(df_easy_t) - m0.predict(df_easy_t)).mean()print("Regression ATE:", regr_ate)Regression ATE: 1.786678396833022

如果将预测值与原始数据进行对比,您就会发现原因所在。回归模型未能捕捉到对照组的曲率:

说白了,这并不意味着无法用回归法正确估计 ATE。如果您知道数据的真实曲率,您几乎可以建立正确的模型:

 m = smf.ols("y~t*(x + np.power(x, 3))", data=df_easy_t).fit()regr_ate = (m.predict(df_easy_t.assign(t=1))- m.predict(df_easy_t.assign(t=0))).mean()print("Regression ATE:", regr_ate)Regression ATE: 1.9970999747190072

当然,在现实中,你并不知道数据是如何产生的。因此,回归结果很可能会让你失望。相比之下,让我们看看 IPW 的表现如何。同样,由于建立干预分配模型相当容易,你应该会期望 IPW 在此数据上表现相当出色:

 est_fn = partial(est_ate_with_ps, ps_formula="x", T="t", Y="y")print("Propensity Score ATE:", est_fn(df_easy_t))print("95% CI", bootstrap(df_easy_t, est_fn))Propensity Score ATE: 2.00235038847401195% CI [1.80802227 2.22565667]

最后,就是您期待已久的时刻,让我们来看看 DR 估计的实际效果。请记住,DR 要求 P T X 或 E YtX 模型中的一个正确,但不一定两个都正确。在这个数据中,P T X 的模型是正确的,但 E Yt X 的模型是错误的:

 est_fn = partial(doubly_robust, formula="x", T="t", Y="y")print("DR ATE:", est_fn(df_easy_t))print("95% CI", bootstrap(df_easy_t, est_fn))DR ATE: 2.00161793426311695% CI [1.87088771 2.145382]

不出所料,DR 在这里的表现相当出色,也恢复了真正的 ATE。但还不止这些。请注意,95% CI 比纯 IPW 估计值要小,这意味着 DR 估计值更精确。这个简单的例子说明,当 P(T|X)很容易建模时,即使 DR 估算出的 E[Y_t|X] 是错误的,它也能表现出色。但反过来呢?

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

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

相关文章

单对以太网:工业4.0时代的通信革命

单对以太网连接器概述 单对以太网(Single Pair Ethernet,简称SPE)是一种新兴的以太网技术,它通过一对双绞线实现数据传输,支持PoDL(Power over Data Line)技术,为终端设备提供电力供…

PTA - 编写函数计算圆面积

题目描述: 1.要求编写函数getCircleArea(r)计算给定半径r的圆面积,函数返回圆的面积。 2.要求编写函数get_rList(n) 输入n个值放入列表并将列表返回 函数接口定义: getCircleArea(r); get_rList(n); 传入的参数r表示圆的半径&#xff0c…

PTA - sdut-使用函数求a+aa+aaa++⋯+aa.....aaa(n个a)之和

题目描述: 给定两个均不超过9的正整数a和n,要求:编写函数fn(a,n), 求aaaaaa⋯aa⋯aa(n个a)之和,fn须返回的是数列之和。 函数接口定义: def fn(a,n):其中, a 和 n 都是传入的参数…

Java项目:基于SSM框架实现的农家乐信息管理平台含前后台【ssm+B/S架构+源码+数据库+答辩PPT+开题报告+毕业论文】

一、项目简介 本项目是一套基于SSM框架实现的农家乐信息管理平台 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美观、操作简单、功…

linux信息收集与提权

目录 版本信息收集 kali得一些exp网站 kali自带的searchsploit工具 脏牛提权漏洞(改写没有写权限的文件) 测试靶场下载链接 sudo提权 上传恶意C脚本进行编译生成dirty的elf文件,也可以在攻击机编译好上传 启动,123456是设…

微信小程序毕业设计-教育培训系统项目开发实战(附源码+论文)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:微信小程序毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计…

低资源低成本评估大型语言模型(LLMs)

随着新的大型语言模型(LLMs)的持续发展,从业者发现自己面临着众多选择,需要从数百个可用选项中选择出最适合其特定需求的模型、提示[40]或超参数。例如,Chatbot Arena基准测试平台积极维护着近100个模型,以…

WPF 初识依赖属性

依赖属性的意义和作用 核心模块内存共享,节省空间数据绑定、样式、模板、动画。。。。如果没有依赖属性,这个框架就是一个控件框架 相当于Winform 依赖属性的基本定义 基本过程:声明、注册、包装 在需要写依赖属性的类中,继承…

Clickhouse的联合索引

Clickhouse 有了单独的键索引,为什么还需要有联合索引呢?了解过mysql的兄弟们应该都知道这个事。 对sql比较熟悉的兄弟们估计看见这个联合索引心里大概有点数了,不过clickhouse的联合索引相比mysql的又有些不一样了,mysql 很遵循最…

谷粒商城 - 编写一个自定义校验注解

目录 开始 未来实现效果 第一步:编写自定义校验注解 第二步:编写自定义校验器 第三步:编写配置文件 效果演示 开始 未来实现效果 编写一个 ListValue 注解,可以实现功能有: 限定字段的值,例如指定只…

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【密钥协商(ArkTS)】

密钥协商(ArkTS) 以协商密钥类型为X25519 256,并密钥仅在HUKS内使用为例,完成密钥协商。 开发步骤 生成密钥 设备A、设备B各自生成一个非对称密钥,具体请参考[密钥生成]或[密钥导入]。 密钥生成时,可指定参数HUKS_TAG_DERIVE…

【BUG】RestTemplate发送Post请求后,响应中编码为gzip而导致的报错

BUG描述 20240613-09:59:59.062|INFO|null|810184|xxx|xxx||8|http-nio-xxx-exec-1|com.xxx.jim.xxx.XXXController.?.?|MSG接收到来自xxx的文件请求 headers:[host:"xxx", accept:"text/html,application/json,application/xhtmlxml,application/xml;q0.9,*…

Redis 实现的延时队列组件

最近看开源看到一个好用的延时队列组件,已经上生产。代码量很少,主要就是利用Redis监听过期键实现的。然后搞点策略模式柔和柔和。利用Spring Start 封装了一下,全是俺掌握的知识,稍微研究了下就搞懂了。觉得挺有用的,…

2024.7.9作业

1、提示并输入一个字符串&#xff0c;统计该字符串中字母、数字、空格以及其他字符的个数 #include <stdio.h> #include <string.h> int main(int argc,const char *argv[]) { char arr[30]{0}; int zm0,kg0,sz0,qt0; printf("请输入字符串&…

utf8mb4和utf8的不同、若依框架,代码生成器,gitee,前端vue的下载、修复和启动(寻求大佬帮助若依框架三、2.3)

2024.7.9 一、数据库的排序和统一问题。utf8mb4和utf8的不同1.1 发现问题1.2 解决问题-在idea中用sql生成器&#xff0c;生成sql语句&#xff0c;然后在里面修改1.3 utf8和utf8mb4的区别 二、若依前后端框架。代码生成器&#xff08;还没研究懂&#xff0c;但有三个方案&#x…

微软清华提出全新预训练范式,指令预训练让8B模型实力暴涨!实力碾压70B模型

现在的大模型训练通常会包括两个阶段&#xff1a; 一是无监督的预训练&#xff0c;即通过因果语言建模预测下一个token生成的概率。该方法无需标注数据&#xff0c;这意味着可以利用大规模的数据学习到语言的通用特征和模式。 二是指令微调&#xff0c;即通过自然语言指令构建…

Python基础-成年人判断(if条件语句联系)

注意输入的年龄需要转化为字符串 代码&#xff1a; print("欢迎来到游乐场&#xff1a;儿童免费&#xff0c;成人收费") age int(input("请输入你的年龄:")) if age>18:print("你已经成年&#xff0c;需要补票10元") # 四个空格缩进print…

使用Mplayer实现MP3功能

核心功能 1. 界面设计 项目首先定义了一个clearscreen函数&#xff0c;用于清空屏幕&#xff0c;为用户界面的更新提供了便利。yemian函数负责显示主菜单界面&#xff0c;提供了包括查看播放列表、播放控制、播放模式选择等在内的9个选项。 2. 文件格式支持 is_supported_f…

gpt-4o看图说话-根据图片回答问题

问题&#xff1a;中国的人口老龄化究竟有多严重&#xff1f; 代码下实现如下&#xff1a;&#xff08;直接调用openai的chat接口&#xff09; import os import base64 import requests def encode_image(image_path): """ 对图片文件进行 Base64 编码 输入…