无参工具变量
两阶段最小平方
当结果 \(y\) ,治疗 \(x\) 和协变量 covariate \(v\) 之间的关系假设是线性的,比如, [Angrist1996] ,
那么IV框架变得直接:它首先给定 \(z\) 和 \(v\) 为 \(x\) 训练一个线性模型。接着,在第二阶段,它把 \(x\) 替换为估计值 \(\hat{x}\) 来 为 \(y\) 训练一个线性模型。这个过程被称为两阶段最小平方(2SLS)。
无参IV
移除关于变量之间关系的线性假设,无参IV能够取代线性回归,通过线性投影到一系列有名的基函数 [Newey2002] 。
这个方法和传统的2SLS类似且在找到 \(x\) , \(v\) ,和 \(z\) 的新特征之后也由两个阶段组成,
其由一些非线性函数(基函数) \(f_d\) 和 \(g_{\mu}\) 表示。在变换到新的空间后,我们接着
拟合治疗模型:
\[\hat{x}(z, v, w) = \sum_{d, \mu} A_{d, \mu} \tilde{z}_d \tilde{v}_{\mu} + h(v, w) + \eta\]
生成新的治疗x_hat,接着拟合结果模型
\[y(\hat{x}, v, w) = \sum_{m, \mu} B_{m, \mu} \psi_m(\hat{x}) \tilde{v}_{\mu} + k(v, w) + \epsilon.\]
最终因果效应能够被估计。举个例子,给定 \(v\) ,CATE被估计为
\[y(\hat{x_t}, v, w) - y(\hat{x_0}, v, w) = \sum_{m, \mu} B_{m, \mu} (\psi_m(\hat{x_t}) - \psi_m(\hat{x_0})) \tilde{v}_{\mu}.\]
YLearn在类 NP2SLS
中实现了这个过程。
类结构
- class ylearn.estimator_model.iv.NP2SLS(x_model=None, y_model=None, random_state=2022, is_discrete_treatment=False, is_discrete_outcome=False, categories='auto')
- 参数:
x_model (estimator, optional, default=None) – 为了建模治疗的机器学习模型。任何合理的x_model应该实现 fit 和 predict 方法,默认是None。
y_model (estimator, optional, default=None) – 为了建模结果的机器学习模型。任何合理的y_model应该实现 fit 和 predict 方法,默认是None。
random_state (int, default=2022) –
is_discrete_treatment (bool, default=False) –
is_discrete_outcome (bool, default=False) –
categories (str, optional, default='auto') –
- fit(data, outcome, treatment, instrument, is_discrete_instrument=False, treatment_basis=('Poly', 2), instrument_basis=('Poly', 2), covar_basis=('Poly', 2), adjustment=None, covariate=None, **kwargs)
拟合NP2SLS。注意当treatment_basis和instrument_basis都有degree 1的时候,我们实际在做2SLS。
- 参数:
data (DataFrame) – 模型的训练数据集。Training data for the model.
outcome (str or list of str, optional) – 结果的名字。
treatment (str or list of str, optional) – 治疗的名字。
covariate (str or list of str, optional, default=None) – 协变量向量的名字。
instrument (str or list of str, optional) – 工具变量的名字。
adjustment (str or list of str, optional, default=None) – 调整变量的名字。Names of the adjustment variables.
treatment_basis (tuple of 2 elements, optional, default=('Poly', 2)) – 转换原来的治疗向量的选项。第一个元素表示转换的基函数,第二个表示degree。现在第一个元素只支持’Poly’。
instrument_basis (tuple of 2 elements, optional, default=('Poly', 2)) – 转换原来的工具向量的选项。第一个元素表示转换的基函数,第二个表示degree。现在第一个元素只支持’Poly’。
covar_basis (tuple of 2 elements, optional, default=('Poly', 2)) – 转换原来的协变量向量的选项。第一个元素表示转换的基函数,第二个表示degree。现在第一个元素只支持’Poly’。
is_discrete_instrument (bool, default=False) –
- estimate(data=None, treat=None, control=None, quantity=None)
估计数据中治疗对结果的因果效应。
- 参数:
data (pandas.DataFrame, optional, default=None) – 如果为None,数据将会被设置为训练数据。
quantity (str, optional, default=None) –
返回的估计结果的选项。量的可能值包括:
’CATE’ : 估计器将会估计CATE;
’ATE’ : 估计器将会估计ATE;
None : 估计器将会估计ITE或CITE。
treat (float, optional, default=None) – 施加干涉时治疗的值。如果是None,那么treat将会被设置为1。
control (float, optional, default=None) – 治疗的值,这样治疗的效果是 \(y(do(x=treat)) - y (do(x = control))\) 。
- 返回:
用量的类型估计的因果效应。
- 返回类型:
ndarray or float, optional
- effect_nji(data=None)
用不同的治疗值计算因果效应。
- 参数:
data (pandas.DataFrame, optional, default=None) – 给估计器估计因果效应的测试数据,注意如果data是None,估计器将会使用训练数据。
- 返回:
用不同的治疗值的因果效应。
- 返回类型:
ndarray