Python实现CCC时负相关场景计算结果异常问题
CCC计算负相关场景结果异常的原因
核心结论
你写的CCC计算函数完全符合公式定义,返回值没有错误,你觉得结果不符合预期,本质是混淆了CCC和Pearson相关系数的设计用途。
两类相关系数的核心差异
- Pearson相关系数的设计目标是衡量两个变量的线性关联强度:只要两个变量满足完美线性关系
y = a*x + b(a≠0),系数的绝对值就为1,a为负时取值-1,不要求两个变量的数值尺度、均值完全匹配。 - Concordance相关系数(CCC)的设计目标是衡量两个变量的一致性程度:它评估的是观测点与
y=x(45度完全一致参考线)的偏离程度,取值同时受三个因素影响:
- 两个变量的线性相关程度(即Pearson r值)
- 两个变量的均值偏移程度
- 两个变量的方差尺度差异
只有当两个变量完全满足y=x时,CCC才能取到最大值1;只有当两个变量完全满足y=-x且均值均为0、方差完全相等时,CCC才能取到最小值-1。
测试用例结果解释
你使用的测试数据中:
x是0到1的等距序列,均值为0.5,方差约为0.093-y是-1到0的等距序列,均值为-0.5,方差约为0.093
两者确实是完美负线性关系,Pearson r计算结果为-1,但两者均值差达到1,所有观测点完全落在y=-x-1线上,和y=x的一致参考线偏离极大,因此CCC计算结果为-0.169是完全正确的。
你可以用符合CCC=-1前提的数据做验证:
import numpy as np def ccc(x,y): vx, cov_xy, cov_xy, vy = np.cov(x,y, bias=True).flat mx, my = x.mean(), y.mean() return 2*cov_xy / (vx + vy + (mx-my)**2) x = np.linspace(-1,1,10) y = -x print(ccc(x,y)) # 输出结果为-1.0,符合预期
内容的提问来源于stack exchange,提问作者John Titor
相关产品推荐
相关产品推荐

