当前位置: 首页 > article >正文

【python因果推断库1】协方差分析(ANCOVA)用于处理前/后非等效组设计

目录

生成合成数据

 分析


这是一个基于合成数据的初步示例。希望不久之后能用真实研究的数据进行更新。
在只有一次预处理测量和一次后处理测量的情况下,我们可以使用类似于协方差分析(ANCOVA)的方法来分析非等效组设计(NEGD)实验的数据。基本模型是:

post_i=\beta_0+(\beta_1\cdot T_i)+(\beta_2\cdot pre_i)+\epsilon_i

i指第i个样本,T_{i}指给样本i的treatment,pre_{i}是pre treatment,post_{i}是post treatment,\beta_{0}是一个截距项。非零值表示未经处理组随时间的变化,\beta_{1}是斜率。\epsilon_{i}是残差。

import matplotlib.pyplot as plt
import seaborn as sns

import causalpy as cp
%load_ext autoreload
%autoreload 2
%config InlineBackend.figure_format = 'retina'
seed = 42

生成合成数据

df = cp.load_data("anova1")
df.head()

让我们以两种不同的方式来可视化这些数据。

_, ax = plt.subplots(1, 2, figsize=(11, 5))

# ANCOVA plot
ax[0].axline((7, 7), (15, 15), color="k")
sns.scatterplot(x="pre", y="post", hue="group", alpha=0.5, data=df, ax=ax[0])
ax[0].set_title("ANCOVA style plot")

# Difference-in-difference plot
df_did = df.assign(unit=lambda x: x.index).melt(
    id_vars=["group", "unit"], var_name="time", value_name="value"
)
sns.lineplot(
    df_did,
    x="time",
    y="value",
    hue="group",
    units="unit",
    estimator=None,
    alpha=0.25,
    ax=ax[1],
)
ax[1].set_title("Difference-in-difference style plot");

左侧的图对于进行类似协方差分析 (ANCOVA) 的分析最为相关。预处理测量和后处理测量分别位于 x 轴和 y 轴上。这张图展示了以下几点:

- 控制组的预处理测量值低于处理组,这与我们有非随机分配单位到处理组和控制组的想法一致。
- 控制组的点落在单位线上,表明控制组未受到处理的影响。
- 处理组在后处理得分上更高,这一点通过它们位于单位线之上的点显示出来。因此,从视觉上看,我们怀疑处理导致了结果指标的增加。
- 当然,可能有许多不同的结果模式,但我们可以通过同样的方法快速地对数据进行直观解释。

右侧的图展示的是完全相同的数据,但以一种清晰展示其与差分-in-差分 (Difference-in-Differences, DID) 分析方法相似的方式绘制。这里我们不再深入探讨差分-in-差分分析,更多相关信息可以参考差分-in-差分的例子。

 分析

result = cp.pymc_experiments.PrePostNEGD(
    df,
    formula="post ~ 1 + C(group) + pre",
    group_variable_name="group",
    pretreatment_variable_name="pre",
    model=cp.pymc_models.LinearRegression(sample_kwargs={"random_seed": seed}),
)

fig, ax = result.plot()

result.summary()
==================Pretest/posttest Nonequivalent Group Design===================
Formula: post ~ 1 + C(group) + pre

Results:
Causal impact = 1.9, $CI_{94%}$[1.7, 2.1]
Model coefficients:
  Intercept    	-0.48, 94% HDI [-1.2, 0.23]
  C(group)[T.1]	1.9, 94% HDI [1.7, 2.1]
  pre          	1, 94% HDI [0.98, 1.1]
  sigma        	0.51, 94% HDI [0.46, 0.56]

http://www.kler.cn/a/287736.html

相关文章:

  • 用 Python 从零开始创建神经网络(五):损失函数(Loss Functions)计算网络误差
  • 【Linux系统编程】第四十六弹---线程同步与生产消费模型深度解析
  • Python毕业设计选题:基于django+vue的二手物品交易系统
  • 27-压力测试
  • Python练习27
  • 用户自定义IP核——ZYNQ学习笔记6
  • 对称密码学
  • ncnn之resnet图像分类网络模型部署
  • 千千蓝鲸 回文数求和(高精度运算)
  • ADAS汽车芯片LPDDR4 SIPI联合仿真案列
  • GLM大模型 - CogVideoX:5B 开源,2B 转为 Apache 协议
  • 红帽认证初级有用吗?对个人帮助,报名时间分享
  • 如何为零售行业构建有效的勒索病毒防御体系
  • git branch 不显示分支名称
  • 速盾:便宜的高防 CDN 推荐,高防 CDN 能抵御 DDoS 吗?
  • es相关概念、索引操作(相当于mysql中的数据库操作)
  • Altium designer设计经验谈——常用规则的使用(二)
  • Mysql基础练习题 610.判断三角形 (力扣)
  • 力扣SQL仅数据库(570-579)
  • 5个常见问答 | 1+X证书《大数据应用开发(Python)》
  • 微信小程序代码目录结构介绍
  • 【Java】使用Java调用Python的四种方法
  • js编写缓慢回到顶部
  • 代码随想录八股训练营第二十五天| C++
  • OpenCV绘图函数(4)绘制轮廓线的函数drawContours()的使用
  • 【C语言】十六进制、二进制、字节、位、指针、数组