这两天在做数据处理的时候想对数据进行计算偏相关系数,由于忘了怎么写,并且网上找了好久也没发现什么适合我可以用的,于是查阅了书籍后,发现了偏相关系数的计算公式,公式如下:
用python代码简单实现
import numpy as np
def corr_cef(_xx, _yy):
"""
计算 _xx 对 _yy的相关系数(简单相关系数)
:param _xx: 自变量, 一维
:param _yy: 因变量, 一维
:return: 相关系数值
"""
return np.corrcoef(_xx, _yy)[0, 1]
def partial_corr(_xx1, _yy, _xx2):
"""
计算_xx1 对 _yy的偏相关系数
:param _xx1: 自变量 1, 一维
:param _xx2: 自变量 2, 一维
:param _yy: 应变量, 一维
:return: _xx1 对 _yy的偏相关系数值
"""
numerator = corr_cef(_xx1, _yy) - (corr_cef(_yy, _xx2) * corr_cef(_xx1, _xx2))
denominator = np.sqrt((1 - corr_cef(_yy, _xx2) ** 2) * (1 - corr_cef(_xx1, _xx2) ** 2))
return numerator / denominator
具体示例(完整代码):
import random
import numpy as np
# 假设有两个自变量 x1 和 x2,以及一个因变量 y
x1 = np.array([random.random()*10 for _ in range(10)])
x2 = np.array([random.random()*10 for _ in range(10)])
y = np.array([random.random()*10 for _ in range(10)])
def corr_cef(_xx, _yy):
"""
计算 _xx 对 _yy的相关系数(简单相关系数)
:param _xx: 自变量, 一维
:param _yy: 因变量, 一维
:return: 相关系数值
"""
return np.corrcoef(_xx, _yy)[0, 1]
def partial_corr(_xx1, _yy, _xx2):
"""
计算_xx1 对 _yy的偏相关系数
:param _xx1: 自变量 1, 一维
:param _xx2: 自变量 2, 一维
:param _yy: 应变量, 一维
:return: _xx1 对 _yy的偏相关系数值
"""
numerator = corr_cef(_xx1, _yy) - (corr_cef(_yy, _xx2) * corr_cef(_xx1, _xx2))
denominator = np.sqrt((1 - corr_cef(_yy, _xx2) ** 2) * (1 - corr_cef(_xx1, _xx2) ** 2))
return numerator / denominator
print(partial_corr(x1, y, x2))