gpt4 book ai didi

python - numpy 和 statsmodels 在计算相关性时给出不同的值,如何解释?

转载 作者:太空狗 更新时间:2023-10-30 00:55:48 25 4
gpt4 key购买 nike

我找不到使用 numpy.correlate 计算两个系列 A 和 B 之间相关性的结果与使用 statsmodels.tsa.stattools 获得的结果不同的原因。 ccf

这是我提到的这种差异的一个例子:

import numpy as np
from matplotlib import pyplot as plt
from statsmodels.tsa.stattools import ccf

#Calculate correlation using numpy.correlate
def corr(x,y):
result = numpy.correlate(x, y, mode='full')
return result[result.size/2:]

#This are the data series I want to analyze
A = np.array([np.absolute(x) for x in np.arange(-1,1.1,0.1)])
B = np.array([x for x in np.arange(-1,1.1,0.1)])

#Using numpy i get this
plt.plot(corr(B,A))

enter image description here

#Using statsmodels i get this
plt.plot(ccf(B,A,unbiased=False))

enter image description here

结果似乎有质的不同,这种差异从何而来?

最佳答案

statsmodels.tsa.stattools.ccf 基于 np.correlate 但做了一些额外的事情来给出统计意义上的相关性而不是信号处理意义上的相关性,见cross-correlation on Wikipedia .您可以在 source code 中看到具体发生了什么, 这很简单。

为了便于引用,我复制了以下相关行:

def ccovf(x, y, unbiased=True, demean=True):
n = len(x)
if demean:
xo = x - x.mean()
yo = y - y.mean()
else:
xo = x
yo = y
if unbiased:
xi = np.ones(n)
d = np.correlate(xi, xi, 'full')
else:
d = n
return (np.correlate(xo, yo, 'full') / d)[n - 1:]

def ccf(x, y, unbiased=True):
cvf = ccovf(x, y, unbiased=unbiased, demean=True)
return cvf / (np.std(x) * np.std(y))

关于python - numpy 和 statsmodels 在计算相关性时给出不同的值,如何解释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24616671/

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