【时间序列分析】距离相关系数(Distance Correction)理论及Python代码实现

news/2024/12/18 12:25:17/

文章目录

  • 1. 距离相关系数算法介绍
  • 2. Python代码实现
  • 3. 优缺点及作用
  • 4.总结
    • 4.1 线性依赖关系
    • 4.2 非线性依赖关系
    • 4.3 单调依赖关系
    • 4.4 复杂依赖关系

1. 距离相关系数算法介绍

距离相关系数:研究两个变量之间的独立性,距离相关系数为0表示两个变量是独立的。克服了皮尔逊相关系数的弱点,皮尔逊相关系数为0并不一定表示两个变量之间是独立的,也有可能是非线性相关的。

利用 D i s t a n c e C o r r e c t i o n Distance \ Correction Distance Correction 距离相关系数来研究两个变量 u u u v v v 之间的独立性,记为 d c o r r ( u , v ) dcorr(u,v) dcorr(u,v)

  • d c o r r ( u , v ) = 0 dcorr(u,v)=0 dcorr(u,v)=0 时,说明两个变量之间互相独立
  • d c o r r ( u , v ) dcorr(u,v) dcorr(u,v) 越大,说明两个变量之间相关性越强

{ ( u i , v i ) , i = 1 , 2.... n } \{(u_i,v_i), i=1,2....n\} {(ui,vi),i=1,2....n} 是总体 ( u , v ) (u,v) (u,v) 的随机样本, S z e k e l y Szekely Szekely 等定义两个随机变量 u u u v v v 的 DC样本估计值为:

d c o r r ( u , v ) = d c o v ( u , v ) d c o v ( u , u ) d c o v ( v , v ) dcorr(u,v) = \frac {dcov(u,v)} {\sqrt{dcov(u,u)dcov(v,v)}} dcorr(u,v)=dcov(u,u)dcov(v,v) dcov(u,v)

其中 d c o r r 2 ( u , v ) = S 1 + S 2 − 2 S 3 dcorr^2(u, v)= S_1+S_2-2S_3 dcorr2(u,v)=S1+S22S3 ,其中 S 1 , S 2 , S 3 S_1, S_2, S_3 S1,S2,S3 分别为:
S 1 = 1 n 2 ∑ i = 1 n ∑ j = 1 n ∣ ∣ u i − u j ∣ ∣ d u ∣ ∣ v i − v j ∣ ∣ d v S_1 = \frac {1}{n^2} \sum_{i=1}^n \sum_{j=1}^n ||u_i-u_j||_{d_u} ||v_i-v_j||_{d_v} S1=n21i=1nj=1n∣∣uiujdu∣∣vivjdv

S 2 = 1 n 2 ∑ i = 1 n ∑ j = 1 n ∣ ∣ u i − u j ∣ ∣ d u 1 n 2 ∑ i = 1 n ∑ j = 1 n ∣ ∣ v i − v j ∣ ∣ d v S_2=\frac {1}{n^2} \sum_{i=1}^n \sum_{j=1}^n ||u_i-u_j||_{d_u} \frac{1}{n^2}\sum_{i=1}^n\sum_{j=1}^n ||v_i-v_j||_{d_v} S2=n21i=1nj=1n∣∣uiujdun21i=1nj=1n∣∣vivjdv

S 3 = 1 n 2 ∑ i = 1 n ∑ j = 1 n ∑ l = 1 n ∣ ∣ u i − u l ∣ ∣ d u ∣ ∣ v j − v l ∣ ∣ d v S_3 = \frac{1}{n^2} \sum_{i=1}^n \sum_{j=1}^n \sum_{l=1}^n ||u_i-u_l||_{d_u} ||v_j-v_l||_{d_v} S3=n21i=1nj=1nl=1n∣∣uiuldu∣∣vjvldv

  • 这里, ∣ ∣ u i − u j ∣ ∣ d u ||u_i - u_j||_{d_u} ∣∣uiujdu ∣ ∣ v i − v j ∣ ∣ d v ||v_i - v_j||_{d_v} ∣∣vivjdv 分别表示 u i u_i ui u j u_j uj v i v_i vi v j v_j vj 之间的距离。该项反映了每对样本点 u i , v i u_i, v_i ui,vi u j , v j u_j, v_j uj,vj 之间的距离关系
  • 同理计算 d c o v ( u , u ) dcov(u,u) dcov(u,u) d c o v ( v , v ) dcov(v,v) dcov(v,v)

