独立性和条件独立性测试方法

2023-11-01 14:20

本文主要是介绍独立性和条件独立性测试方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

独立性和条件独立性测试方法[1]

独立和条件独立定义:两个变量X, Z是独立的,其中P(Z=z)>0,有:

P ( X = x , Z = z ) = P ( X = x ) P ( Z = z ) P(X=x, Z=z)=P(X=x)P(Z=z) P(X=x,Z=z)=P(X=x)P(Z=z)

给定变量集合S,X和Z条件独立,记为 I n d ( X , Z ∣ S ) Ind(X,Z|S) Ind(X,ZS)

P ( X = x , Z = z ∣ S = s ) = P ( X = x ∣ S = s ) P ( Z = z ∣ S = s ) P(X=x, Z=z|S=s)=P(X=x|S=s)P(Z=z|S=s) P(X=x,Z=zS=s)=P(X=xS=s)P(Z=zS=s), 其中 P ( S = s ) > 0 P(S=s)>0 P(S=s)>0

方法1:Fisher’s z-Transform for Correlation and Partial Correlation

(1)独立性测试

给定一个包含n个样本的X,Y变量,皮尔森相关系数计算如下:

r = ∑ i = 1 n ( X i − X ˉ ) ( Y i − Y ˉ ) ∑ i = 1 n ( X i − X ˉ ) 2 ∑ i = 1 n ( Y i − Y ˉ ) 2 r=\frac{\sum_{i=1}^{n}{(X_i-\bar X)(Y_i-\bar Y)}}{\sqrt{\sum_{i=1}^n{(X_i-\bar X)^2}}\sqrt{\sum_{i=1}^n{(Y_i-\bar Y)^2}}} r=i=1n(XiXˉ)2 i=1n(YiYˉ)2 i=1n(XiXˉ)(YiYˉ)

Fisher 的r-to-z transformation 其实是将皮尔森相关系数转化成具有正态分布的变量z, z ∼ N ( μ z , σ z ) z\sim N(\mu_z,\sigma_z) zN(μz,σz):
z = 0.5 l n ( 1 + r 1 − r ) z = 0.5ln(\frac{1+r}{1-r}) z=0.5ln(1r1+r)
and
μ z = 0.5 l n ( 1 + ρ 1 − ρ ) , σ z = 1 n − 3 \mu_z=0.5ln(\frac{1+\rho}{1-\rho}), \sigma_z = \frac{1}{\sqrt{n-3}} μz=0.5ln(1ρ1+ρ),σz=n3 1
其中 ρ \rho ρ是总体皮尔森相关系数
PS总体皮尔森相关系数和样本皮尔森相关系数:
在这里插入图片描述

在这里插入图片描述

给定显著性水平 α \alpha α和皮尔森相关系数 r r r,X, Y相关需要满足以下条件:
z n − 3 > ϕ − 1 ( 1 − α / 2 ) z\sqrt{n-3}>\phi^{-1}(1-\alpha/2) zn3 >ϕ1(1α/2)
ϕ \phi ϕ表示标准正态分布函数

例:假如有一组包含100个样本的X,Y变量组,计算得出二者皮尔森相关系数为 0.4。在95%的置信水平下,有:
z n − 3 = 0.5 l n ( 1 + 0.4 1 − 0.4 ) 100 − 3 = 4.172458 z\sqrt{n-3}=0.5ln(\frac{1+0.4}{1-0.4})\sqrt{100-3}=4.172458 zn3 =0.5ln(10.41+0.4)1003 =4.172458
还有:

ϕ − 1 ( 1 − α / 2 ) = ϕ − 1 ( 1 − 0.05 / 2 ) = ϕ − 1 ( 0.975 ) = 1.959964 \phi^{-1}(1-\alpha/2)=\phi^{-1}(1-0.05/2)=\phi^{-1}(0.975)=1.959964 ϕ1(1α/2)=ϕ1(10.05/2)=ϕ1(0.975)=1.959964
因为前者4.172458大于后者1.959964,所以X和Y不独立(相关的)。

(2)条件独立性测试

