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

devtools/2025/2/21 0:12:55/

文章目录

  • 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/devtools/143272.html

相关文章

使用二分查找法找出给定点距离给定点集合距离最近的点

1、场景描述 给定点Point A (x,y)和 直线点集合 Points [(x1,y1),(x2,y2),(x3,y3),(x4,y4),(x5,y5)......],计算出集合中距离点A最近的一个点 (如果集合中的两个点距离A点最近且相等,则只取其中一个) 2、代码&#x…

宠物空气净化器选哪种比较好?吸毛好的宠物空气净化器推荐

现如今,养宠物早已成为不少家庭生活中的重要一环,但随之而来的问题也令人头疼——满天飞舞的毛发、挥之不去的异味,甚至可能引发过敏症状,这些都让不少铲屎官感到束手无策。尽管市场上号称“宠物专用”的空气净化器层出不穷&#…

万字总结Python 设计模式:21种模式实际应用

设计模式是软件开发中的原则,它们提供了解决特定问题的通用解决方案。在 Python 中,由于其动态语言特性,设计模式不仅易于实现,还可以根据具体需求进行灵活调整。本篇文章将从传统的 创建型模式、结构型模式 和 行为型模式 出发&a…

MobileNetV1网络特点解析及实现

目录 ​编辑 1. 深度可分离卷积的革命性设计 2. 模型大小与计算效率的优化 3. 可扩展性的灵活性 4. 速度与精度的平衡艺术 5. 多种应用场景的适应性 6. 轻量级设计的深远影响 7. 使用卷积核大小为1x1的卷积层和全局平均池化层的创新 8. 激活函数的选择与模型性能的提升…

3D可视化引擎HOOPS Visualize与HOOPS Luminate Bridge的功能与应用

HOOPS Visualize HPS / HOOPS Luminate Bridge为开发者提供了强大的工具,用于在CAD应用中集成逼真的渲染能力。本文旨在梳理该桥接产品的核心功能、使用方法及应用场景,为用户快速上手并充分利用产品特性提供指导。 桥接产品的核心功能概述 HOOPS Lumi…

JVM--性能调优

性能调优是指通过一系列的技术手段和策略,对系统、应用或服务进行优化,以提高其运行效率、响应速度和整体性能的过程。这一过程旨在用更少的资源提供更好的服务,实现成本利益的最大化。为了达到这样的目标,性能调优通常涉及硬件、…

水凝胶微机器人:复杂体内环境的“导航高手”

大家好!今天来了解一项关于成像引导的生物可吸收声学水凝胶微型机器人(BAM)的研究——《Imaging-guided bioresorbable acoustic hydrogel microrobots》发表于《SCIENCE ROBOTICS》。这项研究为生物医学工程领域带来了新的突破,有…

解决 AWS SDK for Java 连接 S3 文件系统Unable to load an HTTP implementation 问题

错误信息 Error instantiating SqsClient - Unable to load an HTTP implementation from any provider in the chain. You must declare a dependency on an appropriate HTTP implementation or pass in an SdkHttpClient explicitly to the client builder.该错误表明&…