R语言 grf包-heterogeneous treatment effect_r语言grf包-程序员宅基地

技术标签: r语言  big data  

最近阅读了文章:Using Machine Learning to Target Treatment The Case of Household Energy Use,写下此文,记录文章的主要内容和R语言grf包causal forest方法的简单过程。

一、文章的基本内容和方法

引言

(1)背景

Machine-learning algorithms have traditionally been built for prediction of from y, rather than parameter estimation of treatment effect β.(机器学习方法主要用于预测y值,而不是β值。)即普通的机器学习方法不能用于因果推断。因此,本文希望可以提出一种可以用于因果推断的机器学习方法,即因果森林算法(causal forest algorithm),依托于R语言generalized random forest 包(grf包,广义随机森林模型)。

(2)目的

文章基于美国家庭的90万能源使用数据,识别“节能宣传行为-在家庭能源报告中提供节能信息”是否可以推动家庭节约能源使用,量化政策效果,探究家庭特征对结果的影响。

方法

(1)数据

美国新英格兰最大的电力公司Eversource提供家庭能源报告(Home Energy Report, HER),在报告中,公司会不定期的提供节能的相关信息。研究地区和用能结构如下方左图。结合了三类数据:来自Eversource的家庭月用电量;Eversource政策刺激的时间安排(treatment);以及消费者人口和社会经济特征。

本次研究的数据利用了15波政策刺激数据,覆盖了902581个Eversource住宅客户。观察了2013-2018年的每月家庭用电量以及与家庭及其住户相关的横截面特征。其中,部分月份,该公司会提供如下的信息(下方右图),告诉消费者有效能耗、你的能耗和你邻居的能耗的差别,并提供一些节能方案(被视为政策刺激)。

 15波政策刺激的情况如下:

(2)DID

使用传统的双重差分法(DID)回归,将住户分配到实验组和对照组,来估计HER政策刺激对电力消耗的影响:

kWh-用电量

T-treatment vector,实验组为1,对照组为0

X-家庭的特征变量

θ-wave的固定效应

w-年-月固定效应

还可以估计HER计划的累计影响: 

j-the beginning of treatment in the relevant wave,j∈[-12,37]

D-treatment matrix,实验组为1,对照组为0

(3)Causal forest

为了测试HER计划的异质性影响,并调查家庭特征在预测中的作用,使用了因果森林算法。因果森林算法(Athey等人,2019年)是对随机森林(Breiman,2001年)的一种调整,用于测量因果效应。传统的回归树算法使用相同的数据集来扩展树结构和估计每个节点的average treatment effect(ATE)。然而,Athey和Imbens(2016)表明,这种做法往往夸大了拟合优度,因此他们引入了“honest estimate”,即将全部随机子样本一分为二,一个子集用于生长树结构,另一个子集用于估计ATE。因果随机森林的相关介绍见:使用随机森林进行因果推断 - 知乎

结果和讨论

(1)DID的结果

HER政策Wave-specific ATE的估值范围为每月-1.6至-17.7 kWh,Pooled ATE为每月-8.85 kWh,或-1%。HER政策伴随时间的影响如下图,政策开始前的12个月,没有估计值显著区别于0,政策开始的1-2个月没有显著影响,之后愈发显著,一直到第三年也有增效。

 (2)Causal forest的结果

因为采用了“森林”的计算方法,可以根据各个树的结果得到ATE估值的概率分布函数。其中第一年的效果集中在-10kWh和0,说明一部分奏效,一部分没有影响。第二、三年的政策效果的范围更加广泛,但是出现了18%的用户增加了能源消耗(回力镖效应,因为看到自己比较节能,反而在下一个时段放松了警惕)。不同用户特征对于估值结果的影响,也得到了很好的量化(略)。

下图显示了预计减少消费的家庭与预计增加消费的家庭的平均差异。森林中使用的每一个特征都存在显著差异:“reducers”更有可能拥有自己的住所;他们的房子往往更大、更新、更有价值;而且他们往往有更多的孩子、更高的收入、更年轻、受教育程度更高的户主。最后,那些减少用电量的人的平均基线用电量显著高于其他人,而且这种差异在数量上占主导地位。这一发现验证了Opower针对高消耗用户的寄送HER的策略,并且与基线消耗量较大时有更多节能“空间”的想法一致。

 

二、grf包初探

参考资料:Introduction to grf • grf

如下为一个简单的案例,其中X代表自变量(训练集),Y代表因变量(训练集),W为treatment变量(一般为0/1),X.test为测试集。

library(grf)
n <- 2000
p <- 10
X <- matrix(rnorm(n * p), n, p)
X.test <- matrix(0, 101, p)
X.test[, 1] <- seq(-2, 2, length.out = 101)