2. Python代码实现

python">from scipy.spatial.distance import pdist, squareform
import numpy as npfrom numbapro import jit, float32def distcorr(X, Y):""" Compute the distance correlation function>>> a = [1,2,3,4,5]>>> b = np.array([1,2,9,4,4])>>> distcorr(a, b)0.762676242417"""X = np.atleast_1d(X)Y = np.atleast_1d(Y)if np.prod(X.shape) == len(X):X = X[:, None]if np.prod(Y.shape) == len(Y):Y = Y[:, None]X = np.atleast_2d(X)Y = np.atleast_2d(Y)n = X.shape[0]if Y.shape[0] != X.shape[0]:raise ValueError('Number of samples must match')a = squareform(pdist(X))b = squareform(pdist(Y))A = a - a.mean(axis=0)[None, :] - a.mean(axis=1)[:, None] + a.mean()B = b - b.mean(axis=0)[None, :] - b.mean(axis=1)[:, None] + b.mean()dcov2_xy = (A * B).sum()/float(n * n)dcov2_xx = (A * A).sum()/float(n * n)dcov2_yy = (B * B).sum()/float(n * n)dcor = np.sqrt(dcov2_xy)/np.sqrt(np.sqrt(dcov2_xx) * np.sqrt(dcov2_yy))return dcor

代码地址:https://gist.github.com/satra/aa3d19a12b74e9ab7941

3. 优缺点及作用

优点:

  • 度量任意类型的依赖关系:距离相关系数能够捕捉并度量变量之间的所有形式的依赖性,无论是线性还是非线性。因此,即使两个变量之间有复杂的依赖关系(如高阶的多项式关系),它仍然能够识别出这种依赖性
  • 不依赖于数据分布假设:与皮尔逊相关系数不同,距离相关系数不依赖于数据的分布假设(如正态分布)。因此,它可以广泛应用于各种类型的数据集,尤其是当数据的分布未知或不符合正态分布时
  • 适应非线性关系:即使两个变量之间没有线性关系,距离相关系数也能有效地度量它们之间的依赖性。通过距离度量,距离相关系数能够揭示出变量之间的更深层次的依赖关系

缺点:

  • 距离相关系数的计算涉及到距离矩阵的计算和对每一对样本的处理,尤其是在高维数据时,计算量会迅速增加,导致计算复杂度较高。因此,距离相关系数的计算效率较低,可能在大数据集或高维数据中存在性能瓶颈。
  • 虽然距离相关系数能够适应各种数据类型,但它对数据中的噪声较为敏感。如果数据中存在大量噪声,可能会影响计算结果,从而导致误差增大。

4.总结

距离相关系数(Distance Correlation, DCorr)用于度量两个随机变量之间的依赖性或相关性,特别是在它们之间存在非线性关系时。它能够反映变量之间的整体关系,而不仅仅是线性关系。因此,距离相关系数揭示了变量之间是否存在某种依赖关系,无论这种关系是线性还是非线性的。

4.1 线性依赖关系

  • 线性依赖关系是指一个变量的变化与另一个变量的变化呈正比或负比关系,通常可以通过直线来表示。例如, Y = a X + b Y = aX + b Y=aX+b
  • 皮尔逊相关系数可以有效度量线性关系的强度,但无法识别非线性关系。而距离相关系数不仅可以度量线性依赖关系,也能捕捉非线性依赖
  • 示例:如果 Y = 3 X + 2 Y = 3X + 2 Y=3X+2,那么 X X X Y Y Y之间有线性依赖关系,距离相关系数会接近1,表示它们之间存在强相关

4.2 非线性依赖关系

  • 非线性依赖关系是指变量之间的关系不是简单的比例或加法关系,而是通过其他函数形式(如多项式、指数、对数、指数衰减等)描述。例如, Y = X 2 Y = X^2 Y=X2 Y = e X Y = e^X Y=eX
  • 皮尔逊相关系数可能为0,表示没有线性关系,但距离相关系数可以有效捕捉这种依赖性,反映它们之间的非线性关系
  • 示例:如果 Y = X 2 Y = X^2 Y=X2,那么当 X X X 增加时, Y Y Y 的增长速率会越来越快,这就是一种非线性依赖关系。距离相关系数将揭示出它们之间的依赖性

