与熊猫的加权相关系数



有没有办法计算与熊猫的加权相关系数?我看到R有这样一个方法。另外,我想得到相关性的p值。这是我在R中没有发现的。关于加权相关性的解释链接到维基百科:https://en.wikipedia.org/wiki/Pearson_product-moment_correlation_coefficient#Weighted_correlation_coefficient

我不知道有任何Python包可以实现这一点,但推出自己的实现应该相当简单。使用维基百科文章的命名约定:

def m(x, w):
    """Weighted Mean"""
    return np.sum(x * w) / np.sum(w)
def cov(x, y, w):
    """Weighted Covariance"""
    return np.sum(w * (x - m(x, w)) * (y - m(y, w))) / np.sum(w)
def corr(x, y, w):
    """Weighted Correlation"""
    return cov(x, y, w) / np.sqrt(cov(x, x, w) * cov(y, y, w))

我试图使上面的函数尽可能与维基百科中的公式匹配,但也有一些潜在的简化和性能改进。例如,正如@Alberto Garcia Raboso所指出的,m(x, w)实际上只是np.average(x, weights=w),因此实际上没有必要为其编写函数

这些函数只是简单的计算。在进行计算之前,您可能需要考虑强制输入为数组,即x = np.asarray(x),因为如果传递列表,这些函数将不起作用。还可以实现额外的检查,以验证所有输入具有相等的长度、非零值等。

示例用法:

# Initialize a DataFrame.
np.random.seed([3,1415])
n = 10**6
df = pd.DataFrame({
    'x': np.random.choice(3, size=n),
    'y': np.random.choice(4, size=n),
    'w': np.random.random(size=n)
    })
# Compute the correlation.
r = corr(df['x'], df['y'], df['w'])

这里有一个关于p值的讨论。这看起来不像是一个通用的计算,这取决于你实际是如何获得权重的。

statsmodels包具有加权相关性的实现。

相关内容

  • 没有找到相关文章

最新更新