W <- rbinom(n, 1, 0.4 + 0.2 * (X[, 1] > 0))
Y <- pmax(X[, 1], 0) * W + X[, 2] + pmin(X[, 3], 0) + rnorm(n)
tau.forest <- causal_forest(X, Y, W)
tau.forest
#> GRF forest object of type causal_forest 
#> Number of trees: 2000 
#> Number of training samples: 2000 
#> Variable importance: 
#>     1     2     3     4     5     6     7     8     9    10 
#> 0.691 0.033 0.041 0.046 0.029 0.029 0.034 0.027 0.033 0.037

使用OOB预测估计训练集的treatment效果:

tau.hat.oob <- predict(tau.forest)
hist(tau.hat.oob$predictions)

  评估测试集的treatment效果:

tau.hat <- predict(tau.forest, X.test)
plot(X.test[, 1], tau.hat$predictions, ylim = range(tau.hat$predictions, 0, 2), xlab = "x", ylab = "tau", type = "l")
lines(X.test[, 1], pmax(0, X.test[, 1]), col = 2, lty = 2)

 估计全样本的conditional average treatment effect (CATE):

average_treatment_effect(tau.forest, target.sample = "all")
#>   estimate    std.err 
#> 0.37345648 0.04978157

估计treatment样本的conditional average treatment effect (CATT):

average_treatment_effect(tau.forest, target.sample = "treated")
#>   estimate    std.err 
#> 0.47136673 0.05136118

增加置信区间:

tau.forest <- causal_forest(X, Y, W, num.trees = 4000)
tau.hat <- predict(tau.forest, X.test, estimate.variance = TRUE)
sigma.hat <- sqrt(tau.hat$variance.estimates)
plot(X.test[, 1], tau.hat$predictions, ylim = range(tau.hat$predictions + 1.96 * sigma.hat, tau.hat$predictions - 1.96 * sigma.hat, 0, 2), xlab = "x", ylab = "tau", type = "l")
lines(X.test[, 1], tau.hat$predictions + 1.96 * sigma.hat, col = 1, lty = 2)
lines(X.test[, 1], tau.hat$predictions - 1.96 * sigma.hat, col = 1, lty = 2)
lines(X.test[, 1], pmax(0, X.test[, 1]), col = 2, lty = 1)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_60169218/article/details/120719251

智能推荐

axis idea 设置apache_Axis2创建WebService实例 --- 接口发布-程序员宅基地

文章浏览阅读751次。最近项目需要使用Axis2方式对外提供接口,项目是maven,在网上费尽心思的找了好久,相关maven axis2 项目搭建的文章都是前篇一律,最重要的是没有一个文章测试成功,不吐槽了,赶紧来一起来看看怎么使用Axis2创建WebService实例开发环境JDK1.8Maven 3.6IDEA准备工作将axis2-1.7.7-war.zip文件解压,解压其中axis2.war,其目录如下image..._apache axis 例子

NLP模型笔记 — 独热编码_nlp中独热编码调用-程序员宅基地

文章浏览阅读608次。NLP模型笔记 — 独热编码 [总结]P.S._nlp中独热编码调用

给Hexo博客添加文章编辑链接_hexo admin添加链接-程序员宅基地

文章浏览阅读843次,点赞25次,收藏20次。用了hexo这个博客之后,好用固然好用,问题就是有时候我在看我博客的时候突然发现有个问题,然后就想要修改,于是乎就要打开github然后一个目录一个目录的点进去,发现效率太低。,Facebook家的东西,用来搞课程笔记很方便,里面有个功能就是:每篇文章的末尾都有一个编辑的URL,可以点一下就跳转到对应的Github,非常方便。的主题里面的文档,发现没有这个需求,给Github的开发组提需求,开发组认为这个可以用注入的方法实现。文件目录的格式,和网站博客文章的URL的格式一样,否则就不可以。_hexo admin添加链接

学python必须得英语精通吗_干货|Python学习必须精通的几个模块-程序员宅基地

文章浏览阅读34次。定义Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了Python 对象定义和Python语句。模块让你能够有逻辑地组织你的 Python代码段。把相关的代码分配到一个模块里能让你的代码更好用,更易懂。模块能定义函数,类和变量,模块里也能包含可执行的代码。那废话不多说,给大家带来几个必须学会的python模块吧。rere的matche方法和search方法re..._python 模块 英语

[漏洞复现]phpweb 前台任意文件上传漏洞_phpweb 漏洞-程序员宅基地

