dowhy.gcm.independence_test package#

子模块#

dowhy.gcm.independence_test.generalised_cov_measure module#

dowhy.gcm.independence_test.generalised_cov_measure.generalised_cov_based(X: ndarray, Y: ndarray, Z: ndarray | None = None, prediction_model_X: AssignmentQuality | Callable[[], PredictionModel] = AssignmentQuality.BETTER, prediction_model_Y: AssignmentQuality | Callable[[], PredictionModel] = AssignmentQuality.BETTER)[源代码]#

基于广义协方差度量(Generalised Covariance Measure)的(条件)独立性检验。

注意: - 目前仅支持单变量连续型 X 和 Y。 - 残差基于训练数据。 - 关系必须是非确定性的,即残差不能是常数!

更多详细信息请参阅 - R. D. Shah 和 J Peters. The hardness of conditional independence testing and the generalised covariance measure, The Annals of Statistics 48(3), 2018。

参数:
  • X – X 观测值的数据矩阵。

  • Y – Y 观测值的数据矩阵。

  • Z – Z 观测值的可选数据矩阵。这是条件变量。

  • prediction_model_X – 将用作基于 Z 回归 X 的预测模型类(例如,线性回归器),或者用于自动选择模型的 AssignmentQuality。

  • prediction_model_Y – 将用作基于 Z 回归 X 的预测模型类(例如,线性回归器),或者用于自动选择模型的 AssignmentQuality。

:return X 和 Y 独立(给定 Z)的零假设的 p 值。

dowhy.gcm.independence_test.kernel module#

dowhy.gcm.independence_test.kernel.approx_kernel_based(X: ~numpy.ndarray, Y: ~numpy.ndarray, Z: ~numpy.ndarray | None = None, num_random_features_X: int = 50, num_random_features_Y: int = 50, num_random_features_Z: int = 50, num_permutations: int = 100, approx_kernel: ~typing.Callable[[~numpy.ndarray], ~numpy.ndarray] = <function approximate_rbf_kernel_features>, scale_data: bool = False, use_bootstrap: bool = True, bootstrap_num_runs: int = 10, bootstrap_num_samples: int = 1000, bootstrap_n_jobs: int | None = None, p_value_adjust_func: ~typing.Callable[[~numpy.ndarray | ~typing.List[float]], float] = <function merge_p_values_average>) float[源代码]#

随机条件独立性检验的实现。独立性检验估计 X 和 Y 独立(给定 Z)的零假设的 p 值。取决于是否给定 Z,执行条件或成对独立性检验。

如果给定 Z:使用 RCIT 作为条件独立性检验。如果未给定 Z:使用 RIT 作为成对独立性检验。

注意: - 数据可以是多变量的,即给定的输入矩阵可以有多个列。 - 分类数据需要表示为字符串。 - 可以对矩阵中的每一列应用不同的核函数。例如,对 X 的第一维使用 RBF 核,对第二维使用 delta 核。

基于以下工作:

基于这项工作

Strobl, Eric V., Kun Zhang, and Shyam Visweswaran. Approximate kernel-based conditional independence tests for fast non-parametric causal discovery. Journal of Causal Inference 7.1 (2019).

参数:
  • X – X 观测值的数据矩阵。

  • Y – Y 观测值的数据矩阵。

  • Z – Z 观测值的可选数据矩阵。这是条件变量。

  • num_random_features_X – 从 X 的近似核映射中采样的特征数量。

  • num_random_features_Y – 从 Y 的近似核映射中采样的特征数量。

  • num_random_features_Z – 从 Z 的近似核映射中采样的特征数量。

  • num_permutations – 用于估计检验统计量的置换次数。

  • approx_kernel – 近似的核映射。预期的输入是 n x d numpy 数组,输出预期是 n x k numpy 数组,其中 k << d。默认使用 Nystroem 方法和 RBF 核。

  • scale_data – 如果设置为 True,数据将被标准化。如果设置为 False,则数据按原样使用。标准化数据有助于识别弱依赖关系。如果只对强依赖关系感兴趣,考虑将其设置为 False。

  • use_bootstrap – 如果为 True,则在数据的多个子集上执行独立性检验,并根据提供的 p_value_adjust_func 函数构建最终的 p 值。

  • bootstrap_num_runs – 引导运行次数(仅当 use_bootstrap 为 True 时相关)。

  • bootstrap_num_samples – 每次引导运行使用的最大样本数量。

  • bootstrap_n_jobs – 引导运行的并行作业数量。

  • p_value_adjust_func – 一个可调用对象,它接受多个 p 值的 numpy 数组,并返回一个 p 值。这通常用作家族误差率控制方法。

返回:

X 和 Y 独立(给定 Z)的零假设的 p 值。

