python虽然与R一样都可以做数据分析,但是在计量方面较为薄弱,python更像是干脏活,清洗数据用的。现在慢慢的python也有一些在计量的包,比如causalinference,这个包可以做因果推断分析。

安装

!pip3 install causalinference
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting causalinferenceDownloading https://pypi.tuna.tsinghua.edu.cn/packages/dc/7f/4504b42ef5a1158075954f54d08b95b2d5b2186da0ef9fcbcd0cf31411f2/CausalInference-0.1.3-py3-none-any.whl (51 kB)
[K     |████████████████████████████████| 51 kB 81 kB/s eta 0:00:0101
[?25hInstalling collected packages: causalinference
Successfully installed causalinference-0.1.3

数据导入

import pandas as pd
df = pd.read_csv('data.csv')
df

数据描述

  • x1,x2,x3 协变量(控制变量)

  • y 因变量

  • istreatment 处置变量D,标注每条数据隶属于treatment或control组。1为treatment, 0为control。

from causalinference import CausalModel
Y = df['y'].values
D = df['istreatment'].values
X = df[['x1', 'x2', 'x3']].values
#CausalModel参数依次为Y, D, X。其中Y为因变量
causal = CausalModel(Y, D, X)
causal
<causalinference.causal.CausalModel at 0x13b9348d0>

描述性统计分析

print(causal.summary_stats)
Summary StatisticsControls (N_c=2509)        Treated (N_t=2491)             Variable         Mean         S.d.         Mean         S.d.     Raw-diff
--------------------------------------------------------------------------------Y       -1.012        1.742        4.978        3.068        5.989Controls (N_c=2509)        Treated (N_t=2491)             Variable         Mean         S.d.         Mean         S.d.     Nor-diff
--------------------------------------------------------------------------------X0       -0.343        0.940        0.336        0.961        0.714X1       -0.347        0.936        0.345        0.958        0.730X2       -0.313        0.940        0.306        0.963        0.650

causal.summary_stats含有的指标字段名

causal.summary_stats.keys()
dict_keys(['N', 'K', 'N_c', 'N_t', 'Y_c_mean', 'Y_t_mean', 'Y_c_sd', 'Y_t_sd', 'rdiff', 'X_c_mean', 'X_t_mean', 'X_c_sd', 'X_t_sd', 'ndiff'])

使用OLS估计处置效应

估计处置效应最简单的方法是使用OLS方法,

CausalModel.est_via_ols(adj)

该方法有一个参数adj

  • adj=0 模型未使用X(协变量)

  • adj=1 模型使用了D(是否为处置组)和X(协变量)。

  • adj=2 模型使用了D(是否为处置组)、X(协变量)、D与X的交互

  • adj默认为2

causal.est_via_ols(adj=2)
print(causal.estimates)
Treatment Effect Estimates: OLSEst.       S.e.          z      P>|z|      [95% Conf. int.]
--------------------------------------------------------------------------------ATE      3.017      0.034     88.740      0.000      2.950      3.083ATC      2.031      0.040     51.183      0.000      1.953      2.108ATT      4.010      0.039    103.964      0.000      3.934      4.086

参数解读

  • ATE 平均处置效应(average treatment effect)

  • ATC 控制组的平均处置效应(average treatment effect for the controls)

  • ATT 处置组的平均处置效应(average treatment effect for the treated)

你们再试试adj设置为0和1分别运行出什么结果

倾向得分估计

我们估计处置效应时,很希望处置组和控制组很类似。比如研究受教育水平对个人收入的影响,其他变量如家庭背景、年龄、地区等协变量存在差异,我们希望控制组和处置组的之间的协变量平衡性尽可能的好,这样两个组就会很像,当对这两个组的受教育水平进行操作时,两个组的收入差异可以认为是受教育水平带来的。

让两个组很像,这里就用到倾向得分估计。

causal.est_propensity_s()
print(causal.propensity)
Estimated Parameters of Propensity ScoreCoef.       S.e.          z      P>|z|      [95% Conf. int.]
--------------------------------------------------------------------------------Intercept      0.005      0.035      0.145      0.885     -0.063      0.073X1      0.999      0.041     24.495      0.000      0.919      1.079X0      1.000      0.041     24.543      0.000      0.920      1.080X2      0.933      0.040     23.181      0.000      0.855      1.012

分层方法估计处置效应

倾向得分估计,让两个组尽量相似,但实际上这个相似值范围有点大。比如假设受教育水平对个人收入的影响,身高、体重等颜值信息(协变量)其实对收入也是有影响的,那么就应该对人群进行分层,不同颜值水平(分组)下受教育水平对个人收入的影响。

分层方法估计CausalModel.stratify_s() 自动选择协变量

causal.stratify_s()
print(causal.strata)
Stratification SummaryPropensity Score         Sample Size     Ave. Propensity   OutcomeStratum      Min.      Max.  Controls   Treated  Controls   Treated  Raw-diff
--------------------------------------------------------------------------------1     0.001     0.043       153         5     0.024     0.029    -0.0492     0.043     0.069       148         8     0.056     0.059     0.1423     0.070     0.118       283        29     0.093     0.092     0.9534     0.119     0.178       268        45     0.147     0.147     1.1545     0.178     0.240       247        65     0.208     0.210     1.7286     0.240     0.361       451       174     0.299     0.300     2.0937     0.361     0.427       196       117     0.393     0.395     2.4068     0.427     0.499       153       159     0.465     0.464     2.8689     0.499     0.532        82        75     0.515     0.515     2.97310     0.532     0.568        65        91     0.551     0.553     3.25911     0.568     0.630       114       198     0.600     0.601     3.45612     0.630     0.758       180       445     0.693     0.696     3.91813     0.758     0.818        77       236     0.787     0.789     4.50314     0.818     0.876        57       255     0.845     0.849     4.93715     0.876     0.933        23       289     0.904     0.904     5.17116     0.933     0.998        12       300     0.957     0.963     6.822

更多详细信息可阅读代码中说明论文,可在项目中下载到的。

causalinference因果推断分析相关推荐

  1. 【因果学习】因果推断分析

    #01.因果推断概念 相关不是因果,事物间的因果关系常常是我们经常要面对和分析的问题,研究因果的意义是我们需要理解数据并据此做出进一步的行动和决策.比如对于我们而言,常常会想要知道"学历越高 ...

  2. python 因果推断_causalinference: 使用Python做因果推断

    python虽然与R一样都可以做数据分析,但是在计量方面较为薄弱,python更像是干脏活,清洗数据用的.现在慢慢的python也有一些在计量的包,比如causalinference,这个包可以做因果 ...

  3. 【机器学习】机器学习视角下的因果推断

    机器学习可以通过样本直接匹配以及提升倾向性得分(PSM)准确度来实现样本的精准匹配,使得样本对反事实预测的研究更具有随机化实验的特性.本文从匹配法.断点回归法.双重差分法.合成控制法四个方面讲解机器学 ...

  4. 数据分析36计(24):因果推断结合机器学习估计个体处理效应

    个体异质性为何重要 传统的因果推断分析,主要关注焦点是平均处理效应(Average Treatment Effect).许多科学和工程都会面临这样的挑战,从个性化的医疗救治方案,到定制型的营销建议都需 ...

  5. 因果推断实战:淘宝3D化价值分析小结

    观察性因果推断方法有很多,文章主要介绍了PSM.贝叶斯概率图.DID这几种方法,可将文章分享的实践方法作为因果推断分析中的一种参考. 背景介绍 ▐  为什么需要因果推断 统计学有一些有趣的'研究':太 ...

  6. 如何用因果推断和实验驱动用户增长? | 7月28日TF67

    因果推断是数据科学领域一个重要的分支.通过系统实验发现.探索和推断事物间的因果关系,一直是人类认识世界的基本方式和现代科学的基石,也是数据科学中的一个核心问题.本期活动汇集了跨行业的互联网资深数据科学 ...

  7. 基于因果推断的根因分析

    前言 对复杂信息系统进行运维的相关研究工作中,一个子领域是"根因定位".这个子领域的一种问题定义是:在复杂系统的大量监控变量(如CPU利用率.响应时间)中,找到"根因&q ...

  8. 因果推断三种分析框架

    目录 因果推断三种分析框架 相关和因果 因果推断的基本概念 反事实框架 潜在结果模型<

  9. 史上最全因果推断合集-14(因果分析在贝壳的探索实践)

    因果推断的应用范围十分广泛,例如气候变暖.新药研发.物理研究.经济学等.AI领域,特别是互联网产业,如何科学的进行因果分析,是一个重要的议题.本次分享的主题是因果分析在贝壳的探索和实践. 今天的介绍会 ...

最新文章

  1. 利用合成图像对热图像进行鲁棒行人检测
  2. Supervisor行为分析和实践
  3. jQuery运行方式818
  4. Craig离开Webb了
  5. 互斥锁在python中的应用
  6. 20应用统计考研复试要点(part3)--统计学
  7. Vue2 彻底从 Flow 重构为 TypeScript,焕然一新!
  8. linux打包备份到其他机器,linux系统备份恢复到本机或是别的机器上
  9. 币安跨链桥在BSC、以太坊和IoTeX主网全面支持IOTX资产
  10. win10 64位 Compaq Visual Fortran(CVF)安装教程
  11. 论文写作参考文献 期刊标准缩写
  12. 如何注册Gitlab/被墙如何注册
  13. 企鹅吞狗,狗走狐悲,狼厂危矣
  14. 计算机怎么不读u盘,老司机告诉你电脑不读U盘的解决方法
  15. java.sql.SQLException: Access denied for user ‘‘@‘localhost‘ (using password: YES)
  16. 手把手带你撸一个校园APP(五):新闻中心模块
  17. ps怎么清屏_刷屏了的黑洞照片,居然是3分钟PS出来的!
  18. idea提示java.sql.SQLException: Access denied for user ‘‘@‘localhost‘ (using password: NO)
  19. 人生是一场独自的修行
  20. Oracle融合数据库(Converged Database)

热门文章

  1. 智能水表是怎样远程监控的?
  2. 移动屋顶使用在别墅中的8大好处
  3. OLPC笔记本电脑的应用程序开发
  4. 说说短线,交易模型与交易系统
  5. epic怎么添加本地游戏_从《夜勤人》开始EPIC游戏商城现已加入云存档功能
  6. 2018最新Kotlin基础视频教程终于上线了
  7. 04、Vue-项目准备《饿了吗》
  8. Django下防御Race Condition漏洞
  9. java电话键盘字母数字转换_用Java语言将一个键盘输入的数字转化成中文输出
  10. mysql doen s exist_Mysql实例Mysql中大小写敏感问题导致的MySql Error 1146 Tabel doen’t exist错误...