Python中带权重的SAS Proc Corr

2024-05-08 04:53:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个SAS脚本,它使用“proc corr”过程以及weighting来创建加权相关矩阵。我发现,在这个函数中,我并没有很好地再现这个函数的权重。在

在寻找解决方案时,我发现了一些脚本和函数,它们使用权重数组计算两列/变量(exampleshere)的加权相关系数,但我正在尝试创建一个包含更多变量的加权相关矩阵。我尝试过通过变量组合循环使用这些函数,但它的运行速度比SAS过程慢得多。在

我想知道是否有一种有效的方法可以在python中创建一个加权相关矩阵,它的工作原理类似于SAS代码,或者至少返回等价的结果,而不必遍历所有变量组合。在


Tags: 方法函数脚本过程数组proc解决方案速度
1条回答
网友
1楼 · 发布于 2024-05-08 04:53:33

numpy的协方差采用两种不同的权重参数-我没有SAS来检查,但它很可能是一种类似的方法。在

https://docs.scipy.org/doc/numpy/reference/generated/numpy.cov.html#numpy.cov

一旦你有了一个协方差矩阵,就可以用这样的公式把它转换成相关矩阵

https://en.wikipedia.org/wiki/Covariance_matrix#Correlation_matrix

完整示例

import numpy as np

x = np.array([1., 1.1, 1.2, 0.9])

y = np.array([2., 2.05, 2.02, 2.8])

np.cov(x, y)
Out[49]: 
array([[ 0.01666667, -0.03816667],
       [-0.03816667,  0.151225  ]])

cov = np.cov(x, y, fweights=[10, 1, 1, 1])

cov
Out[51]: 
array([[ 0.00474359, -0.00703205],
       [-0.00703205,  0.04872308]])

def cov_to_corr(cov):
    """ based on https://en.wikipedia.org/wiki/Covariance_matrix#Correlation_matrix """
    D = np.sqrt(np.diag(np.diag(cov)))
    Dinv = np.linalg.inv(D)
    return Dinv @ cov @ Dinv # requires python3.5, use np.dot otherwise

cov_to_corr(cov)
Out[53]: 
array([[ 1.        , -0.46255259],
       [-0.46255259,  1.        ]])

相关问题 更多 >