dowhy.gcm.independence_test.kernel.kernel_based(X: ~numpy.ndarray, Y: ~numpy.ndarray, Z: ~numpy.ndarray | None = None, use_bootstrap: bool = False, bootstrap_num_runs: int = 10, max_num_samples_run: int = 2000, bootstrap_n_jobs: int | None = None, p_value_adjust_func: ~typing.Callable[[~numpy.ndarray | ~typing.List[float]], float] = <function merge_p_values_average>, **kwargs) float[源代码]#

准备数据并使用核(条件)独立性检验。独立性检验估计 X 和 Y 独立(给定 Z)的零假设的 p 值。取决于是否给定 Z,执行条件或成对独立性检验。

此处,我们利用 cmu-phil/causal-learn 包的实现。

如果给定 Z:使用 KCI 作为条件独立性检验,即我们使用 cmu-phil/causal-learn。如果未给定 Z:使用 KCI 作为成对独立性检验,即我们使用 cmu-phil/causal-learn

注意: - 数据可以是多变量的,即给定的输入矩阵可以有多个列。 - 分类数据需要表示为字符串。

基于以下工作: - K. Zhang, J. Peters, D. Janzing, B. Schölkopf. Kernel-based Conditional Independence Test and Application in Causal Discovery. UAI’11, Pages 804–813, 2011. - A. Gretton, K. Fukumizu, C.-H. Teo, L. Song, B. Schölkopf, A. Smola. A Kernel Statistical Test of Independence. NIPS 21, 2007.

有关配置核独立性检验的更多信息,请参阅: - cmu-phil/causal-learn (如果未给定 Z) - cmu-phil/causal-learn (如果给定 Z)

参数:
  • X – X 观测值的数据矩阵。

  • Y – Y 观测值的数据矩阵。

  • Z – Z 观测值的可选数据矩阵。这是条件变量。

  • use_bootstrap – 如果为 True,则在数据的多个子集上执行独立性检验,并根据提供的 p_value_adjust_func 函数构建最终的 p 值。

  • bootstrap_num_runs – 引导运行次数(仅当 use_bootstrap 为 True 时相关)。

  • max_num_samples_run – 每次评估中使用的最大样本数量。如果 use_bootstrap 为 True,则使用不同的样本,但最多使用 max_num_samples_run 个样本。

  • bootstrap_n_jobs – 引导运行的并行作业数量。

  • p_value_adjust_func – 一个可调用对象,它接受多个 p 值的 numpy 数组,并返回一个 p 值。这通常用作家族误差率控制方法。

返回:

X 和 Y 独立(给定 Z)的零假设的 p 值。

dowhy.gcm.independence_test.kernel_operation module#

dowhy.gcm.independence_test.kernel_operation.apply_delta_kernel(X: ndarray) ndarray[源代码]#

应用 delta 核,即如果两个条目相等,距离为 1,否则为 0。

参数:

X – 输入数据。

返回:

delta 核的结果,一个二进制距离矩阵。

dowhy.gcm.independence_test.kernel_operation.apply_rbf_kernel(X: ndarray, precision: float | None = None) ndarray[源代码]#

为给定的输入数据估计 RBF (高斯) 核。

参数:
  • X – 输入数据。

  • precision – RBF 核的特定精度矩阵。如果为 None,则根据数据推断。

返回:

对数据应用 RBF (高斯) 核的结果。

dowhy.gcm.independence_test.kernel_operation.apply_rbf_kernel_with_adaptive_precision(X: ndarray) ndarray[源代码]#

为给定的输入数据估计 RBF (高斯) 核。此处,每一列都通过一个自动从数据中推断出的单独精度参数进行缩放。

参数:

X – 输入数据。

返回:

对数据应用 RBF (高斯) 核的结果。

dowhy.gcm.independence_test.kernel_operation.approximate_delta_kernel_features(X: ndarray, num_random_components: int) ndarray[源代码]#

应用 Nystroem 方法,使用数据子集创建 NxD (D << N) 近似 delta 核映射,其中 N 是 X 中的样本数量,D 是分量数量。delta 核在两个条目相等时返回 1,否则返回 0。

参数:
  • X – 输入数据。

  • num_random_components – 近似核映射的分量数量 D。

返回:

NxD 近似 RBF 核映射,其中 N 是 X 中的样本数量,D 是分量数量。

dowhy.gcm.independence_test.kernel_operation.approximate_rbf_kernel_features(X: ndarray, num_random_components: int, precision: float | None = None) ndarray[源代码]#

应用 Nystroem 方法,使用数据子集创建 NxD (D << N) 近似 RBF 核映射,其中 N 是 X 中的样本数量,D 是分量数量。

参数:
  • X – 输入数据。

  • num_random_components – 近似核映射的分量数量 D。

  • precision – RBF 核的特定精度矩阵。如果为 None,则根据数据推断。

返回:

NxD 近似 RBF 核映射,其中 N 是 X 中的样本数量,D 是分量数量。

dowhy.gcm.independence_test.regression module#

基于回归的(条件)独立性检验。通过回归检验独立性,即如果一个变量包含关于另一个变量的信息,则它们是相关的。

