目录
线性模型、主效应模型和交互作用模型
使用bandwidth
使用基样条
import causalpy as cp
%load_ext autoreload
%autoreload 2
%config InlineBackend.figure_format = 'retina'
seed = 42
df = cp.load_data("rd")
线性模型、主效应模型和交互作用模型
PyMC 采样器的 `random_seed` 关键字参数不是必需的。我们在这里使用它是为了使结果可复现。
result = cp.pymc_experiments.RegressionDiscontinuity(
df,
formula="y ~ 1 + x + treated + x:treated",
model=cp.pymc_models.LinearRegression(sample_kwargs={"random_seed": seed}),
treatment_threshold=0.5,
)
fig, ax = result.plot()
虽然我们可以看到这样做并不能很好地拟合数据,几乎肯定高估了阈值处的断点。
使用bandwidth
我们处理这个问题的一种方法是使用 `bandwidth` 参数。这将只对阈值附近的一定带宽内的数据进行拟合。如果 x 是连续变量,那么模型将只对满足 的数据进行拟合。
result = cp.pymc_experiments.RegressionDiscontinuity(
df,
formula="y ~ 1 + x + treated + x:treated",
model=cp.pymc_models.LinearRegression(sample_kwargs={"random_seed": seed}),
treatment_threshold=0.5,
bandwidth=0.3,
)
fig, ax = result.plot()
我们甚至可以走得更远,只为接近阈值的数据拟合截距。但很明显,这将涉及更多的估计误差,因为我们使用的数据较少。
result = cp.pymc_experiments.RegressionDiscontinuity(
df,
formula="y ~ 1 + treated",
model=cp.pymc_models.LinearRegression(sample_kwargs={"random_seed": seed}),
treatment_threshold=0.5,
bandwidth=0.2,
)
fig, ax = result.plot()
使用基样条
尽管可以说使用更复杂的模型进行拟合可能会更好,例如使用样条模型。这允许我们使用所有的数据,并且(根据具体情况)可能会给出更好的拟合。
result = cp.pymc_experiments.RegressionDiscontinuity(
df,
formula="y ~ 1 + bs(x, df=6) + treated",
model=cp.pymc_models.LinearRegression(sample_kwargs={"random_seed": seed}),
treatment_threshold=0.5,
)
fig, ax = result.plot()
与本笔记本中的所有模型一样,我们可以要求提供模型系数的摘要。
result.summary()
============================Regression Discontinuity============================ Formula: y ~ 1 + bs(x, df=6) + treated Running variable: x Threshold on running variable: 0.5 Results: Discontinuity at threshold = 0.41 Model coefficients: Intercept -0.23, 94% HDI [-0.32, -0.15] treated[T.True] 0.41, 94% HDI [0.23, 0.59] bs(x, df=6)[0] -0.59, 94% HDI [-0.78, -0.41] bs(x, df=6)[1] -1.1, 94% HDI [-1.2, -0.94] bs(x, df=6)[2] 0.28, 94% HDI [0.13, 0.43] bs(x, df=6)[3] 1.7, 94% HDI [1.5, 1.8] bs(x, df=6)[4] 1, 94% HDI [0.66, 1.4] bs(x, df=6)[5] 0.57, 94% HDI [0.37, 0.76] sigma 0.1, 94% HDI [0.089, 0.12]