给定变量集S情况下,X,Y的条件相关系数计算如下:
r X , Y ∣ S = r X , Y ∣ S \ W − r X , W ∣ S \ W r Y , W ∣ S \ W ( 1 − r X , W ∣ S \ W 2 ) ( 1 − r Y , W ∣ S \ W 2 ) r_{X,Y|S}=\frac{r_{X,Y|S\backslash W}-r_{X,W|S\backslash W}r_{Y,W|S\backslash W}}{\sqrt{(1-r^2_{X,W|S\backslash W})(1-r^2_{Y,W|S\backslash W})}} rX,YS=(1rX,WS\W2)(1rY,WS\W2) rX,YS\WrX,WS\WrY,WS\W
其中W是变量集S的任意一个变量,

PS:论文[2]给出了一种计算 r X , Y ∣ S r_{X,Y|S} rX,YS的高效算法。

给定显著性水平 α \alpha α,X和Y在给定变量集S的相关性需满足以下条件:
z n − ∣ S ∣ − 3 > ϕ − 1 ( 1 − α / 2 ) z\sqrt{n-|S|-3}>\phi^{-1}(1-\alpha/2) znS3 >ϕ1(1α/2)
其中 |S|表示变量集S的长度,且有:
z = 0.5 l n ( 1 + r X , Y ∣ S 1 − r X , Y ∣ S ) z=0.5 ln(\frac{1+r_{X,Y|S}}{1-r_{X,Y|S}}) z=0.5ln(1rX,YS1+rX,YS)

方法2: Chi-Square Test of Independence and Conditional Independence

(1)独立性检测

构建一个列联表,表示X,Z两个变量的联合频率分布。如下图:
在这里插入图片描述

n 11 , n 12 , n 21 , n 22 n_{11},n_{12},n_{21},n_{22} n11,n12,n21,n22分别表示 ( X = 1 , Z = 1 ) , ( X = 1 , Z = 0 ) , ( X = 0 , Z = 1 ) , ( X = 0 , Z = 0 ) (X=1,Z=1),(X=1,Z=0),(X=0,Z=1),(X=0,Z=0) (X=1,Z=1),(X=1,Z=0),(X=0,Z=1),(X=0,Z=0)的数量,称为观测频率; n 1 ∗ , n 2 ∗ , n ∗ 1 , n ∗ 2 n_{1*},n_{2*},n_{*1},n_{*2} n1,n2,n1,n2分别表示 X = 1 , X = 0 , Z = 1 , Z = 0 X=1,X=0,Z=1,Z=0 X=1,X=0,Z=1,Z=0的数量,称为边缘频率。

基于联合频率表,我们可以计算出卡方检验统计量:
χ 2 = ∑ i = 1 i = 2 ∑ j = 1 j = 2 ( n i j − n ^ i j ) 2 n ^ i j \chi^2=\sum_{i=1}^{i=2}\sum_{j=1}^{j=2}\frac{(n_{ij}-\hat{n}_{ij})^2}{\hat n_{ij}} χ2=i=1i=2j=1j=2n^ij(nijn^ij)2
其中 n ^ 11 , n ^ 12 , n ^ 21 , n ^ 22 \hat{n}_{11},\hat n_{12},\hat n_{21},\hat n_{22} n^11,n^12,n^21,n^22是期望频率,按照下式计算:
n ^ i j = n i ∗ n ∗ j n \hat n_{ij}=\frac{n_{i*}n_{*j}}{n} n^ij=nninj

给定置信水平 α \alpha α,可以查询卡方分布(自由度为)的值 χ α 2 \chi^2_\alpha χα2。如果计算出的卡方统计量大于 χ α 2 \chi^2_\alpha χα2,就拒绝零假设,两者在给定的置信水平下有相关关系。

(2)条件独立性

在条件独立性测试中,测试X和Z在给定变量集S的独立性,我们生成取变量集S每个值情况下的列联表。例如,如果S中只有一个变量W,然后我们给出W=1和W=0两个情况下的列联表,如下图:
在这里插入图片描述

条件独立测试中的卡方统计量是所有列联表卡方统计量的总和。例如,如果W=1的表的卡方值为1.7,W=0表的卡方值为0.9,所以最终的卡方统计量的值为1.7+0.9=2.6。类似于非条件独立测试,我们可以通过比较卡方统计量与 χ α 2 \chi^2_\alpha χα2来判断是否独立。但是需要注意的是,条件独立性测试时自由度为 2 ∣ S ∣ 2^{|S|} 2S,|S|是变量集S中的变量个数。

参考文献

[1] Practical approaches to causal relationship exploration. LI J,LIU L,LE T D. Springerbriefs in Electrical and Computer Engineering . 2015,LIU L,LE T D. Springerbriefs in Electrical and Computer Engineering . 2015