dowhy.gcm.independence_test.regression.regression_based(X: ~numpy.ndarray, Y: ~numpy.ndarray, Z: ~numpy.ndarray | None = None, max_num_components_all_inputs: int = 40, k_folds: int = 3, p_value_adjust_func: ~typing.Callable[[~numpy.ndarray | ~typing.List[float]], float] = <function merge_p_values_average>, max_samples_per_fold: int = -1, n_jobs: int | None = None) float[源代码]#

主要思想是如果 X 和 Y 相关,则 X 应该有助于预测 Y。如果没有依赖关系,则 X 不应该有帮助。当给定 Z 时,思想保持不变,但此处 X 和 Y 在给定 Z 的情况下条件独立,如果当已知 Z 时 X 对预测 Y 没有帮助。也就是说,在已知 Z 的情况下,X 没有关于 Y 的额外信息。在成对情况下(未给定 Z),比较基于 X 预测 Y 和通过返回其均值预测 Y(没有任何输入时的最佳估计器)的性能(以平方误差衡量)。注意,分类输入通过编码器进行转换。

在这里,我们使用 sklearn.kernel_approximation.Nystroem 方法来近似输入数据的核映射,作为新的输入特征。这些新特征允许模拟复杂的非线性关系。对于分类数据,我们首先应用编码,然后将其映射到核特征空间。之后,我们使用线性回归作为基于非线性输入特征的预测模型。其思想是应用 f 检验来查看额外的输入特征是否显著有助于预测目标。

此检验受 Granger 因果关系、approx_kernel_based 检验和以下论文的启发:

K Chalupka, P Perona, F. Eberhardt. Fast Conditional Independence Test for Vector Variables with Large Sample Sizes. arXiv:1804.02747, 2018.

参数:
  • X – X 的输入数据。

  • Y – Y 的输入数据。

  • Z – Z 的输入数据。可选地用于条件的变量集。

  • max_num_components_all_inputs – 组合 X 和 Z 时核特征的最大数量。如果未给定 Z,则将其替换为空数组。如果给定 Z,则将该数量的一半用于生成 Z 的特征。请注意,实际的分量数量是样本数量的 1/10,但最多不超过 max_num_components_all_inputs。

  • num_target_components_factor – 此因子表示用于目标变量的分量数量。即,num_target_components_factor * 目标变量维度 的分量数量。

  • k_folds – 训练集和测试集的折叠数量。这等于估计的 p 值数量,这些 p 值通过 p_value_adjust_func 进行调整。

  • p_value_adjust_func – 一个可调用对象,它接受多个 p 值的 numpy 数组,并返回一个 p 值。这通常用作家族误差率控制方法。

  • max_samples_per_fold – 每次折叠用于训练和测试的最大样本数量。如果为 -1,则使用所有数据。

  • n_jobs – 折叠评估的并行作业数量。

返回:

X 和 Y 在给定 Z 的情况下的独立性零假设的 p 值。如果未给定 Z,则为 X 和 Y 独立性的假设。

模块内容#

dowhy.gcm.independence_test.independence_test(X, Y, conditioned_on=None, method='kernel', **kwargs)[源代码]#

执行(条件)独立性检验。目前支持三种(条件)独立性检验方法:

  • kernel: 基于核的(条件)独立性检验。

      1. Zhang, J. Peters, D. Janzing, B. Schölkopf. Kernel-based Conditional Independence Test and Application in Causal Discovery. UAI’11, Pages 804–813, 2011.

      1. Gretton, K. Fukumizu, C.-H. Teo, L. Song, B. Schölkopf, A. Smola. A Kernel Statistical Test of Independence. NIPS 21, 2007.

    此处,我们利用 cmu-phil/causal-learn 包的实现。

  • approx_kernel: 近似基于核的(条件)独立性检验。

      1. Strobl, K. Zhang, S. Visweswaran. Approximate kernel-based conditional independence tests for fast non-parametric causal discovery. Journal of Causal Inference, 2019.

  • regression: 使用 f 检验的基于回归的(条件)独立性检验。更多详细信息请参阅 regression_based()

  • gcm: 基于广义协方差度量(Generalised Covariance Measure)的(条件)独立性检验。更多详细信息请参阅 generalised_cov_based()

        1. Shah and J Peters. The hardness of conditional independence testing and the generalised covariance measure, The Annals of Statistics 48(3), 2018

参数:
  • X – X 的观测值。

  • Y – Y 的观测值。

  • conditioned_on – 如果要执行条件独立性检验,则为条件变量的观测值。默认执行独立性检验。

  • method – 条件独立性检验的方法。选项有: kernel (默认): kernel_based() (条件)独立性检验。approx_kernel: approx_kernel_based() (条件)独立性检验。regression: regression_based() (条件)独立性检验。gcm: generalised_cov_based() (条件)独立性检验。有关这些方法的更多信息,请参阅上文。

返回:

(条件)独立性检验的 p 值。(条件)独立性是零假设。