python计算自相关系数,相关系数rxy怎么算

Qarcher:python怎么计算相关系数、偏相关系数?​zhuanlan.zhihu.com

import pandas as pd

import numpy as np

from scipy import stats

import stat

import math

import matplotlib.pyplot as plt

import seaborn as sns

x1=np.random.rand(10)

x2=np.random.rand(10)

x3=np.random.rand(10)

print(x1)

print(x2)

print(x3)

# 方法1:通过Pandas计算

df=pd.DataFrame([x1,x2,x3],index=[‘a’,’b’,’c’]).T

# 计算相关系数矩阵

corr=df.corr()

# 计算两列之间的相关系数

r_ab=df.a.corr(df.b)

r_ac=df.a.corr(df.c)

r_bc=df.b.corr(df.c)

# 计算偏方差

r_ab_c=(r_ab-r_ac*r_bc)/(((1-r_ac**2)**1/2)*((1-r_bc**2)**1/2))

# 方法2:通过numpy计算

lst=[x1,x2,x3]

# 生成相关系数矩阵

res=np.corrcoef(lst)

# 提取相关系数方式2

label=[‘a’,’b’,’c’]

corr=dict()

for row in range(res.shape[0]):

for col in range(res.shape[1]):

corr[‘r_{}{}’.format(label[row],label[col])]=res[row][col]

r_ab=corr[‘r_ab’]

r_ac=corr[‘r_ac’]

r_bc=corr[‘r_bc’]

r_ab_c=(r_ab-r_ac*r_bc)/(((1-r_ac**2)**1/2)*((1-r_bc**2)**1/2))

print(r_ab_c)

# 方法3:通过scipy计算

from scipy import stats

r_ab=stats.pearsonr(x1,x2)[0]

r_ac=stats.pearsonr(x1,x3)[0]

r_bc=stats.pearsonr(x2,x3)[0]

r_ab_c=(r_ab-r_ac*r_bc)/(((1-r_ac**2)**0.5)*((1-r_bc**2)**0.5))

print(‘ab_c的一阶偏相关系数为:’,r_ab_c)

# 方法4:自己写公式

def calc_corr(a, b):

a_avg = sum(a) / len(a)

b_avg = sum(b) / len(b)

# 计算分子,协方差————按照协方差公式,本来要除以n的,由于在相关系数中上下同时约去了n,于是可以不除以n

cov_ab = sum([(x – a_avg) * (y – b_avg) for x, y in zip(a, b)])

# 计算分母,方差乘积————方差本来也要除以n,在相关系数中上下同时约去了n,于是可以不除以n

sq = math.sqrt(sum([(x – a_avg) ** 2 for x in a]) * sum([(x – b_avg) ** 2 for x in b]))

corr_factor = cov_ab / sq

return corr_factor

r_ab=calc_corr(x1,x2)

r_ac=calc_corr(x1,x3)

r_bc=calc_corr(x2,x3)

r_ab_c=(r_ab-r_ac*r_bc)/(((1-r_ac**2)**1/2)*((1-r_bc**2)**1/2))

print(‘ab_c的一阶偏相关系数为:’,r_ab_c)

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注