gpt4 book ai didi

python - DataFrame中列之间的相关性

转载 作者:IT老高 更新时间:2023-10-28 21:59:33 26 4
gpt4 key购买 nike

我对 pandas 很陌生,所以我想我做错了什么 -

我有一个数据框:

     a     b
0 0.5 0.75
1 0.5 0.75
2 0.5 0.75
3 0.5 0.75
4 0.5 0.75

df.corr() 给我:

    a   b
a NaN NaN
b NaN NaN

但是 np.correlate(df["a"], df["b"]) 给出:1.875

这是为什么呢?我想为我的 DataFrame 获得相关矩阵,并认为 corr() 可以做到这一点(至少根据文档)。为什么返回NaN

正确的计算方法是什么?

非常感谢!

最佳答案

np.correlate计算(未标准化)cross-correlation两个一维序列之间:

z[k] = sum_n a[n] * conj(v[n+k])

df.corr (默认)计算 Pearson correlation coefficient .

相关系数(如果存在)始终介于 -1 和 1 之间。互相关是无界的。

这些公式有些相关,但请注意,在互相关公式(上图)中,没有减去均值,也没有除以标准差,标准差是 Pearson 相关系数公式的一部分。

df['a']df['b'] 的标准差为零的事实是导致 df.corr 在任何地方都是 NaN。


从下面的评论中,听起来您正在寻找 Beta .它与 PIL 逊相关系数有关,但不是除以标准差的乘积:

enter image description here

除以方差:

enter image description here


您可以使用 np.cov 计算 Beta

cov = np.cov(a, b)
beta = cov[1, 0] / cov[0, 0]

import numpy as np
import matplotlib.pyplot as plt
np.random.seed(100)


def geometric_brownian_motion(T=1, N=100, mu=0.1, sigma=0.01, S0=20):
"""
http://stackoverflow.com/a/13203189/190597 (unutbu)
"""
dt = float(T) / N
t = np.linspace(0, T, N)
W = np.random.standard_normal(size=N)
W = np.cumsum(W) * np.sqrt(dt) # standard brownian motion ###
X = (mu - 0.5 * sigma ** 2) * t + sigma * W
S = S0 * np.exp(X) # geometric brownian motion ###
return S

N = 10 ** 6
a = geometric_brownian_motion(T=1, mu=0.1, sigma=0.01, N=N)
b = geometric_brownian_motion(T=1, mu=0.2, sigma=0.01, N=N)

cov = np.cov(a, b)
print(cov)
# [[ 0.38234755 0.80525967]
# [ 0.80525967 1.73517501]]
beta = cov[1, 0] / cov[0, 0]
print(beta)
# 2.10609347015

plt.plot(a)
plt.plot(b)
plt.show()

enter image description here

mus 的比例为 2,beta 约为 2.1。


你也可以用 df.corr 来计算它,虽然这是一种更迂回的方法(但很高兴看到有一致性):

import pandas as pd
df = pd.DataFrame({'a': a, 'b': b})
beta2 = (df.corr() * df['b'].std() * df['a'].std() / df['a'].var()).ix[0, 1]
print(beta2)
# 2.10609347015
assert np.allclose(beta, beta2)

关于python - DataFrame中列之间的相关性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15854878/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com