文章浏览阅读2.4k次。环境搭建phpweb环境搭建很简单,基本就是下一步下一步点点点就可以了。搭建前需要创建好phpweb对应数据库,如图:然后前台下一步下一步一直点,安装成功:前台:http://192.168.242.128/phpweb/3151/后台:http://192.168.242.128/phpweb/3151/admin.php复现:漏洞位于./base/appplus.php文件下..._phpweb 漏洞

gdb源代码文件目录修改_gdb 更改代码目录-程序员宅基地

文章浏览阅读5.8k次。今天用gdb查看core文件,发现找不到源文件。记录一下相关命令在gdb里面查看源码,list 一下提醒找不到相关文件,列出来的是绝对路径的完整文件名。help files 看一下帮助,可以加载符号,源文件等,自己看一下。dir 设置源码路径无效,show directories 看到设置成功,但是还是找不到文件。应该是绝对路径的问题。因为igcc 根据你_gdb 更改代码目录

随便推点

OC中如何调试野指针异常(EXC_BAD_ACCESS(code = ....))_oc exc bad access-程序员宅基地

文章浏览阅读6.2k次。一哥们儿(__weak_Point)把自己在百度的面试题贴到了网上 面试题在百度面试题第八题 ,刚好当初我师傅面试我的时候也问到了这个问题。(当时没回答上来,最近又看到这个问题,就问了师傅)相信很多的人在工作和学习中都会遇到这个问题 图中的代码如下,注意代码是再非ARC中运行的//注意,这些代码是在非ARC下运行的。 - (void)viewDidLoad { [super v_oc exc bad access

Python中的文章纠错和检测抄袭_python 文本纠错-程序员宅基地

文章浏览阅读228次。通过使用Python中的相关技术和库,我们可以自动化地进行文章纠错和检测抄袭的工作。上述示例代码提供了基本的实现思路,你可以根据自己的需求进行进一步的改进和扩展。这些技术可以帮助我们改善文章的质量,并确保我们的写作具有原创性。在上面的示例代码中,我们使用了NLTK库来检测两个文本之间的相似度,从而判断是否存在抄袭行为。接下来,我们通过比较两个文本中的单词集合,计算它们的相似度。为了确保我们的写作具有原创性,我们可以利用Python中的一些工具来检测文章是否存在抄袭行为。在上面的示例代码中,我们使用了。_python 文本纠错

armbian 斐讯n1_斐讯N1-ArmBian系统写入EMMC及优化-程序员宅基地

文章浏览阅读6.8k次。斐讯N1-ArmBian系统写入EMMC及优化免贵姓操•2020 年 07 月 26 日前言最近想搞个本地测试服务器,看到了斐讯N1,所以折腾下,安装Linux系统,再安装宝塔教程详情下载ssh工具,推荐下面这款,该工具可以可视化编辑系统文件FinalShell :Mac版 Winsows版使用SSH工具登录U盘armbian系统,保持screen连接screen -S lnmp将U盘系统..._n1 armbian写入emmc

delphi 用dbgrid控件显示memo字段的问题-程序员宅基地

文章浏览阅读705次。写程序真得花功夫,想用好delphi7下强大的控件不容易,那可以比较出是否理解程序设计的深入程度。我不认为第三方控件怎么好,想更好进行软件开发,还是要会用原本的控件啊,用好了才能更好地学习别的优秀控件。(因为我并不在软件开发上工作,不知道时间的意义,完全是个人爱好)我个人喜好原生态的东西。下面附上代码,没有测试过字符多的情况,但对于我要做的事已经够用了。procedure TSt..._delphi dbgrid 显示memo

git问题记录:fatal: pathspec ‘xxxx‘ did not match any files_fatal: pathspec 'pods.xcodeproj' did not match any-程序员宅基地

文章浏览阅读1.6w次,点赞6次,收藏13次。git问题记录:fatal: pathspec ‘xxxx’ did not match any files使用git pull 到本地后文件改了名字,git add 出现:fatal: pathspec ‘xxxxxx’ did not match any files 报错,导致无法git pushgit add . 先把更新本地仓库git add xxxx 再提交单个文件git commit -m “xxxx” 添加注释正常git push origin master 就可以了..._fatal: pathspec 'pods.xcodeproj' did not match any files

IEDA的安装与配置-程序员宅基地

文章浏览阅读1.7k次。1、安装IDEA的下载与安装较为简单,傻瓜式操作,所以这里就不加赘述。2、配置JDKIDEA的使用首先要安装JDK,JDK的安装和环境变量配置这里就不赘述了,配置好环境变量后,点击configure下的Project Defaults的Project Structure。选择Project--点击New,选择JDK安装目录。3、Tomcat配置创建一个JavaWeb..._ieda

推荐文章

热门文章

相关标签