dowhy.gcm.independence_test 包#
子模块#
dowhy.gcm.independence_test.generalised_cov_measure 模块#
- 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)[source]#
基于广义协方差度量的(条件)独立性检验。
注意: - 目前仅支持单变量和连续的X和Y。 - 残差基于训练数据。 - 关系需要是非确定性的,即残差不能是常数!
参见 - R. D. Shah 和 J Peters 的 条件独立性测试的难度和广义协方差度量,《统计学年鉴》48(3), 2018 了解更多详情。
- Parameters:
X – 来自X的观测数据矩阵。
Y – 来自Y的观测数据矩阵。
Z – 可选的观测数据矩阵,来自Z。这是条件变量。
prediction_model_X – 可以是一个模型类,将用作在Z上回归X的预测模型(例如,线性回归器),或者是一个用于自动选择模型的AssignmentQuality。
prediction_model_Y – 可以是一个模型类,将用作回归X对Z的预测模型(例如,线性回归器),或者是一个AssignmentQuality,用于自动选择模型。
:返回 X 和 Y 独立(给定 Z)的零假设的 p 值。
dowhy.gcm.independence_test.kernel 模块#
- 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[source]#
随机条件独立性测试的实现。独立性测试估计了一个p值,用于零假设,即X和Y是独立的(给定Z)。根据是否给出Z,执行条件或成对独立性测试。
如果给出了Z:使用RCIT作为条件独立性测试。 如果没有给出Z:使用RIT作为成对独立性测试。
注意: - 数据可以是多元的,即给定的输入矩阵可以有多个列。 - 分类数据需要表示为字符串。 - 可以对矩阵中的每一列应用不同的核函数。例如,对某些列使用RBF核函数。
X中的第一个维度和第二个维度的增量核。
- Based on the work:
Strobl, Eric V., Kun Zhang, 和 Shyam Visweswaran. 近似基于核的条件独立性测试用于快速非参数因果发现. 因果推断杂志 7.1 (2019).
- Parameters:
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。默认情况下,使用带有 RBF 核的 Nystroem 方法。
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值。这通常用于家族误差率控制方法。
- Returns:
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[source]#
准备数据并使用核(条件)独立性测试。独立性测试估计了一个p值,用于X和Y在给定Z的条件下是否独立的零假设。根据是否给定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. 基于核的条件独立性检验及其在因果发现中的应用. UAI’11, 第804–813页, 2011. - A. Gretton, K. Fukumizu, C.-H. Teo, L. Song, B. Schölkopf, A. Smola. 核统计独立性检验. NIPS 21, 2007.
有关配置核独立测试的更多信息,请参阅: - cmu-phil/causal-learn(如果未给出Z) - cmu-phil/causal-learn(如果给出Z)
- Parameters:
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值。这通常用于家族误差率控制方法。
- Returns:
X 和 Y 独立(给定 Z)的零假设的 p 值。
dowhy.gcm.independence_test.kernel_operation 模块#
- dowhy.gcm.independence_test.kernel_operation.apply_delta_kernel(X: ndarray) ndarray[source]#
应用delta核,即如果两个条目相等,则距离为1,否则为0。
- Parameters:
X – 输入数据。
- Returns:
delta-kernel 的结果,一个二进制距离矩阵。
- dowhy.gcm.independence_test.kernel_operation.apply_rbf_kernel(X: ndarray, precision: float | None = None) ndarray[source]#
估计给定输入数据的RBF(高斯)核。
- Parameters:
X – 输入数据。
precision – RBF核的特定精度矩阵。如果未给出,则从数据中推断。
- Returns:
在数据上应用RBF(高斯)核的结果。
- dowhy.gcm.independence_test.kernel_operation.apply_rbf_kernel_with_adaptive_precision(X: ndarray) ndarray[source]#
估计给定输入数据的RBF(高斯)核。在这里,每一列都由一个单独的精度参数进行缩放,该参数是从数据中自动推断出来的。
- Parameters:
X – 输入数据。
- Returns:
在数据上应用RBF(高斯)核的结果。
- dowhy.gcm.independence_test.kernel_operation.approximate_delta_kernel_features(X: ndarray, num_random_components: int) ndarray[source]#
应用Nystroem方法,使用数据的子集创建一个NxD(D << N)的近似delta核映射,其中N是X中的样本数量,D是组件的数量。如果两个条目相等,delta核给出1,否则给出0。
- Parameters:
X – 输入数据。
num_random_components – 近似核映射的组件数 D。
- Returns:
一个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[source]#
应用Nystroem方法,使用数据的子集创建一个NxD(D << N)的近似RBF核映射,其中N是X中的样本数量,D是组件的数量。
- Parameters:
X – 输入数据。
num_random_components – 近似核映射的组件数量 D。
precision – RBF核的特定精度矩阵。如果未给出,则从数据中推断。
- Returns:
一个NxD的近似RBF核映射,其中N是X中的样本数量,D是组件的数量。
dowhy.gcm.independence_test.regression 模块#
基于回归的(条件)独立性测试。通过回归测试独立性,即如果一个变量包含另一个变量的信息,则它们是相关的。
- 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在知道Z的情况下不能帮助预测Y,那么X和Y在给定Z的条件下是独立的。也就是说,X在给定Z的情况下没有关于Y的额外信息。在成对情况下(未给定Z),比较基于X预测Y和通过返回其均值(没有任何输入的最佳估计器)预测Y的性能(以平方误差衡量)。请注意,分类输入通过编码器进行转换。
在这里,我们使用
sklearn.kernel_approximation.Nystroem方法来近似输入的内核映射,作为新的输入特征。 这些新特征允许建模复杂的非线性关系。在分类数据的情况下,我们首先应用编码,然后将其映射到内核特征空间。之后,我们使用线性回归作为基于非线性输入特征的预测模型。然后的想法是应用f检验,看看额外的输入特征是否显著有助于预测目标。- This test is motivated by Granger causality, the approx_kernel_based test and the following paper:
K Chalupka, P Perona, F. Eberhardt. 大样本量向量变量的快速条件独立性测试. arXiv:1804.02747, 2018.
- Parameters:
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 – 用于评估折叠的并行作业数量。
- Returns:
给定Z时,X和Y独立的零假设的p值。如果未给出Z,则针对X和Y独立的假设。
模块内容#
- dowhy.gcm.independence_test.independence_test(X, Y, conditioned_on=None, method='kernel', **kwargs)[source]#
执行(条件)独立性测试。 目前支持三种(条件)独立性测试方法:
kernel: 基于核的(条件)独立性测试。
Zhang, J. Peters, D. Janzing, B. Schölkopf. 基于核的条件独立性测试及其在因果发现中的应用. UAI’11, 第804–813页, 2011.
Gretton, K. Fukumizu, C.-H. Teo, L. Song, B. Schölkopf, A. Smola. 基于核的独立性统计测试. NIPS 21, 2007.
在这里,我们使用了cmu-phil/causal-learn包的实现。
approx_kernel: 基于近似核的(条件)独立性测试。
Strobl, K. Zhang, S. Visweswaran. 用于快速非参数因果发现的近似核条件独立性测试. 因果推断杂志, 2019.
回归: 基于回归的(条件)独立性测试,使用f检验。有关更多详细信息,请参见
regression_based()。gcm: 基于广义协方差度量的(条件)独立性测试。更多详情请参见
generalised_cov_based()。Shah 和 J Peters. 条件独立性测试的难度与广义协方差度量, 统计学年鉴 48(3), 2018
- Parameters:
X – X的观测值。
Y – Y的观测值。
conditioned_on – 如果我们想要执行条件独立性测试,则为条件变量的观察值。默认情况下,执行独立性测试。
method – 用于条件独立性测试的方法。选项有: kernel(默认):
kernel_based()(条件)独立性测试。 approx_kernel:approx_kernel_based()(条件)独立性测试。 regression:regression_based()(条件)独立性测试。 gcm:generalised_cov_based()(条件)独立性测试。 有关这些方法的更多信息,请参见上文。
- Returns:
(条件)独立性检验的p值。(条件)独立性是零假设。