4.3 单调依赖关系

  • 单调关系指的是一个变量随着另一个变量的变化单方向变化,但不一定呈线性关系。单调性可以是递增的或递减的。即使这种关系不是线性的,变量之间也存在依赖性
  • 距离相关系数可以捕捉单调性(单调递增或单调递减的关系),而皮尔逊相关系数可能会失效,因为它只能检测线性相关性
  • 示例:如果 Y = ∣ X ∣ Y = |X| Y=X,那么 X X X Y Y Y 之间有单调递增的关系。随着 X X X 增大, Y Y Y 也在不断增加,但这种关系并不是线性的。距离相关系数能够检测到这种依赖关系

4.4 复杂依赖关系

  • 这种关系涉及更复杂的依赖,例如高阶的多项式关系、混合函数关系或系统中多个变量的交互作用等。通常,简单的线性或非线性模型无法充分捕捉到这些关系
  • 距离相关系数能够处理这些复杂的依赖关系,尤其是当多个变量之间存在复杂的交互作用时
  • 示例:如果 Y = sin ⁡ ( X ) + X 2 Y = \sin(X) + X^2 Y=sin(X)+X2,则 Y Y Y X X X 之间的关系同时具有周期性和多项式特征,这是一种复杂的依赖关系。距离相关系数能够揭示出这种复杂关系

本文参考:https://blog.csdn.net/jiaoaodechunlv/article/details/80655592


http://www.ppmy.cn/news/1556116.html

相关文章

【Linux】基础IO(内存文件)

目录 一、预备知识二、复习常见C语言的文件接口2.1 文件接口的说明2.1.1 fopen函数2.1.2 fputs函数2.1.3 fclose函数 2.2 文件接口的使用 三、认识操作文件的系统调用3.1 系统调用的说明3.1.1 open函数3.1.1.1 Linux中常用的传参方法 3.1.2 write函数3.1.3 close函数 3.2 系统调…

设计模式2

23中设计模式分类 创建型模式:对象实例化的模式,创建型模式用于解耦对象的实例化过程。(对象的创建和对象的使用分离) 5种:单例模式、工厂模式、抽象工厂模式、原型模式、建造者模式 结构型模式:把类或对…

解决Linux 虚拟机网段与虚拟机配置网段不一致

1.修改静态网络配置 cd /etc/sysconfig/network-scripts/ vim ifcfg-ens33 TYPEEthernet BOOTPROTOstatic NAMEens33 DEVICEens33 ONBOOTyes IPADDR192.168.232.209 NETMASK255.255.255.0 GATEWAY192.168.232.2 DNS18.8.8.8 2.重启网络 systemctl restart network

12月第五讲“ChatGPT在功能测试用例生成方面的优势”

内容简介 本书以目前流行的大语言模型ChatGPT为基础,用丰富的案例演示ChatGPT在软件测试中的赋能作用。本书主要介绍如何用ChatGPT生成需求规格说明书、测试计划、功能测试用例、自动化测试用例、接口测试用例、测试数据和性能测试用例,以及ChatGPT在分析…

【IntelliJ IDEA 集成工具】TalkX - AI编程助手

前言 在数字化时代,技术的迅猛发展给软件开发者带来了更多的挑战和机遇。为了提高技术开发群体在繁多项目中的编码效率和质量,他们需要一个强大而专业的工具来辅助开发过程,而正是为了满足这一需求,TalkX 应运而生。 一、概述 1…

Linux:入门篇——万字长篇解析

Linux:入门篇 目录 Linux:入门篇第一部分:Linux简介与发行版引言前提条件 1. **什么是 Linux?**1.1 Linux 的特点 2. **Linux 的发展历程**3. **Linux 发行版(Distributions)**3.1 发行版的分类3.2 常见的 Linux 发行版 4. **如何…

HB1910数字IP程控交换机generate.php存在RCE漏洞

免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…

ElasticSearch学习6

复杂查询 test3索引中的内容 ①查询匹配 match:匹配(会使用分词器解析(先分析文档,然后进行查询))_source:过滤字段(就是查询哪些字段)sort:排序form、size 分页(form表…