[2] J. Schaefer, R. Opgen-Rhein, and K. Strimmer. corpcor: Effificient estimation of covariance and (partial) correlation. R package version 1.5, 7, 2010.

这篇关于独立性和条件独立性测试方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/323594

相关文章

详解如何在React中执行条件渲染

《详解如何在React中执行条件渲染》在现代Web开发中,React作为一种流行的JavaScript库,为开发者提供了一种高效构建用户界面的方式,条件渲染是React中的一个关键概念,本文将深入探讨... 目录引言什么是条件渲染?基础示例使用逻辑与运算符(&&)使用条件语句列表中的条件渲染总结引言在现代

Oracle Expdp按条件导出指定表数据的方法实例

《OracleExpdp按条件导出指定表数据的方法实例》:本文主要介绍Oracle的expdp数据泵方式导出特定机构和时间范围的数据,并通过parfile文件进行条件限制和配置,文中通过代码介绍... 目录1.场景描述 2.方案分析3.实验验证 3.1 parfile文件3.2 expdp命令导出4.总结

Python按条件批量删除TXT文件行工具

《Python按条件批量删除TXT文件行工具》这篇文章主要为大家详细介绍了Python如何实现按条件批量删除TXT文件中行的工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.简介2.运行效果3.相关源码1.简介一个由python编写android的可根据TXT文件按条件批

封装MySQL操作时Where条件语句的组织

在对数据库进行封装的过程中,条件语句应该是相对难以处理的,毕竟条件语句太过于多样性。 条件语句大致分为以下几种: 1、单一条件,比如:where id = 1; 2、多个条件,相互间关系统一。比如:where id > 10 and age > 20 and score < 60; 3、多个条件,相互间关系不统一。比如:where (id > 10 OR age > 20) AND sco

使用条件变量实现线程同步:C++实战指南

使用条件变量实现线程同步:C++实战指南 在多线程编程中,线程同步是确保程序正确性和稳定性的关键。条件变量(condition variable)是一种强大的同步原语,用于在线程之间进行协调,避免数据竞争和死锁。本文将详细介绍如何在C++中使用条件变量实现线程同步,并提供完整的代码示例和详细的解释。 什么是条件变量? 条件变量是一种同步机制,允许线程在某个条件满足之前进入等待状态,并在条件满

一些数学经验总结——关于将原一元二次函数增加一些限制条件后最优结果的对比(主要针对公平关切相关的建模)

1.没有分段的情况 原函数为一元二次凹函数(开口向下),如下: 因为要使得其存在正解,必须满足,那么。 上述函数的最优结果为:,。 对应的mathematica代码如下: Clear["Global`*"]f0[x_, a_, b_, c_, d_] := (a*x - b)*(d - c*x);(*(b c+a d)/(2 a c)*)Maximize[{f0[x, a, b,

notepad++ 正则表达式多条件查找替换

基础语法参考: https://www.cnblogs.com/winstonet/p/10635043.html https://www.linuxidc.com/Linux/2019-05/158701.htm   通常情况下我们查找的内容和要被替换掉的内容是一样的,我们只需要使用正则表达式精确框定查找内容,替换直接输入要替换的内容即可。 但有时会比较复杂,查找的内容,只需要替换其中

FPGA开发:条件语句 × 循环语句

条件语句 if_else语句 if_else语句,用来判断是否满足所给定的条件,根据判断的结果(真或假)决定执行给出的两种操作之一。 if(表达式)语句; 例如: if(a>b) out1=int1; if(表达式)         语句1; else         语句2; 例如: if(a>b)out1=int1;elseout1=int2; if(表达式1) 语句1; els

Kernel 中MakeFile 使用if条件编译

有时需要通过if  else来选择编译哪个驱动,单纯的obj-$(CONFIG_)就不是很方便,下面提供两种参考案例: 案例一: 来源:drivers/char/tpm/Makefileifdef CONFIG_ACPItpm-y += tpm_eventlog.o tpm_acpi.oelseifdef CONFIG_TCG_IBMVTPMtpm-y += tpm_eventlog.o

shell循环sleep while例子 条件判断

i=1# 小于5等于时候才执行while [ ${i} -le 5 ]doecho ${i}i=`expr ${i} + 1`# 休眠3秒sleep 3doneecho done 参考 http://c.biancheng.net/cpp/view/2736.html